Navigation

    CFD中文网

    CFD中文网

    • Login
    • Search
    • 最新

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

    OpenFOAM
    3
    8
    869
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      jyang last edited by

      最近借用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呢?

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

      1 Reply Last reply Reply Quote
      • 李东岳
        李东岳 管理员 last edited by

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

        CFD课程 改成线上了 http://dyfluid.com/class.html
        CFD高性能服务器 http://dyfluid.com/servers.html

        1 Reply Last reply Reply Quote
        • J
          jyang last edited by

          谢谢李老师回复,我查看了,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

          1 Reply Last reply Reply Quote
          • 李东岳
            李东岳 管理员 last edited by

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

            CFD课程 改成线上了 http://dyfluid.com/class.html
            CFD高性能服务器 http://dyfluid.com/servers.html

            J 1 Reply Last reply Reply Quote
            • D
              dzw05 教授 last edited by

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

              自主匠心,普惠仿真。

              J 1 Reply Last reply Reply Quote
              • J
                jyang @dzw05 last edited by

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

                D 1 Reply Last reply Reply Quote
                • J
                  jyang @李东岳 last edited by

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

                  1 Reply Last reply Reply Quote
                  • D
                    dzw05 教授 @jyang last edited by

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

                    自主匠心,普惠仿真。

                    1 Reply Last reply Reply Quote
                    • First post
                      Last post

                    CFD中文网 | 东岳流体 | 京ICP备15017992号-2