关于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>类所引起的?


  • 版主 副教授

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

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


  • 教授

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


  • 版主 副教授

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



  • @xpqiu 谢谢您的回复,我把 omega_ 换成omega_() ,报了类型不匹配的错误,看了一下错误提示确实omega_() 是Internal的,但是omega_() 的相关定义在哪里可以找到呢?我看这个类里面没有,是在父类中吗?还是定义在volScalarField中呢?我看到GeometricField里面有一个重载:

    inline const Internal& operator()() const;
    

    不知道实现的是不是就是这个返回Internal信息的功能


  • 教授

    @吴优 对,是这个。


Log in to reply
 


CFD中文网 | 东岳流体学术 | 东岳流体商业 | 吉ICP备20003622号-1