对于一些大型算例,我们往往需要根据cpu性能采用多个节点并行运算,以减少计算时间。OpenFOAM中,几何场和附属场被拆分为单独的块,每个块用单独的 cpu 来进行计算。并行计算主要涉及到网格和场的分解、并行运行程序以及分解场的后处理。
网格和场的分解
decomposePar
:用来分解网格和场。通过读取decomposeParDict
(位于算例的 system 文件夹下)字典文件的参数,分解几何和场文件。
decomposeParDict
字典文件代码如下:
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 4.0 |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object decomposeParDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//并行节点数
numberOfSubdomains 4;
method simple;
//简单的几何分解。计算域依据方向被切分,例如 x、z 方向两块,y 方向一块
simpleCoeffs
{
n (2 1 2);
delta 0.001; //偏斜因子
}
//顺序几何分解法。和简单分解法差不多,但用户可以指定首先切分哪个方向,例如按x,y,z方向进行切割
hierarchicalCoeffs
{
n (1 1 1);
delta 0.001;
order xyz;
}
//手动分解法,用户可以直接把某一片网格区域指定给处理器,可通过setFileds进行定义
manualCoeffs
{
//给各个处理器分配任务的字典文件名称
dataFile "";
}
//数据是否写入不同的硬盘
distributed no;
//算例目录路径
roots ( );
// ************************************************************************* //
设置好上述文件后,需要初始化流场:
setFields
对设置好的流场进行分块处理:
decomposePar
并行运行程序
mpirun -np N solverName -parallel //N:并行线程数,由 numberOfSubdomains 决定
并行后处理
将算例中每个处理器下的时间步文件,重组后整合到这个算例下的相应时间步文件夹下:
reconstructPar
参考: