1+1=10

记记笔记,放松一下...

开源有限元软件Elmer小记

Elmer 是什么?

官网是如下介绍Elmer的:

Elmer是一个开源的多物理场仿真软件,主要由CSC - IT科学中心(CSC)开发。Elmer的开发最初作为芬兰大学、研究机构和工业界的国家合作项目启动。自其开源发布以来,Elmer的使用和开发已成为国际化。

Elmer包含流体动力学、结构力学、电磁学、热传导和声学等物理模型。这些模型通过偏微分方程来描述,Elmer通过有限元法(FEM)求解。Elmer支持并行计算,并且在许多问题中,能够在数千个核心上达到良好的可扩展性。

elmer

历史

  • 1995年,作为芬兰国家级项目启动
  • 2008年,在sf.net平台开源
  • 2015年,转移到GitHub平台

开发环境

  • Fortran90/95(核心数值计算)
  • C/C++(外围功能和性能优化)
  • Python(脚本和后处理)

GUI界面使用Qt(6)开发,使用ParaView,VTK等库或工具。

使用CMake进行跨平台构建。

它涉及到的一些开源库,如下:

3rd tools

授权协议

整个软件是开源的,具体来说

  • Library parts under LGPL
  • Modules underGPL

我没有仔细去看源码,不清楚它的Library 和 Modules的具体包含哪些

Elmer架构

Elmer有一系列程序组成

components

  • 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/

Tools Qt, vtk