带源项的相方程离散疑问



  • 老铁们好!

    今天在研究interPhaseChangeFoam求解器中alphaEqn.H代码时,里面的一部分代码自己很困惑,,代码如下:

     if (MULESCorr)
        {
            fvScalarMatrix alpha1Eqn
            (
                fv::EulerDdtScheme<scalar>(mesh).fvmDdt(alpha1)
              + fv::gaussConvectionScheme<scalar>
                (
                    mesh,
                    phi,
                    upwind<scalar>(mesh, phi)
                ).fvmDiv(phi, alpha1)
              - fvm::Sp(divU, alpha1)
             ==
                fvm::Sp(vDotvmcAlphal, alpha1)
              + vDotcAlphal
            );
    
            alpha1Eqn.solve();
    
            Info<< "Phase-1 volume fraction = "
                << alpha1.weightedAverage(mesh.Vsc()).value()
                << "  Min(" << alpha1.name() << ") = " << min(alpha1).value()
                << "  Max(" << alpha1.name() << ") = " << max(alpha1).value()
                << endl;
    
            talphaPhi = alpha1Eqn.flux();
        }
    

    这段代码是MULES 第一步 预测alphal的代码,其中一段代码(如下):

      fvm::Sp(vDotvmcAlphal, alpha1)
              + vDotcAlphal
    

    这个应该是离散源项的代码,在原始公式中对应为11111111111.png
    我又查找了对应的离散公式,感觉是这样的:222222.png
    我不明白:
    1.为什么要这样离散呢?
    2.222222.png 这两项对应的含义分别是什么呢?

    希望大家能够解答一下,也随时欢迎大家与我交流

    谢谢!



  • 因为在右端源项里面含有未知数alpha_l,为保证系数矩阵对角占优,当源项大于0时,一般直接做显式处理,而源项小于0时,做隐式处理。

    具体到这里,就是为了拆出小于0的隐式项和大于0的显式项。



  • @BlookCFD 多谢前辈指点:chitang:



  • 同学,你好。很高兴发现你也从事interPhaseChangeFoam求解器相关研究工作。我想问一下,在interPhaseChangeFoam求解器主程序中,在pimple.loop()每次循环中中为什么要声明创建surfaceScalarField rhoPhi场,这样做的目的是什么?



  • @沐风 没有什么特别的目的,就是写法问题,当然你也可以把它放到整个循环外面,只创建一次。



  • @BlookCFD 谢谢,这个问题已解决,这个主要涉及到interFoam系列算法子循环求解相连续性方程并修正质量流率,可以将surfaceScalarField rhoPhi在循环外声明创建,但是循环内部每次循环初始值要赋0.


Log in to reply
 

CFD中文网 2016 - 2020 | 京ICP备15017992号-2