OpenFOAM 2.0体验 多级分块并行_苏军伟_新浪博客
根据老师给我发的教程,好像不能生成0/cellDist,百度了一下才发现。应该先decomposePar再setFields的。
修改system/decomposeParDict,如下,分成五个区。采用simple方法。manual的话则是修改manualCoeffs,我还暂时不用它。
numberOfSubdomains 5;
method simple;
//method manual;
simpleCoeffs
{
n (1 1 5);
delta 0.001;
}
然后,手动修改setFieldsDict,采用boxToCell,z方向平均分成5段,我这里z方向总长35.75,因此每段7.15,如下:
defaultFieldValues
(
volScalarFieldValue cellDist 0
);
regions
(
boxToCell
{
box (-2.35 -2.35 0) (2.35 2.35 7.15);
fieldValues
(
volScalarFieldValue cellDist 0
);
}
boxToCell
{
box (-2.35 -2.35 7.15) (2.35 2.35 14.3);
fieldValues
(
volScalarFieldValue cellDist 1
);
}
boxToCell
{
box (-2.35 -2.35 14.3) (2.35 2.35 21.45);
fieldValues
(
volScalarFieldValue cellDist 2
);
}
boxToCell
{
box (-2.35 -2.35 21.45) (2.35 2.35 28.6);
fieldValues
(
volScalarFieldValue cellDist 3
);
}
boxToCell
{
box (-2.35 -2.35 28.6) (2.35 2.35 35.75);
fieldValues
(
volScalarFieldValue cellDist 4
);
}
);
// ************************************************************************* //
接着,运行decomposePar:
decomposePar -cellDist
它会根据decomposeParDict在z方向自己分成5段,生成cellDist文件在0文件夹下。给每个网格分了并行编号。如果将 cellDist
当成是一个标量场,然后用设置初始场的工具对其值进行初始化,将来就能将对应网格手动分配到 cellDist
的值对应的进程。
运行setFields,就是openfoam自带的初始场工具:
setFields
用的是最简单的 boxToCell
,即指定一个 box 中的网格的 cellDist
值。设置好 setFieldDict
以后,运行 setFields
,便对 cellDist
的值进行了修改。即根据system/setFieldsDict中划分的区域,给出每个网格所在的区域编号。
然后又要执行:
renumberMesh -overwrite
随后,将cellDist中网格对应的区域编号(即跟在网格数量358270后括号中的内容)复制到
constant/manualDecomData中,即manualDecomData中的数据为:
下一步,需要根据 cellDist
的值来创建一个 labelList
,因为手动分块的时候,需要的是一个 labelList
。
在 constant 下创建一个文档, cellDecomposition。不过这些在师兄的parallel代码中已包括步骤,这里就不展示了。可以看前面提供的链接。
parallel文件夹
在师兄的代码里面,我看了parallel文件夹里面的文件,懂了这个文件是拿来干嘛的了。包括了上面的步骤。只要进这个文件夹里面,./make.sh就能分好区域了,
parallel.ini里面要设好分区的参数。
关于这个make.sh文件在干啥呢,就是在执行前面我展示的步骤。不过这里是simple方法,屏蔽了manual方法,如果想要manual方法则手动修改一下屏蔽的语句。想要setFields也同理。其实我现在对这三个东西有点乱了,之后要再仔细看看。