在 Linux 上解决物理问题
几年前,我写了一篇关于使用 Elmer 解决复杂物理问题的文章。Elmer 自那时以来已经取得了很大的进步,所以我认为有必要重新审视一下这款模拟软件。
第一步是在您的系统上安装 Elmer。它可能存在于您的软件包管理系统中,但那些很可能是旧版本。如果您运行的是基于 Debian 的系统,您可以通过将 Elmer 存储库添加到 APT 并从那里安装来获取最新版本
sudo apt-add-repository ppa:elmer-csc-ubuntu/elmer-csc-ppa
sudo apt-get update
sudo apt-get install elmerfem-csc
这些步骤会与 Debian 主要存储库中已有的 Elmer 软件包冲突,因此请确保您的系统上之前没有安装过它们。元软件包 elemerfem-csc 还会安装许多示例文件,我将在本文中使用这些文件来描述 Elmer 的功能。
第一步是启动 Elmer。根据您的桌面环境,菜单系统中可能有一个入口。如果没有,请打开终端并使用命令 ElmerGUI
启动它。此命令会打开应用程序,并为您提供一个空白的工作区。

图 1. 执行 ElmerGUI
启动主应用程序,该应用程序控制使用 Elmer 所涉及的所有其他步骤。
大多数解决此类物理问题的程序都遵循三个广泛的步骤。第一步,或预处理步骤,包括为求解准备问题。这包括定义任何材料及其属性,以及描述将要发生的过程的任何方程。这也是您应用网格划分功能将几何图形分解为将在实际计算阶段使用的子部分的时候。第二步,或求解器步骤,是将输入数据提供给实际的求解器函数,这些函数将方程应用于您的问题中描述的材料。最后一步,或后处理步骤,是您找到问题的解决方案的地方。人类最容易理解图形信息,因此在后处理步骤中有工具可用于可视化最终解决方案,并帮助您查看问题的结果。
由于 Elmer 的安装包含许多示例文件,让我们继续使用这些文件来探索使用 Elmer 可以完成哪些类型的工作。这些文件都应该在 /usr/share/ElmerGUI/samples 目录中找到,并按示例文件中包含的文件类型细分。
让我们看一下泵截面上的热分布,看看分布是如何发生的。首先,您需要打开 pump_carter_sup.stp step 文件,该文件位于 samples 目录的 step 子目录中。当您打开此文件时,它将被加载到 ElmerGUI 几何查看器中。

图 2. ElmerGUI 几何查看器允许您查看将在计算中使用的对象。
此查看器允许您使用鼠标光标抓住对象并围绕其旋转,以便您可以很好地查看它并确保其结构正确。此对象也由 ElmerGUI 自动进行网格划分,以便可以在求解器阶段使用。

图 3. ElmerGUI 还可以处理在预处理步骤中对您的对象进行网格划分。
在这里,您可以看到已映射到您的对象上的一组三角形,以定义求解器应在其上运行的域。您可以通过单击“模型→摘要”菜单项来验证实际的网格划分,并在输出的顶部查找摘要信息。

图 4. 模型摘要告诉您模型中节点的数量、边和体积元素等信息。
在本例中,您可以看到网格划分创建了 7,862 个节点和 34,195 个体积元素。如果这对于您需要的精度来说不够精细,您可以单击“视图→CAD 模型”菜单项以再次调出几何查看器,然后单击“模型→首选项”。如果您确实进行了任何更改,请不要忘记单击“网格→重新网格划分”以重新执行网格划分过程。如果您添加大量子部分,这可能需要一些时间。
现在对象已加载,让我们开始设置一些初始条件。对于此示例,您希望在三个孔的内表面上设置温度。您可以通过双击表面来选择表面。如果您需要选择多个表面,只需同时按住 Ctrl 键。
由于您希望将这三个表面作为一个单元来处理,因此您需要统一它们。您可以通过单击“网格→统一表面”菜单项来执行此操作。要为整个问题设置初始条件,请单击“模型→设置”菜单项。

图 5. 模型设置窗口允许您为整个模型设置初始条件。
在这里,您可以设置输入和输出位置、常数、迭代次数或时间步长程序,以及许多其他选项。您还需要添加将定义您实际尝试求解的物理过程的方程。
单击“模型→方程→添加”将打开一个编辑窗口以创建新方程。

图 6. 您可以添加方程来定义您尝试建模的物理过程。
在本例中,让我们只添加一个热方程来计算热量如何流过这个泵零件。由于您需要将其应用于整个对象,因此您可以在方程编辑器中单击此处“主体 1”的应用框。但是,这是什么类型的对象?单击“模型→材料”会弹出一个窗口,您可以在其中定义对象的所有物理属性。

图 7. 您可以设置对象中使用的材料的所有物理属性。
还有一个名为“材料库”的按钮,您可以通过该按钮从一组预定义的材料中进行选择。在本例中,让我们将对象设置为铝。与方程编辑器一样,您也可以在此处直接将材料类型应用于对象。
单击“模型→体力”会弹出一个窗口,您可以在其中输入表示方程右侧的值。

图 8. 您可以设置体力,以定义所用方程的强制值。
单击“模型→边界条件”菜单项将弹出一个新窗口,您可以在其中为方程设置边界条件。

图 9. 您可以为求解器阶段使用的方程设置边界条件。
在本例中,假设您要创建一个新的边界温度 293° 开尔文,命名为 RoomTemp。要应用此边界条件,请返回到主 ElmerGUI 界面,然后再次双击孔内表面。将弹出一个小窗口,要求您设置边界条件,您可以在其中选择刚刚设置的 RoomTemp 条件。

图 10. 选择需要应用边界条件的部分。
为了运行求解器,您需要生成最终的输入文件。您可以通过单击“Sif→生成”菜单项来执行此操作。如果您想查看它,请单击“Sif→编辑”以弹出一个编辑器窗口。

图 11. 您可以打开编辑器直接操作求解器输入文件。
您还需要保存整个项目,以便在启动求解器之前将所有必需的文件放在一个位置。现在,单击“运行→启动求解器”以启动整个过程。完成后,您将看到一些新的输出窗口。顶部的窗口是收敛监视器,显示求解器达到最终解决方案的速度。

图 12. 求解器完成后,您将看到一个窗口,显示收敛发生的速度。
您可以在后处理步骤中可视化结果。在本例中,单击“运行→启动 ElmerVTK”菜单项以获取一种类型的可视化。如果您还安装了 paraview,您可以获得一个非常复杂的可视化应用程序来查看您的输出文件。

图 13. Paraview 可以为您的输出文件提供复杂的可视化工具。
本文只是一个示例问题的演练,旨在展示可用功能的一小部分。我希望本文已经引起了您的兴趣,足以让您查看其他示例问题,并将它们用作您自己研究兴趣的起点。