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 solverspreconditioner- Basic preconditionersilu_preconditioner- ILU preconditioner (recommended for BEM)batched_blas- Batched BLAS operations for optimized matrix computations
§Solver Selection Guide
For BEM systems, we recommend:
| System Size | Solver | Configuration |
|---|---|---|
| N < 1000 | Direct LU | - |
| N < 10000 | GMRES(50) + ILU | GmresConfig::for_small_problems() |
| N > 10000 | GMRES(100) + ILU | GmresConfig::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