Elmer for PDEs

作者:Joey Bernard

Elmer 是一款自 1995 年以来就存在的开源多物理场仿真软件。它由 CSC — IT Center for Science Ltd. 开发。该组织由芬兰教育、科学和文化部管理。借助 Elmer,您可以对物理系统进行建模,例如流体动力学、电磁学、热传递和声学。所有这些问题领域都有一个共同点——它们都由偏微分方程 (PDE) 描述。

PDE 是一个取决于多个变量(通常是多个空间变量)的微分方程。例如,描述热量如何在金属板上传输的方程(其中 a 是金属板的热扩散率)将类似于图 1 中显示的公式。

图 1. 示例方程

非常简单的 PDE 有精确解,但任何更复杂、描述更多物理情况的 PDE 都无法精确求解。这就是数值解发挥作用的地方。有三种广泛使用的方法:有限元法、有限体积法和有限差分法。Elmer 使用有限元法。基本思想是将问题空间分解为某种更小的空间网格,然后通过将其改造为网格上的稳态问题来完全消除 PDE,或者用常微分方程组来近似 PDE,然后使用标准方法(如欧拉方法或 Runge-Kutta 方法)对这些方程组进行积分。

Elmer 在 GPL 许可下发布,因此您可以随时下载源代码并编译您自己的版本。二进制文件适用于那些仍然陷于 Windows 的可怜用户。软件包应该适用于大多数 Linux 发行版。对于基于 Ubuntu 的发行版,您可以简单地使用以下命令安装 Elmer 和所有必要的库


sudo apt-get install elmer

Elmer 分解为几个部分。 ElmerSolver 是实际接收输入文件并执行计算以演化您感兴趣的 PDE 的部分。 ElmerPost 是可视化和后处理工具。使用此工具,您实际上可以看到计算结果。 ElmerGrid 是网格划分工具,可以创建简单的 1-D、2-D 和 3-D 网格,这些网格将用于演化您的 PDE。它也可以用于导入使用其他软件包(例如使用 Ansys 工具创建的软件包)生成的网格。

还有一个名为 ElmerGUI 的 GUI 界面。 ElmerGUI 允许您定义和生成 ElmerSolver 的输入文件,以及从其他软件导入外部网格(图 2)。

图 2. ElmerGUI

看到所有这些,您可能会想,“这太完美了!” 因此,我也应该提一下 Elmer 的一些缺点。 Elmer 实际上是一套工具,这些工具并非始终处于相同的开发水平。文档往往落后于最新功能,并且 ElmerGUI 可能会缺少 ElmerSolver 可以使用的一些更深奥的方法和模型。 Elmer 是一个庞大的系统,并且像任何大型软件包一样,它具有陡峭的学习曲线。可用的工具 (ElmerGrid) 只能处理生成相对简单的网格。这意味着,如果您有一个非常复杂的系统,您可能需要使用其他工具来生成网格,然后将其导入到 Elmer 中。如果您可以克服这些可能的缺陷,那么 Elmer 可能正是适合您的解决方案。

ElmerGUI 很可能是大多数人喜欢使用的。您可以导入各种格式的单元网格文件,为几何输入文件生成单元分区,设置您想要求解的 PDE 系统,并将模型数据导出到 ElmerSolver 中。最方便的是,ElmerGUI 还提供了求解器的并行版本 ElmerSolver.mpi 的接口。还有一个内置的后处理器,允许您直接从 ElmerGUI 查看结果。 ElmerGUI 中的菜单也是完全可编程的,因此您可以调整界面以更好地匹配您的特定问题领域。

用户论坛、wiki 和其他资源可在 http://www.elmerfem.org 上找到,并且可以从主要的 Elmer 网站获得非常好的教程。除了教程文档外,每个案例都提供了示例文件。这些文件可以作为您自己计算的良好起点,并在您学习系统时为您提供帮助。例如,让我们看一下示例“边缘电容计算”。下载示例文件并解压缩后,您可以从菜单中使用 文件→加载项目... 加载项目。加载后,所有输入数据也会被加载。项目只是一个目录,其中包含执行计算所需的所有文件。实际网格由文件 mesh.header、mesh.nodes、mesh.elements 和 mesh.boundary 定义。当前设置和状态存储在文件 egproject.xml 中。还有一个名为 case.sif 的求解器输入文件,当您实际准备好进行计算时,该文件将传递给 ElmerSolver。您可以通过 Sif→编辑... 编辑此文件(图 3)。

图 3. 求解器输入文件

您可以通过 模型→设置... 编辑模型详细信息(例如物理常数)。当您准备好运行计算时,可以使用 运行→启动求解器。这将打开一个日志窗口并显示其进度。收敛监视器显示 Elmer 收敛到结果的速度有多快(图 4)。

图 4. 收敛监视器

这会在您的项目目录中创建一个名为 case.ep 的新文件,其中包含您的计算结果。您可以使用 运行→启动后处理器 或 运行→后处理器 (VTK)... 查看它(图 5)。

图 5. 查看结果

如您所见,有多种工具可帮助您可视化计算结果。

既然您已经看到了运行其中一个教程的基本示例,那么 Elmer 还能为您做什么呢?求解器可以处理求解线性系统。例如,它可以通过 LAPACK 库使用直接方法来做到这一点。您可以使用一组 Krylov 子空间方法来进行迭代求解。但是,为了获得快速收敛,您通常需要使用某种形式的预处理。一类称为多层迭代法的方法用于大型线性系统。 Elmer 提供了两个选项:几何多重网格和代数多重网格。

更复杂且因此物理上更精确的问题往往是非线性的。这种非线性可能很简单,就像您在摆锤运动的完整方程中看到的那样,也可能像流体流动的 Navier-Stokes 方程,甚至像广义相对论方程一样复杂。 Elmer 通过首先在每个迭代步骤中线性化方程来处理非线性系统。方程如何线性化取决于正在使用的求解器方法。例如,Navier-Stokes 求解器可以使用 Picard 线性化或 Newton 线性化。

有用于求解时变系统的方法。一阶时间导数可以使用 Crank-Nicolson 方法或后向差分公式进行离散化。您还可以使用 Elmer 求解特征值问题。这些问题往往会在结构分析问题中出现,包括弹性阻尼等因素。

对于非常大的问题,您可能需要考虑并行运行计算。 Elmer 使用 MPI 作为并行化技术,以及域分解作为划分工作的方法。第一步是获取网格并将其细分为块或分区,根据要执行的实际计算,这将使负载均匀地分布在所有 CPU 上。然后,这些块被发送到各个 CPU,并完成计算。在运行结束时,结果被合并回单个结果。由于分区等工作涉及其中,大多数用户可能会利用 ElmerGUI 的并行化工具。

Elmer 的最后一个卖点是其模块化特性。求解器是用 FORTRAN 90 编写的。这意味着,如果您想添加自己的用户函数或完整的求解器,只需编写一个 FORTRAN 模块并将其包含在 Elmer 中即可。主要的 Elmer 站点提供了很好的文档,涵盖了所涉及的步骤。

希望这篇介绍能让您了解 Elmer 可以做什么。如果您正在研究多物理场问题,Elmer 可能是一个非常好的学习工具。它也可能是数值物理课程中引入的好工具,因为您可以建模很多东西。如果您最终在您的研究或学习中使用它,我很乐意听到您的消息。

加载 Disqus 评论