Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. 多区域模型单核计算没问题,但无法并行计算的问题

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

已定时 已固定 已锁定 已移动 OpenFOAM
8 帖子 3 发布者 5.2k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • J 离线
    J 离线
    jyang
    写于 最后由 编辑
    #1

    最近借用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 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #2

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

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • J 离线
    J 离线
    jyang
    写于 最后由 编辑
    #3

    谢谢李老师回复,我查看了,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 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #4

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

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    J 1 条回复 最后回复
  • D 离线
    D 离线
    dzw05 超神
    写于 最后由 编辑
    #5

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

    自主匠心,普惠仿真。

    J 1 条回复 最后回复
  • J 离线
    J 离线
    jyang
    在 中回复了 dzw05 最后由 编辑
    #6

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

    D 1 条回复 最后回复
  • J 离线
    J 离线
    jyang
    在 中回复了 李东岳 最后由 编辑
    #7

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

    1 条回复 最后回复
  • D 离线
    D 离线
    dzw05 超神
    在 中回复了 jyang 最后由 编辑
    #8

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

    自主匠心,普惠仿真。

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]