Module solver

Module solver 

Source
Expand description

Linear solvers for BEM

This module provides various solvers for BEM systems:

  • direct - Direct LU factorization (for small systems)
  • cgs - Conjugate Gradient Squared (for iterative solving)
  • bicgstab - BiCGSTAB (alternative iterative solver)
  • gmres - GMRES (recommended for large BEM problems)
  • fmm_interface - Interface to use FMM operators with iterative solvers
  • preconditioner - Basic preconditioners
  • ilu_preconditioner - ILU preconditioner (recommended for BEM)
  • batched_blas - Batched BLAS operations for optimized matrix computations

§Solver Selection Guide

For BEM systems, we recommend:

System SizeSolverConfiguration
N < 1000Direct LU-
N < 10000GMRES(50) + ILUGmresConfig::for_small_problems()
N > 10000GMRES(100) + ILUGmresConfig::for_large_bem()

GMRES is generally preferred for large BEM problems due to:

  • Monotonic convergence (unlike CGS which can be erratic)
  • Better handling of non-symmetric matrices
  • Configurable memory usage via restart parameter

§Preconditioning Strategy

BEM systems are ill-conditioned. Simple diagonal (Jacobi) preconditioning is not sufficient. Use ILU preconditioning:

use bem::core::solver::{
    gmres_solve_with_ilu, GmresConfig, IluMethod, IluScanningDegree
};

let config = GmresConfig::for_large_bem();
let solution = gmres_solve_with_ilu(
    &matrix,
    &rhs,
    IluMethod::Tbem,
    IluScanningDegree::Fine,
    &config,
);

Re-exports§

pub use fmm_interface::CsrOperator;
pub use fmm_interface::DenseOperator;
pub use fmm_interface::DiagonalPreconditioner;
pub use fmm_interface::LinearOperator;
pub use fmm_interface::MlfmmOperator;
pub use fmm_interface::SlfmmOperator;
pub use fmm_interface::ilu_diagnostics;
pub use fmm_interface::solve_tbem_with_ilu;
pub use fmm_interface::solve_with_ilu;
pub use fmm_interface::solve_with_ilu_operator;
pub use fmm_interface::IluDiagnostics;
pub use fmm_interface::IluOperator;
pub use fmm_interface::gmres_solve_with_ilu;
pub use fmm_interface::gmres_solve_with_ilu_operator;
pub use fmm_interface::solve_gmres;
pub use fmm_interface::gmres_solve_fmm_hierarchical;
pub use fmm_interface::gmres_solve_with_hierarchical_precond;
pub use fmm_interface::gmres_solve_fmm_batched;
pub use fmm_interface::gmres_solve_fmm_batched_with_ilu;
pub use fmm_interface::recommended_mesh_resolution;
pub use fmm_interface::mesh_resolution_for_frequency_range;
pub use fmm_interface::estimate_element_count;
pub use fmm_interface::AdaptiveMeshConfig;
pub use preconditioner::BlockDiagonalPreconditioner;
pub use preconditioner::DiagonalPreconditioner as BasicDiagonalPreconditioner;
pub use preconditioner::HierarchicalFmmPreconditioner;
pub use preconditioner::IdentityPreconditioner;
pub use preconditioner::Preconditioner;
pub use preconditioner::RowScalingPreconditioner;
pub use preconditioner::SparseNearfieldIlu;
pub use ilu_preconditioner::IluMethod;
pub use ilu_preconditioner::IluPreconditioner;
pub use ilu_preconditioner::IluScanningDegree;
pub use ilu_preconditioner::IluSetup;
pub use gmres::gmres_solve;
pub use gmres::gmres_solve_preconditioned;
pub use gmres::GmresConfig;
pub use gmres::GmresSolution;
pub use batched_blas::SlfmmMatvecWorkspace;
pub use batched_blas::slfmm_matvec_batched;
pub use batched_blas::create_batched_matvec;
pub use batched_blas::batched_t_matrix_apply;
pub use batched_blas::batched_s_matrix_apply;
pub use batched_blas::batched_d_matrix_apply;
pub use batched_blas::batched_near_field_apply;

Modules§

batched_blas
Batched BLAS operations for complex matrices
bicgstab
BiCGSTAB (Bi-Conjugate Gradient Stabilized) solver
cgs
Conjugate Gradient Squared (CGS) solver
direct
Direct solver (LU factorization)
fmm_interface
FMM-solver interface
gmres
GMRES (Generalized Minimal Residual) solver
ilu_preconditioner
Incomplete LU (ILU) Preconditioner
preconditioner
Preconditioners for iterative solvers