当前位置: 首页 > news >正文

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主要接口,包括

InterfaceDescription

void Mult(const Vector &x, Vector &y)

\boldsymbol{y}=\boldsymbol{A}\left ( \boldsymbol{x }\right )

void MultTranspose(const Vector &x, Vector &y)

\boldsymbol{y}=\boldsymbol{A}^{T}\left ( \boldsymbol{x} \right )

void AddMult(const Vector &x, Vector &y, const real_t a = 1.0)

\boldsymbol{y}=\boldsymbol{y}+a*\boldsymbol{A}\left ( \boldsymbol{x }\right )

void AddMultTranspose(const Vector &x, Vector &y, const real_t a = 1.0)

\boldsymbol{y}=\boldsymbol{y}+a*\boldsymbol{A}^{T}\left ( \boldsymbol{x }\right )

Operator &GetGradient(const Vector &x)

\bigtriangledown \boldsymbol{A}\left ( \boldsymbol{x }\right )

基于Operator,MFEM提供了对部分知名代数库的封装,如下表,

LibraryComponentsDescription
PETSc

PetscParVector, PetscParMatrix

PetscLinearSolver, PetscPrecoditioner

PetscODESolver

PARDISOPardisoSolver
PARDISO for ClustersCPardiso
HYPRE

HypreParVector, HypreParMatrix

 HypreSolver

MUMPS

MUMPSSolver

SuperLU_DIST

SuperLURowLocMatrix

SuperLUSolver

Ginkgo

GinkgoIterativeSolver,GinkgoPreconditioner

STRUMPACK

STRUMPACKSolver

SLEPc

SlepcEigenSolver
SUNDIALSSundialsNVector,CVODESolver

HiOp

HiopNlpOptimizer

参考文献

  • Cojean T. Ginkgo-A math library designed for platform portability. Parallel computing, 2022(Jul.):111.

网络资料

MFEM


http://www.mrgr.cn/news/79329.html

相关文章:

  • 面试常见-Java 原生实现常见数据结构
  • 软考系分:今日成绩已出
  • docker-compose 之 禅道(zentao) 社区版
  • 离线无网环境中基于OpenEuler的everything ISO安装软件
  • babeltrace与CTF相关学习笔记-5
  • Hive3.X——异常处理Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10000
  • 清风数学建模学习笔记——Topsis法
  • WLAN AutoConfig服务假死?重启服务恢复网络连接!
  • 典型常见的知识蒸馏方法总结一
  • 欧拉角和旋转矩阵之间的转换
  • 高级 CEF 内核集成与 VC++——开发环境搭建与配置
  • 解决靶场网络问题教程(详细版)
  • 微服务架构解析:跨越传统架构的技术革命
  • 关于小标join大表,操作不当会导致笛卡尔积,数据倾斜
  • go引入skywalking
  • 大语言模型(2)--GPT-1
  • 【C语言】C语言的潜规则:运行环境对C程序执行特性的影响
  • 高级 CEF 内核集成与 VC++——CEF系统架构与开发环境搭建
  • 数据结构代码归纳
  • 大数据新视界 -- 大数据大厂之 Hive 临时表与视图:灵活数据处理的技巧(上)(29 / 30)
  • [创业之路-169]:《BLM战略规划》- 战略洞察 (战略能力中最最核心的能力) - 市场洞察 -1- 看宏观/行业 - 行业:激光器行业的详细分析
  • 【STM32 Modbus编程】-作为主设备读取保持/输入寄存器
  • 如何在鸿蒙API9和x86模拟器中使用MQTT
  • ️️耗时一周,肝了一个超丝滑的卡盒小程序
  • 图生3d 图生全景 学习笔记
  • 开发基础(3):开发应用沉浸式效果 组件安全区方案