多区域模型单核计算没问题,但无法并行计算的问题
-
最近借用chtMultiRegion做了一个包含2个几何区域的模型,两个区域之间需要互相调用变量值进行计算,单核运行可以正常进行,但并行时程序无法计算,显示错误如下:
经反复检查和调试,我发现"decomposePar -allRegions"并行分区后,各个processor中2个几何区域(简称region1和region2)的界面出问题了,边界region1_to_region2和region2_to_region1的faces数量不等。具体问题可以抽象为下图:
经我分析,由于计算时我需要调用变量的边界值进行计算,抽象为: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的面对应相等的,下图是两个processor文件夹里的信息,可以对比上下两个processors的procBoundary0to1和procBoundary1to0:
值得注意的是,同一个processor上,如processor0上左侧图片的"anode_AM_to_anode_e"和右侧图片的"anode_e_to_anode_AM"中nFaces不相等,一个是4508,一个是4620,也就是我觉得无法并行计算的原因。
我把用paraview可视化后的几何和对应的边界图也传上来,供李老师参考:
上图是两个几何区域:一个立方体,中间有一串相交的球颗粒,采用的是六面体网格。仅查看球颗粒区域的分区和边界,明显在区域分界线附近的边界数目没对应上(以上是采用的simple方法进行的并行分区):