多区域模型单核计算没问题,但无法并行计算的问题



  • 最近借用chtMultiRegion做了一个包含2个几何区域的模型,两个区域之间需要互相调用变量值进行计算,单核运行可以正常进行,但并行时程序无法计算,显示错误如下:
    1.PNG

    经反复检查和调试,我发现"decomposePar -allRegions"并行分区后,各个processor中2个几何区域(简称region1和region2)的界面出问题了,边界region1_to_region2和region2_to_region1的faces数量不等。具体问题可以抽象为下图:
    图片1.png

    经我分析,由于计算时我需要调用变量的边界值进行计算,抽象为:Var1_region1_to_region2 - Var2_region2_to_region1,如果两个scalarField大小不同,计算就会报错。

    那么问题来了:并行时如何处理可以保证这里的界面region1_to_region2和region2_to_region1的faces数相等呢?

    另外,我尝试过单纯加密网格,虽然仍然无法正常并行计算,但我觉得可能网格精度对并行分区会有一些影响,比如processor的分界线的位置如果穿过了region1和region2交界面处的体积单元,那该体积单元的界面(region1_to_region2和region2_to_region1)是归属于哪个processor呢?

    不知道有没有大佬遇到过类似的问题,希望能得到解决!


  • 管理员

    你看你的proc1to2和proc2to1的面相等么



  • 谢谢李老师回复,我查看了,proc1to2和proc2to1的面对应相等的,下图是两个processor文件夹里的信息,可以对比上下两个processors的procBoundary0to1和procBoundary1to0:
    图片1.png

    值得注意的是,同一个processor上,如processor0上左侧图片的"anode_AM_to_anode_e"和右侧图片的"anode_e_to_anode_AM"中nFaces不相等,一个是4508,一个是4620,也就是我觉得无法并行计算的原因。

    我把用paraview可视化后的几何和对应的边界图也传上来,供李老师参考:
    图片2.png
    上图是两个几何区域:一个立方体,中间有一串相交的球颗粒,采用的是六面体网格。仅查看球颗粒区域的分区和边界,明显在区域分界线附近的边界数目没对应上(以上是采用的simple方法进行的并行分区):
    图片3.png


  • 管理员

    笨方法:你试试切分多块的时候绕过中心的区域?


  • 教授

    在decompose的时候,可以指定region1和region2的交界面在一个核中,这样应该就没问题了



  • @dzw05 请问需要在decompose文件中增加哪些关键字可以实现?若您能更具体些,将十分感谢!



  • @李东岳 目前我尝试了个笨办法,手动在某个球颗粒中心处划分求解器,边界region1_to_region2和region2_to_region1的faces数量就相等了,然后程序可以正常并行计算,但是不清楚具体原理。但这个办法如果用到三维空间随机分布的球颗粒中,操作可能就很麻烦了。如果有更好的办法,我再把它发布上来


  • 教授

    @jyang
    在decomposeParDict文件最后,加入:
    constraints
    {
    constraint1
    {
    type preservePatches;
    patches (region1_to_region2 region2_to_region1);
    }
    }


Log in to reply
 


CFD中文网 | 东岳流体学术 | 东岳流体商业 | 吉ICP备20003622号-1