Elmer自用

1.Elemer组件

Elmer架构

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]故障排除和最佳实践

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值