关于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>类所引起的?
-
名字里带
_
的的基本是类的私有变量,类外无法读取,我猜这个带()的是返回私有变量的函数,即给其他的函数一个读取私有变量的接口。所以在类空间内他俩是一个东西,类外不带括号无法调用。就解释了你见到的现象。
-
@bestucan 然而很可惜你猜错了。omega_() 返回的是 omega_ 这个 volScalarField 类型的变量的 Internal 部分(也就是只有内部网格的值,不包含边界值),而且是带量纲。
-
@xpqiu
来,举高高
-
@xpqiu 谢谢您的回复,我把 omega_ 换成omega_() ,报了类型不匹配的错误,看了一下错误提示确实omega_() 是Internal的,但是omega_() 的相关定义在哪里可以找到呢?我看这个类里面没有,是在父类中吗?还是定义在volScalarField中呢?我看到GeometricField里面有一个重载:
inline const Internal& operator()() const;
不知道实现的是不是就是这个返回Internal信息的功能
-
@吴优 对,是这个。