MFEM源码分析:代数库
数值计算引擎通常需要将表征物理模型的数学模型转化为线性/非线性方程组,进而求解这些线性/非线性方程组来获取数值解。因此,代数库自然成为数值计算引擎不可或取的模块。
而且,普遍认为,代数库的性能在很大程度上决定数值计算引擎的性能。
随着软硬件的发展,特别是异构并行计算的成熟,已经涌现出众多性能良好的代数库,因此,代数库在设计阶段,就要将可拓展、灵活性作为接口设计的重要工作。
MFEM是一套开源跨平台的有限元开发框架,借助于算子运算,构筑了统一的代数库编程模型,因此,有必要对MFEM 代数库模块予以分析总结。
Ref. from MFEM
MFEM is commonly used as a "finite element to linear algebra translator", since it can take a problem described in terms of finite element-type objects, and produce the corresponding linear algebra vectors and sparse matrices.
注1:限于研究水平,分析难免不当,欢迎批评指正。
注2:文章内容会不定期更新。
零、预修
一、Operator
MFEM Operator主要接口,包括
Interface | Description |
void Mult(const Vector &x, Vector &y) | |
void MultTranspose(const Vector &x, Vector &y) | |
void AddMult(const Vector &x, Vector &y, const real_t a = 1.0) | |
void AddMultTranspose(const Vector &x, Vector &y, const real_t a = 1.0) | |
Operator &GetGradient(const Vector &x) |
基于Operator,MFEM提供了对部分知名代数库的封装,如下表,
Library | Components | Description |
PETSc | PetscParVector, PetscParMatrix PetscLinearSolver, PetscPrecoditioner PetscODESolver | |
PARDISO | PardisoSolver | |
PARDISO for Clusters | CPardiso | |
HYPRE | HypreParVector, HypreParMatrix HypreSolver | |
MUMPS | MUMPSSolver | |
SuperLU_DIST | SuperLURowLocMatrix SuperLUSolver | |
Ginkgo | GinkgoIterativeSolver,GinkgoPreconditioner | |
STRUMPACK | STRUMPACKSolver | |
| ||
SUNDIALS | SundialsNVector,CVODESolver | |
HiOp | HiopNlpOptimizer |
参考文献
- Cojean T. Ginkgo-A math library designed for platform portability. Parallel computing, 2022(Jul.):111.
网络资料
MFEM