openfoam前处理:并行计算decomposeParDict和setFieldsDict

OpenFOAM 中用手动并行分块的方法 · 大专栏

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也同理。其实我现在对这三个东西有点乱了,之后要再仔细看看。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值