3.1 引言
在本章中,我们将深入探讨 Elmer FEM 模拟的核心组成部分:模拟输入文件,通常称为 .sif
文件。这些文件是 ElmerSolver 的输入,用于定义要解决的物理问题,包括几何体(通过网格)、材料属性、边界条件和求解器设置。掌握 .sif
文件的创建和编辑是进行 Elmer FEM 模拟的关键技能,也是二次开发的基础,因为它允许开发者自定义和扩展现有模型。本章将介绍 .sif
文件的结构、用途,并通过一个简单的热传导示例展示如何创建和运行模拟。无论是初学者还是经验丰富的开发者,理解 .sif
文件都是迈向高级开发的重要一步。
3.2 什么是 .sif
文件?
.sif
文件(Solver Input File)是一个文本格式的输入文件,用于配置 ElmerSolver 以运行特定的有限元模拟。它包含了模拟所需的所有信息,包括:
- 网格文件:定义几何体和网格结构。
- 物理模型:指定要解决的物理方程(如热传导、流体动力学)。
- 材料属性:定义材料的物理特性(如热导率、密度)。
- 边界条件:设置边界上的物理约束(如固定温度、热通量)。
- 求解器参数:控制求解过程的设置(如迭代次数、收敛容差)。
.sif
文件的结构类似于 INI 文件,由多个部分组成,每个部分通过关键字(如 Header
、Simulation
、Solver
等)定义,并包含键值对来设置参数。.sif
文件的灵活性使其成为 Elmer FEM 的核心,允许用户通过简单的文本编辑实现复杂的模拟设置。
3.3 .sif
文件的结构
一个典型的 .sif
文件包含以下主要部分,每个部分以 End
关键字结束:
部分 | 描述 |
---|---|
Header | 指定网格文件和检查点文件(用于恢复模拟)。 |
Simulation | 定义全局模拟设置,如坐标系、时间步长、输出文件等。 |
Solver | 配置求解器,包括物理方程、求解器模块和参数(如迭代次数、容差)。 |
Material | 定义材料属性,如热导率、密度、弹性模量等。 |
Body | 将材料和其他属性分配给网格中的体(几何区域)。 |
Boundary | 定义边界条件,如固定值、热通量或力。 |
Initial Condition | 为时间相关问题设置初始条件(可选)。 |
Equation | 指定哪些求解器应用于特定体(可选)。 |
Component | 定义多物理场耦合的组件(可选)。 |
以下是一个简化的 .sif
文件结构示例:
Header
Mesh DB "mesh_name" "mesh_name"
End
Simulation
Coordinate System = Cartesian 2D/3D
Output File = "output_name"
Post File = "post_name"
End
Solver 1
Procedure = "ModuleName" "SolverName"
Executive Solver = Logical True
[其他求解器参数]
End
Material 1
Name = "MaterialName"
[材料属性,如 Heat Conductivity]
End
Body 1
Material = 1
[其他体属性]
End
Boundary 1
Name = "BoundaryName"
[边界条件,如 Temperature、Heat Flux]
End
[更多边界定义]
[其他部分,如 Initial Condition]
注意事项:
- 每个部分必须以
End
关键字结束。 - 参数名称对大小写敏感。
- 网格文件必须与
Header
部分中的Mesh DB
名称匹配。
3.4 示例:热传导问题
为了更好地理解 .sif
文件的实际应用,我们将通过一个简单的二维热传导问题进行演示。假设我们有一个矩形区域,设置如下:
- 左侧边界温度固定为 100°C。
- 右侧边界温度固定为 0°C。
- 上下边界为绝热(无热通量)。
- 材料为均匀材料,热导率为 1.0(任意单位)。
- 模拟目标是求解稳态温度分布。
以下是对应的 .sif
文件:
Header
Mesh DB "heat_mesh" "heat_mesh"
End
Simulation
Coordinate System = Cartesian 2D
Output File = Results
Post File = heat.post
End
Solver 1
Procedure = "HeatSolve" "HeatSolver"
Executive Solver = Logical True
Steady State Max Iterations = 200
Steady State Tolerance = 1.0e-6
End
Material 1
Name = "Material 1"
Heat Conductivity = 1.0
End
Body 1
Material = 1
End
Boundary 1
Name = "Left"
Temperature = 100
End
Boundary 2
Name = "Right"
Temperature = 0
End
Boundary 3
Name = "Top"
Heat Flux = 0
End
Boundary 4
Name = "Bottom"
Heat Flux = 0
End
部分解释:
- Header:指定网格文件为
heat_mesh
,假设该网格文件已通过 ElmerGrid 或 Gmsh 生成。 - Simulation:设置二维笛卡尔坐标系,输出文件为
Results
,后处理文件为heat.post
。 - Solver 1:使用
HeatSolve
模块中的HeatSolver
求解热传导方程。Executive Solver = Logical True
表示这是主求解器。Steady State Max Iterations
和Steady State Tolerance
控制稳态求解的迭代次数和收敛容差。 - Material 1:定义一个名为
Material 1
的材料,热导率为 1.0。 - Body 1:将
Material 1
分配给整个网格体(假设网格只有一个体)。 - Boundary 1-4:定义边界条件。
Boundary 1
和Boundary 2
设置固定温度,Boundary 3
和Boundary 4
设置零热通量(绝热)。
3.5 运行模拟
要运行此模拟,请按照以下步骤操作:
- 确保网格文件
heat_mesh
已存在(后续章节将介绍如何生成网格)。 - 将上述内容保存为
heat.sif
文件。 - 在命令行中运行 ElmerSolver:
这将读取ElmerSolver heat.sif
heat.sif
文件,执行模拟,并生成指定的输出文件(Results
和heat.post
)。
运行输出:
- ElmerSolver 将在控制台显示模拟进度,包括迭代次数和收敛信息。
- 如果模拟成功,输出文件将包含温度分布等结果。
3.6 可视化结果
模拟完成后,可以使用以下工具可视化结果:
- ParaView(推荐):一个功能强大的开源可视化工具,适合处理 Elmer 的
.vtu
文件。- 打开
heat.post.vtu
文件(假设Post File
设置为heat.post
)。 - 使用颜色映射查看温度分布,或添加其他可视化选项(如等高线)。
- 打开
- ElmerPost:Elmer 自带的可视化工具,但功能有限,已停止开发。
ParaView 使用步骤:
- 下载并安装 ParaView。
- 打开
heat.post.vtu
文件。 - 选择“温度”字段,应用颜色映射以查看温度分布。
3.7 二次开发的意义
对于二次开发,.sif
文件是至关重要的接口,因为它定义了 ElmerSolver 如何处理物理问题。通过修改 .sif
文件,您可以:
- 调整参数:更改材料属性、边界条件或求解器设置以测试不同场景。
- 集成自定义求解器:在
Solver
部分引用自定义模块(将在后续章节介绍)。 - 自动化模拟:结合脚本(如 Python)生成
.sif
文件以运行参数化研究。
例如,您可以在 .sif
文件中添加自定义材料模型或边界条件,这需要编写 Fortran 代码并在 Procedure
关键字中引用。后续章节将深入探讨这些高级技术。
3.8 注意事项
- 网格文件:确保
Header
部分中的网格文件存在且格式正确。网格生成将在后续章节详细介绍。 - 语法正确性:
.sif
文件对大小写敏感,参数名称和值必须匹配 Elmer 的预期格式。 - 调试:如果模拟失败,检查控制台输出以识别问题,如网格错误或收敛失败。
- 文档参考:查阅 Elmer Models Manual 获取更多求解器参数和关键字。
3.9 总结
本章介绍了 .sif
文件的基本概念、结构和使用方法,并通过一个简单的热传导示例展示了如何创建和运行模拟。.sif
文件是 Elmer FEM 的核心,连接网格、物理模型和求解器,为二次开发提供了灵活的接口。通过掌握 .sif
文件的编辑,您可以轻松运行标准模拟,并为后续的自定义求解器开发奠定基础。下一章将探讨网格生成和处理,为创建 .sif
文件所需的网格文件做好准备。