OpenFOAM中为何要这样定义雷诺应力模型?



  • 我发现OpenFOAM2.4中把雷诺应力模型定义成了这样:
    0_1517916907141_6d4d04d5-04e5-48e5-b4fd-557c0c115f6b-image.png
    我不太理解为什么要这么写,以我的理解应该是这样:
    0_1517917166870_822a38ff-cdc3-40ef-8907-9bf02cc678b7-image.png
    请问有人能解开我的疑惑吗?



  • 其中R代表雷诺应力,S代表源项



  • 哪个求解器?没找到这段代码。。。



  • @wwzhao LRR 求解器+pimpleFoam,我把两边的公式加起来得到的这个完整的公式。



  • tmp<fvVectorMatrix> UEqn
    (
        fvm::ddt(U)
      + fvm::div(phi, U)
      + turbulence->divDevReff(U)
     ==
        fvOptions(U)
    );
    
    
    tmp<fvVectorMatrix> UEqn
    (
        fvm::ddt(U)
      + fvm::div(phi, U)
      + turbulence->divDevReff(U)
     ==
        fvOptions(U)
    );
    

    且默认couplingFactor=0.

        //- Return the effective viscosity
            virtual tmp<volScalarField> nuEff() const
            {
                return tmp<volScalarField>
                (
                    new volScalarField("nuEff", nut() + nu())
                );
    


  • LRR

    tmp<fvVectorMatrix> LRR::divDevReff(volVectorField& U) const
    {
        if (couplingFactor_.value() > 0.0)
        {
            return
            (
                fvc::div(R_ + couplingFactor_*nut_*fvc::grad(U), "div(R)")
              + fvc::laplacian
                (
                     (1.0 - couplingFactor_)*nut_,
                     U,
                     "laplacian(nuEff,U)"
                )
              - fvm::laplacian(nuEff(), U)
            );
        }
        else
        {
            return
            (
                fvc::div(R_)
              + fvc::laplacian(nut_, U, "laplacian(nuEff,U)")
              - fvm::laplacian(nuEff(), U)
            );
        }
    }
    


  • 这可能是基于数值稳定性的考虑,只有nueff这一项用的是fvm隐式离散,其他用的都是fvc显式离散



  • @wwzhao 谢谢。这个问题我现在已经搞清楚了,是为了增加矩阵的“对角占优”特性,提高收敛性。经过实验,假如修改成不加nu_t的公式,对于一些Co数较大的case就有可能计算发散。


登录后回复
 

与 CFD中文网 的连接断开,我们正在尝试重连,请耐心等待