Openfoam学习记录(2017.06.18)(并行时的manual分区)

       最近计算的虽然网格数不大,但是需要算很多不同参数影响下的扑翼算例,所以需要在服务器上进行并行计算。动网格计算使用了RBF方法,而在分区时发现4个processor是可行的,而8个或者更多产生错误,最后发现是由于RBF在并行时要求每一个分区都有运动边界的一部分,在我的算例里就是每个分区都要有一部分的翼面,所以用simple或者其他几个方法都只能在xyz三个方向分区很可能导致有的区内没有运动边界导致报错,并且考虑到最好使每个分区的网格数量差别不大,所以最后想试着用manual方法能不能实现。
      在我的算例里由于计算域的外边界是圆形,所以是切披萨型的分区,这里均分为八个分区,步骤如下:
      step1:Manual 方法需要 含有 一个 放在 constant constant 的 decomp decomp Dict Dict 的文件,如下
     FoamFile

{

version 2.0;

format ascii;

class labelList;

location"constant";

object decompDict;

}

// * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

 

(

0

0

...

1

);

 

圆括号内的是由编号从小到大排列的N个网格,数字代表该网格的processor数,比如如上0、1号网格就是processor0中的,N-1号网格则是processor1内的,我们需要令圆括号内的数字满足我们的分区。但是貌似没有一个直接的划分区域就能得到类似的一个文件的方法,我就用了一个比较笨的办法。

    step2:首先使用topoSet分区,需要在system文件夹下放一个topoDict文件,具体文件内容可以find -name topoSet 或者topoDict 查看使用方法。

     我们这里主要用到了cellSet里的boxToCellrotatedBoxToCell两种,toposet还有很多其他的操作可能会更加快捷。

     主要流程如下:

      1. )    new新建一个能够包含1/8圆柱的平行六面体形,比如这里的计算域半径为30m,机翼弦中点为(0.5 0 0),使用rotatedboxtocell那么则取

       origin   (0.5 0-1);

       i       (35 0 0);

       j       (35 35 0);

       k       (0 0 2);

    Openfoam学习记录(2017.06.18)(并行时的manual分区)_第1张图片

     如图,rotatedBoxToCell.c中提到,平行六面体的八个顶点即为o, o+i,o+j, o+i+j, o+k, o+i+k, o+i+j+k;(o代表origin),但是值得注意的是,i为o点右侧的边,j为o点左侧的边,即从i到j需要逆时针旋转,我试过在四个顶点中随意取o点、i、j,但是得出来的结果不合理。

step 3:在终端执行topoSet命令会在constand/set文件夹内生成各单元的文件,内容就是其包含的单元编号,将每个文件的单元编号复制到excel内,并在其后加上0-7的数字,然后再将单元编号升序排列,然后将随之变化后的0-7的那列复制到constant/decompDict文件中,再将system/decomposeParDict中的分区数改为8method改为manual,manualcoeffs中双引号内需要写调用的文件名,即constant内的decompDict。也可以简单的编个小程序解决。

你可能感兴趣的:(Openfoam)