最近几年比较活跃的开源有限元求解器要数MFEM (mfem.org)了。此开源包虽然定位于轻量级可扩展的C++程序求解库,但提供了高阶有限元空间,支持混合单元、非连续伽辽金单元、等几何分析方法等等。尤其在高性能计算上有巨大优势,不仅支持消息传递机制并行(MPI)和共享内存并行(OpenMP),同时对GPU并行计算也有很好的支持。自带的后处理显示GLVis程序可以方便读取显示结果文件。BSD协议对于开发者也是极为友好。最近MFEM支持了Python编程,对各种类型的科研人员显得更加友好。
笔者10多年前就开始关注MFEM这个开源包,当时只能进行一些简单的电磁场计算。随着时间的发展,功能越来越稳定,支持的线性求解器也越来越丰富。如hypre和PETSc,特征值求解器SLEPc,各种并行的迭代求解器Ginkgo都已很好支持。支持众多不同类型的单元和网格自适应功能。程序也提供了大量的实例,可以帮助使用者快速理解并运用此程序。
和很多偏微分方程求解器一样,MFEM需要用户提供网格文件,初始网格文件是不可或缺的输入文件。MFEM的方便之处在于,用户可以选择使用简单粗糙的初始网格,通过求解中的网格再划分功能,可以在计算中生成更加优化的网格。MFEM的网格格式清晰易懂,包含了dimension, elements, nodes, boundary 等信息块。其官网提供了详细的网格格式注解。
尽管MFEM有着众多优异的特性,并且网格文件格式清晰易懂。但对于复杂几何模型,很难通过手动编写完成。目前社区也没有一个款好用的初始网格生成工具,这也一定程度上限制了其在复杂几何模型上的应用。WELSIM不仅具有简单好用的前端界面,同时支持几何到网格的生成,并导出各种格式的网格文件。用户可以快速获得复杂模型的网格,并直接用于MFEM的计算求解。只需要在WELSIM中选择输出网格文件为MFEM格式即可。
在很多科学计算或求解偏微分过程中,网格文件只含有节点和单元信息是不够的。我们还需要提供边界条件所选择的边界网格信息。WELSIM也提供了很好的解决方案,用户只需要在GUI中将分析类型设置为电磁场(Electromagnetics),添加一些边界条件如电压等,同时选择好对应的几何模型边界。选择导出输入文件(Export Input Scripts)。
此时就会生成多个求解器相关的文件,其中网格文件中不仅含有节点和单元信息,还有边界条件中所需要的边界单元信息。
通过这种方式,用户可以快速生成用于MFEM求解器的复杂网格文件,从而进行更为复杂的仿真研究,或者更贴近实际工程应用的计算。
目前WelSim支持自动化生成Tet4/10和Tri3/6网格。
注:WELSIM不隶属于MFEM,与MFEM开发团队没有直接关联。这里引用“MFEM”仅用作技术博客文章与软件使用的参考。