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
7 帖子 3 发布者 5.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • C 离线
    C 离线
    ChimneyFoam
    写于 最后由 编辑
    #1

    问题

    之前用OpenFOAM分块并行计算,并没有注意结果是否有问题。但是最近用并行计算三维模拟的时候出现了很大的问题,这才回头看看二维的情况。发现二维的串行与并行结果差异也是巨大。模拟结果中这个上升的plume结构都不一样了,如果probe某个节点再对比二者的演化值,肯定也是没法接受。下面两个图是并行和串行在1000 year的结果。

    串行计算已经与别人的程序做过benchmark对比了,是完全没有问题的。这个并行与串行的差异问题希望有大佬分享一下经验,多谢!

    • 串行结果

    串行结果

    • 并行结果

    并行结果

    算例说明

    算例使用的求解器是自己写的见docker HydrothermalFoam。

    串行和并行的所有设置都是一样的,下面贴上并行参数设置字典

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       dictionary;
        location    "system";
        object      decomposeParDict;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    numberOfSubdomains 4;
    
    method          scotch;
    
    simpleCoeffs
    {
        n               (2 2 1);
        delta           0.001;
    }
    
    hierarchicalCoeffs
    {
        n               (1 1 1);
        delta           0.001;
        order           xyz;
    }
    
    manualCoeffs
    {
        dataFile        "";
    }
    
    distributed     no;
    
    roots           ( );
    
    
    // ************************************************************************* //
    
    

    边界条件

    其中压力中的noFlux边界条件是自己定义的,其实与fixedFluxPressure边界条件(U==0)的情况是一样的。

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volScalarField;
        object      T;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    dimensions      [0 0 0 1 0 0 0];
    
    internalField   uniform 278.15;     //278.15 K = 5 C
    
    boundaryField
    {
        top
        {
            type            inletOutlet;
            phi                     phi;
            inletValue      uniform 278.15;
        }
        bottom
        {
            type fixedValue;
            value   uniform 773.15; //placeholder
        }
        sidewalls
        {
            type            zeroGradient;
        }
    }
    
    // ************************************************************************* //
    
    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volScalarField;
        object      p;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    dimensions      [1 -1 -2 0 0 0 0];
    
    internalField   uniform 250e5;
    
    boundaryField
    {
        top
        {
            type            fixedValue;
            value           uniform 250e5; 
        }
        bottom
        {
            type            noFlux;
        }
        sidewalls
        {
            type            noFlux;
        }
    }
    
    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #2

    很难判断别人的代码问题在哪里。并行与串行的区别,如果差别明显,主要是由于processor边界造成的,你看你的求解器里面的processor边界是否合理

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

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

    @东岳 我猜也是边界条件的问题,这个processor边界需要自己在求解器里面处理吗?我没有处理过这个,我看OF自带的求解器里面好像也没有做处理,比如buoyantPimpleFoam。东岳老师您可以稍微给我点这方面的例子或者资料吗?多谢多谢!

    1 条回复 最后回复
  • C 离线
    C 离线
    ChimneyFoam
    写于 最后由 编辑
    #4

    @东岳
    processor BC

    这是不是就是问题的所在,这个procBoundary1to0和procBoundary0to1 的value是不是应该相等才对?

    1 条回复 最后回复
  • C 离线
    C 离线
    ChimneyFoam
    写于 最后由 编辑
    #5

    检查了一下damBreak算例的并行,这个procBoundary1to0和procBoundary0to1 的value确实是不相等的,应该不是这个的问题。而且damBreak的并行和串行结果基本一致,说明肯定是我的solver或者边界条件的问题,可是我查了好久的资料都没有找到问题关键在哪。

    1 条回复 最后回复
  • 浪 离线
    浪 离线
    浪迹天大
    写于 最后由 编辑
    #6

    最近帮一个同事解决了类似问题,因为他对一个默认边界条件(calculated)的volScalarField量进行了fvc::grad操作,一个解决办法是fvc::grad之前先对这个量执行一下correctBoundaryConditions()。希望可以给你一个参考。

    OpenFOAM 学习交流:https://openfoam.top

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #7

    buoyantPimpleFoam大体上可以参考rhoPimpleFoam 不过既然你们都说要buoyantPimpleFoam 我可以写一写 http://dyfluid.com/rhoPimpleFoam.html 网上也有一些其他的资料应该,不过自从我自己写自己的推导之后,就没看过别人的 :qichuang: 这个求解器只不过就是可压缩求解器+传热,没啥大的特殊

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

    1 条回复 最后回复

  • 登录

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