高性能计算实战——OpenFOAM
概述
OpenFOAM is free, open source software for CFD from the OpenFOAM Foundation.
OpenFOAM是一款免费、开源的软件,具有广泛的功能,可用于计算流体力学,解决湍流、热传递等复杂问题。需要详细了解可查看官方网站
安装步骤
首先在官网查看安装信息,找到对应不同操作系统的安装包
集群操作系统为CenOS,对应Other Linux
部分。官网有Docker和源码两种安装方式,本文将介绍从源码编译的安装。
检查编译环境
逐个检查编译所需,以gcc为例,输入
gcc --version
查看gcc版本信息,检查无误后进入下一步依赖包的安装
安装依赖包
从官网查看所需依赖包如下
- Scotch and PT-Scotch
- CGAL Computational Geometry Algorithms Library
- not essential
安装Scotch/PT-Scoth
首先安装Scotch/PT-Scotch,需要注意选择version 6
以上的版本,便于libscoth libptscoth
两个库链接。在教程中链接提供的包中有ThirdParty
文件夹
进入文件夹后执行
./Allwmake
配置环境变量
在安装环境下的openfoam-dev/etc
文件夹中有对应的环境变量值,并有详细的注释,可以参照文件在.bashrc文件中进行环境变量的添加。
编译OpenFOAM
安装好依赖包之后,进入OpenFOAM目录下,执行脚本
./Allwmake
实验步骤
创建工作目录,并将想要实验的样例拷贝至目录下
生成网格
首先可在目录下定义对网格的描述,位于constant/polyMesh
目录下的blockMeshDict
有关于顶点信息、块信息以及边界信息等的描述和定义。
运行命令生成网格
blockMesh
部分输出如下
边界和初始条件
在初始场文件中有多个参数,例如压力p和速度U,这里直接仿照案例设置初始值
物理属性和配置
物理属性文件存储在后缀为Properties
的文件中,例如transportProperties
指定了运动粘度。
在system
文件下可以查看计算的配置文件
在文件中指定开始时间、结束时间、模拟的时间步长,writeControl
指定每个一段时间的输出结果
运行应用
将上述文件配置好后,使用对应的求解器,以simpleFoam
为例
simpleFoam
在执行开始时首先会读取配置文件信息
最终在818次迭代计算后结果收敛
并行计算
OpenFOAM使用的并行计算方法是域分解,将待求场划分为若干域,并分发到多个处理器上求解,依赖openMPI库。
准备数据
可在文件中定义对网格的描述,位于constant/polyMesh
目录下的blockMeshDict
blockMesh生成网格
setFields
假设初始场中有两种不同的初始参数,例如水中\(\alpha_{water} = 1\),空气中\(\alpha_{water} = 0\),在system
文件夹中的setFieldDict
文件中可以进行如下配置
defaultFieldValues
(
volScalarFieldValue alpha.water 0
);
regions
(
boxToCell
{
box (0 0 -1) (0.1461 0.292 1);
fieldValues
(
volScalarFieldValue alpha.water 1
);
}
);
defaultFieldValues
指定了默认的参数值,需要指定的区域用regions
标注,内部用正方体的两个顶点标出区域范围,fieldValues
指定参数的值
执行时,先将所有场参数设为默认值,然后根据regions
去覆盖原来的默认值。
域划分
关于该操作的细节,可以在system
文件夹下的decomposeParDict
中进行详细配置
这里配置划分为4个域,划分策略可以通过method参数来指定,总共有4种策略
- simple,按照方向划分,例如x方向划分2块,y方向划分1块
- hierarchical,在simple的基础上,指定划分间距、划分方向次序(例如xyz),按照次序轮流划分
- scotch,可以指定不同域之间有不同的权重,可以用来在性能有差异的机器运行
- manual,自定义划分策略
配置完后,即可执行decomposePar
命令,该命令执行成功后会生成processor0~3,共4个文件夹,用于并行计算。
运行应用
在system/controlDict
中定义执行的应用类型为interFoam
编写slurm脚本,配置使用的核数为4,并执行脚本。
查看结果
文件开头有相关配置情况,例如这里nProcs为4,使用4个核
结尾处有对应执行时间
结果分析
采用不同的cpu数量进行实验,得到结果并制图如下。(均采用simple
这一划分配置)
- 在cpu核数较小时的并行效果较好,有了一定的性能提升。
- cpu核数较大时,可能由于每一块域中计算量较小,此时不同域之间的数据处理成为主要耗时,执行时间显著上升。
补充:新的数据导入计算(命令行方式)
项目基本结构:(图来自于官方手册)
- constant:包括对网格mesh,和各个物理属性的描述(Properties结尾)
- system:对系统的配置
- time directories:某一时刻中各个物理量的值
对于一个给定好的数据集,constant
和time directories
已经给定,需要根据需要在system
中进行配置
controlDict配置
主要控制的是数据的IO。这里介绍主要参数的含义,更细致的配置可以在官网查看
时间控制
- startFrom:计算的开始时间
- stopAt:计算的结束时间
- deltaT:计算的时间间隔
图中所示即为从0时刻开始到1时刻,间隔0.001进行计算
写入控制
- writeControl、writeInterval:写入间隔
- purgewrite:覆盖写的文件夹数量,例如指定为2,则第3个时刻的数据将会覆盖1时刻。0为不覆盖,每次新写文件
- writeFormat:两种格式ascii和binary二进制格式
- writeCompression:写完后是否打包为gzip
- timeFormat、timePrecision:写入的时间格式、精度
fvScheme配置
配置数值计算的计划
例如
- gradSchemes:梯度
- divSchemes:导数
- laplacianSchemes:拉普拉斯运算
除此之外,如果需要有其他计算(例如散度divergence),同样可以在该文件中配置。
fvSolution配置
指定求解器、误差等
- solver:指定求解器,不同的求解器可能需要进一步的配置
- tolerance:误差
- relTol:相对误差
除此之外,还可以指定最大迭代次数。当误差、相对误差超过指定数值,或者迭代次数超过限制,结束计算。
配置完需要的system
文件,就可以进一步计算自定义的数据
案例分析
可以在安装目录的tutorials
下找数据测试,具体地以$FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreak
为例,先将数据拷贝至工作目录。
cp -r $FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreak/damBreak .
输出信息配置
根据需求修改controlDict的输出信息参数为
startFrom startTime;
startTime 0;
stopAt endTime;
endTime 1;
deltaT 0.001;
求解器使用默认求解器
域划分配置
decomposeParDict文件规定并行域的总数、划分方案
例如使用4核计算时
- numberOfSubdomains,将并行域数量规定为4,该参数由具体划分方案确定
- method,域划分策略为simple,即按照坐标轴划分
- 详细配置为(2, 2, 1),x、y方向上各有2个域,z轴上一个,所以整体为4
完成配置后,即可按照计算的步骤进行导入数据的计算。
标签:文件,流体力学,配置,指定,OpenFOAM,划分,文档,计算 From: https://www.cnblogs.com/ddl789/p/17208388.html