Elmer 是什么?
官网是如下介绍Elmer的:
Elmer是一个开源的多物理场仿真软件,主要由CSC - IT科学中心(CSC)开发。Elmer的开发最初作为芬兰大学、研究机构和工业界的国家合作项目启动。自其开源发布以来,Elmer的使用和开发已成为国际化。
Elmer包含流体动力学、结构力学、电磁学、热传导和声学等物理模型。这些模型通过偏微分方程来描述,Elmer通过有限元法(FEM)求解。Elmer支持并行计算,并且在许多问题中,能够在数千个核心上达到良好的可扩展性。
历史
- 1995年,作为芬兰国家级项目启动
- 2008年,在sf.net平台开源
- 2015年,转移到GitHub平台
开发环境
- Fortran90/95(核心数值计算)
- C/C++(外围功能和性能优化)
- Python(脚本和后处理)
GUI界面使用Qt(6)开发,使用ParaView,VTK等库或工具。
使用CMake进行跨平台构建。
它涉及到的一些开源库,如下:
授权协议
整个软件是开源的,具体来说
- Library parts under LGPL
- Modules underGPL
我没有仔细去看源码,不清楚它的Library 和 Modules的具体包含哪些
Elmer架构
Elmer有一系列程序组成
- ElmerGUI:界面,前处理(包含ElmerGrid,负责结构化网格和网格导入)
- ElmerSolver:有限元求解器,每个物理方程对应一个插件
- Paraview:结果展示?
ElmerGUI
- 用户界面:使用 Qt 开发
- 网格生成:Tetgen,Netgen,ElmerGrid等插件。CAD界面基于 OpenCascad
- 新的求解器可以通过GUI集成
ElmerSolver
ElmerSolver的主体部分!
ElmerGrid
除了作为 ElmerGUI的插件使用外,也可以独立运行。
支持
- 2D、3D结构化网格的创建
- 网格导入,支持Ansys,Abaqus,Fidap,Comsol,Gmsh等格式
- 网格操作
- 分割(Partitioning)
ParaView
ParaView是一个独立工具,让ElmerSolver生成它可识别的格式,而后用其打开。
ParaView也可以通过ElmerGUI被调用。
另外,ElmerGUI内置VTK以及老的ElmerPost,也可以用于可视化。但是ParaView是ElmerSolver 推荐的方式!!
其他
- ElmerPost:老的后处理,已不再维护
- ElmerFront:老的前端界面,已不再维护
- Mesh2D:老的Mesh软件,供ElmerFront调用
源码结构
重点关注:
- eio:Elmer输入/输出库,使用C++编写,并由ElmerSolver用于一些I/O操作。
- elmergrid:ElmerGrid源代码,使用C语言编写,包括来自Karypis实验室的Metis库。
- fem:ElmerSolver源代码,主要使用Fortran90编写。
- hutiter:主要使用Fortran90编写的迭代线性代数求解器,由ElmerSolver调用。
- matc:该库用于ElmerSolver命令文件解释器和ElmerPost命令窗口中,用于评估用C语言编写的数学表达式。
- mathlibs:包括基本数学库,如Lapack、Blas、Arpack和Parpack。
- ElmerGUI:新的前处理器ElmerGUI的源代码。
- umfpack:包括加利福尼亚大学的Umfpack(GPL版本4.4)库的源代码。
不再维护:
- front
ElmerFront源代码,使用C++编写。 - post
ElmerPost源代码,使用C语言编写。 - meshgen2d
包括2D Delaunay网格生成器的源代码。
参考
- https://github.com/ElmerCSC/elmerfem
- https://research.csc.fi/web/elmer/elmer
- https://www.nic.funet.fi/pub/sci/physics/elmer/