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



  •         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); 
    

    就可以解决啦


  • OpenFOAM教授

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



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


  • OpenFOAM教授


Log in to reply