1.Elemer组件

1.1 Elmer组成部分
ElmerGrid-----前处理部分
ElmerGUI-----Elmer的可视化界面,方便用户使用
ElmerSolver–后处理部分(进行各种物理模拟)
Paraview------求解结果的可视化软件
2.ElmerGUI
ElmerGUI能够使用以下三个方法对模型进行前处理划分
ElmerGrid (内置)
Netgen (内置)
Tetgen (可选)

3. ElmerSolver
3.1 如何使用ElmerSolver
Elmer FEM 是一个基于 C++ 和 Fortran 的开源软件。Fortran是一种语言。
step1.编写sif文件 命名为xxx.sif
step2.使用命令行运行指令
ElmerSolver xxx.sif
3.2 Elmersolver的输入格式
.sif 文件(Solver Input File)是一个文本格式的输入文件,用于配置 ElmerSolver 以运行特定的有限元模拟。它包含了模拟所需的所有信息,也就是说,我们所有的参数设置都是在.sif文件中设置。详情见[1]
Header
CHECK KEYWORDS Warn # 检查关键字时发出警告
Mesh DB "." "." # 网格数据库的路径设置为当前目录
Include Path "" # 包含文件的路径为空
Results Directory "" # 结果文件存放目录为空(默认当前目录)
End
Simulation
Max Output Level = 4 # 最大输出详细程度为4级
Coordinate System = Cartesian # 使用笛卡尔坐标系
Coordinate Mapping(3) = 1 2 3 # 坐标映射,x→1, y→2, z→3
Simulation Type = Steady state # 模拟类型为稳态
Steady State Max Iterations = 1 # 稳态模拟的最大迭代次数为1
Output Intervals(1) = 1 # 输出间隔为1(每1步输出一次)
Solver Input File = case.sif # 求解器输入文件名为case.sif
Post File = case.vtu # 后处理文件名为case.vtu
End
Constants
Gravity(4) = 0 -1 0 9.82 # 重力向量及大小,方向沿y轴负方向,大小9.82m/s²
Stefan Boltzmann = 5.67e-08 # 斯特藩-玻尔兹曼常数
Permittivity of Vacuum = 8.8542e-12 # 真空介电常数
Permeability of Vacuum = 1.25663706e-6 # 真空磁导率
Boltzmann Constant = 1.3807e-23 # 玻尔兹曼常数
Unit Charge = 1.602e-19 # 单位电荷(电子电荷)
End
Body 1
Target Bodies(1) = 1 # 目标体编号为1
Name = "Body 1" # 体的名称为"Body 1"
Equation = 1 # 关联到方程1
Material = 1 # 使用材料1
Body Force = 1 # 应用体积力1
End
Solver 1
Equation = Heat Equation # 求解的方程为热传导方程
Variable = Temperature # 求解变量为温度
Procedure = "HeatSolve" "HeatSolver" # 调用的求解器程序
Exec Solver = Always # 总是执行该求解器
Stabilize = True # 启用稳定性处理
Optimize Bandwidth = True # 优化带宽
Steady State Convergence Tolerance = 1.0e-5 # 稳态收敛 tolerance
Nonlinear System Convergence Tolerance = 1.0e-7 # 非线性系统收敛 tolerance
Nonlinear System Max Iterations = 20 # 非线性系统最大迭代次数
Nonlinear System Newton After Iterations = 3 # 迭代3次后启用牛顿法
Nonlinear System Newton After Tolerance = 1.0e-3 # 达到该容差后启用牛顿法
Nonlinear System Relaxation Factor = 1 # 非线性系统松弛因子
Linear System Solver = Iterative # 使用迭代求解器
Linear System Iterative Method = BiCGStab # 迭代方法为BiCGStab
Linear System Max Iterations = 500 # 线性系统最大迭代次数
Linear System Convergence Tolerance = 1.0e-10 # 线性系统收敛容差
BiCGstabl polynomial degree = 2 # BiCGStab多项式阶数
Linear System Preconditioning = ILU0 # 预处理方法为ILU0
Linear System ILUT Tolerance = 1.0e-3 # ILUT预处理容差
Linear System Abort Not Converged = False # 不收敛时不终止计算
Linear System Residual Output = 10 # 每10步输出残差
Linear System Precondition Recompute = 1 # 每1步重新计算预处理
End
#关联求解器集合
Equation 1
Name = "Heat Equation" # 方程名称为"Heat Equation"
Active Solvers(1) = 1 # 激活求解器1
End
#定义材料属性
Material 1
Name = "Aluminium (generic)" # 材料名称为"Aluminium (generic)"
Heat expansion Coefficient = 23.1e-6 # 热膨胀系数
Sound speed = 5000.0 # 声速
Youngs modulus = 70.0e9 # 杨氏模量
Poisson ratio = 0.35 # 泊松比
Density = 2700.0 # 密度
Heat Conductivity = 237.0 # 热导率
Heat Capacity = 897.0 # 热容
End
Body Force 1
Name = "Heating" # 体积力名称为"Heating"
Heat Source = 0.1 # 热源强度为0.1
End
#定义边界条件
Boundary Condition 1
Target Boundaries(6) = 57 58 67 68 77 78 # 目标边界编号
Name = "RoomTemp" # 边界条件名称为"RoomTemp"
Temperature = 293.0 # 边界温度设置为293K(约20°C)
End
使用MPI进行并行计算

注意
在linux中,ElmerSolver_mpi与环境中的MPI环境可能有所冲突。这时需要更换MPI环境
module unload mpi/mpich/4.1.2-gcc-9.3.0 //自己的MPI模块
module load Elmer/8.4-hpcx-intel-2017 //加载Elmer的mpi模块
mpirun -np N ElmerSolver_mpi xxx.sif //使用N个核进行并行计算
ElmerSolver的输入网格
1.首先在.sif文件中
Header
Mesh DB "." "mymesh" //Elmer网格文件位于目录./mymesh中
End
Elmer的并行计算的关键点
如何使用Elmer进行并行求解
示例:将名为"mesh"的网格分成N个分区
ElmerGrid x y mesh -partition N 1 1 -metis
//x为输入网格的网格格式代码,参见[2],y为输出格式的网格格式
//-partition N 1 1 中的 1 1:表示分区在三维空间中的划分方式
//-partition 2 1 1:仅在 X 方向分成 2 个分区(总分区数 = 2×1×1 = 2)
//-partition 2 2 1:在 X 方向分 2 区,Y 方向分 2 区(总分区数 = 4)
总分区数必须与后续 MPI 进程数(mpiexec -n N 中的 N)一致。
在超算上使用elmer
step1.在超算上写好case.sif文件
step2.确定并行分割的vol文件
step3.编写xxx.sbatch文件
#!/bin/bash
#SBATCH -J dtk_elmer
#SBATCH --comment=WRF
#SBATCH -N 1
#SBATCH --ntasks-per-node=32
#SBATCH -p xahcnormal
#SBATCH -o %j
#SBATCH -e %j
export core_n=32
module unload mpi/mpich/4.1.2-gcc-9.3.0
module load Elmer/8.4-hpcx-intel-2017 //加载超算中存在的elmer组件
mkdir ${SLURM_JOB_ID}
mpirun -np 32 ElmerSolver_mpi case.sif
mpirun -np 32 ElmerSolver_mpi //不写case.sif的情况下,要写一个ELMERSOLVER_STARTINFO文件,文件内容为case.sif
step4
sbatch xxx.sbatch
官方资料:
[1]Elmer官方文档链接
[2]Elmer官方并行文档
参考资料:
[1]Elmer简介
[2]Elmer环境搭建
[3]理解和创建模拟输入文件 (.sif 文件)
[4]网格生成和处理
[5]运行模拟和可视化结果
[6]自定义求解器和模型
[7]与其他工具集成
[8]并行计算和性能优化
[9]案例研究
[10]故障排除和最佳实践
1498

被折叠的 条评论
为什么被折叠?



