CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    OpenFOAM中处理奇异Singularity问题的一个小trick

    OpenFOAM
    2
    4
    1126
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 李东岳
      李东岳 管理员 最后由 李东岳 编辑

              U1Eqn =
              (
                  fvm::ddt(alpha1, rho1, U1) + fvm::div(alphaRhoPhi1, U1)
                - fvm::Sp(contErr1, U1)
                + phase1.turbulence().divDevRhoReff(U1)
               ==
                - fvm::Sp(dragCoeff, U1)
              );
      
              U1Eqn.relax();
      

      这个是速度方程,在出现奇异问题的时候,OpenFOAM通过- fvm::Sp(dragCoeff, U1)保证有解,不过在极端的情况下

      1. OpenFOAM还是能解的,但求解器会输出Solving Singularity还是什么来着类似的信息,迭代次数0

      2. 另一种方式是解不了,主要问题嘞,是无法对其进行松弛,那做下面这个操作:

              U1Eqn =
              (
                  fvm::ddt(alpha1, rho1, U1) + fvm::div(alphaRhoPhi1, U1)
                - fvm::Sp(contErr1, U1)
                + phase1.turbulence().divDevRhoReff(U1)
               //==
                //- fvm::Sp(dragCoeff, U1)
              );
              U1Eqn.relax();
              U1Eqn += fvm::Sp(dragCoeff, U1); 
      

      就可以解决啦

      线上CFD课程开始报名:http://www.dyfluid.com/class.html

      CFD高性能服务器 http://dyfluid.com/servers.html

      W 1 条回复 最后回复 回复 引用
      • W
        wwzhao 教授 @李东岳 最后由 编辑

        @东岳 没看出来这两段代码有什么区别,第二段的relax要放到+=前面?

        李东岳 1 条回复 最后回复 回复 引用
        • 李东岳
          李东岳 管理员 @wwzhao 最后由 编辑

          对对对,写错了,已更正 :xiexie:

          线上CFD课程开始报名:http://www.dyfluid.com/class.html

          CFD高性能服务器 http://dyfluid.com/servers.html

          W 1 条回复 最后回复 回复 引用
          • W
            wwzhao 教授 @李东岳 最后由 编辑

            @东岳 :chigua:

            1 条回复 最后回复 回复 引用
            • First post
              Last post