关于omega_和omega_()中的括号



  • 各位好!
    我看到了东岳老师之前在CFD online上的一篇post:call a tmp formal value without a parentheses?,我最近在研究k-omega SST模型时也发现了类似的问题。
    例如在定义epsilonByk时,用到的是有括号的omega_():

    
    template<class BasicEddyViscosityModel>
    tmp<volScalarField::Internal>
    kOmegaSSTBase<BasicEddyViscosityModel>::epsilonByk
    (
        const volScalarField& F1,
        const volTensorField& gradU
    ) const
    {
        return betaStar_*omega_();
    }
    

    而在定义分段函数F2时用到的是omega_:

    template<class BasicEddyViscosityModel>
    tmp<volScalarField> kOmegaSSTBase<BasicEddyViscosityModel>::F2() const
    {
        tmp<volScalarField> arg2 = min
        (
            max
            (
                (scalar(2)/betaStar_)*sqrt(k_)/(omega_*y_),
                scalar(500)*(this->mu()/this->rho_)/(sqr(y_)*omega_)
            ),
            scalar(100)
        );
        return tanh(sqr(arg2));
    }
    

    我试着用Info将omega_和omega_()都输出到log文件中,得到的是完全一样的体标量场。但是有时如果删去原有的括号或是加上括号会引起报错。说明omega_和omega_()具有同样的值,但是类型不同。不知道这个括号是否也是由于<tmp>类所引起的?


  • Linux讲师 OpenFOAM讲师

    名字里带_的的基本是类的私有变量,类外无法读取,我猜这个带()的是返回私有变量的函数,即给其他的函数一个读取私有变量的接口。

    所以在类空间内他俩是一个东西,类外不带括号无法调用。就解释了你见到的现象。:mianmo:


  • OpenFOAM教授

    @bestucan 然而很可惜你猜错了。omega_() 返回的是 omega_ 这个 volScalarField 类型的变量的 Internal 部分(也就是只有内部网格的值,不包含边界值),而且是带量纲。


  • Linux讲师 OpenFOAM讲师

    @xpqiu :jingya: :146: 来,举高高 :quwan:


Log in to reply
 

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