求解器中如何使用私有变量
-
我想在自己的求解器中使用incident radiation 'G',它在'fvDOM.H'中是一个private data
相关代码如下:
/*---------------------------------------------------------------------------*\ Class fvDOM Declaration \*---------------------------------------------------------------------------*/ class fvDOM : public radiationModel { // Private data //- Incident radiation [W/m2] volScalarField G_; ………………………………………………… //- Const access to incident radiation field inline const volScalarField& G() const;
在我的求解器中,我打算调用G来计算温度:
T=pow(G/(4*sigma),0.25);
但G是否要定义?如何进行读取?
-
@东岳 您好,我仅在createfields.h中定义这个成员函数,
inline const volScalarField& G() const { return G_; }
但是编译无法通过,出现错误
In file included from radiationFoam.C:45:0: createFields.H: In function ‘int main(int, char**)’: createFields.H:49:1: error: a function-definition is not allowed here before ‘{’ token {
此外,yourClass指的是什么?fvDOM?
-
你好,我看了一下
fvDOM.H
这个文件,发现它里边已经定义了一个函数G()
用于调用G_
,即该文件中的://- Const access to incident radiation field inline const volScalarField& G() const;
这样你就不需要在
solver
中定义了,通过这个函数使用它即可。
然后我看fireFoam
里使用了辐射模型,它创建了一个指针radiation
,类型是radiationModel
。但是这个类里边并没有G()
这个函数,因此我们需要把它转换成它的派生类fvDOM
,这样才能使用G()
这个函数。
你可以这样做,在求解器里边:const volScalarField & G = dynamic_cast<const Foam::radiation::fvDOM &>(radiation()).G();
这句话有两个作用,1. 把
radiation
转换成它的派生类fvDOM
,2. 创建一个体标量场的引用,通过G()
这个函数指向fvDOM
类的私有数据G_
。
于是就可以使用G
来更新你的温度了:T=pow(G/(4*sigma),0.25);
。我编译了一下改动后的代码,发现这里的T
是一个const引用
,编译失败,如果你也遇到这个问题,可以在创建它的地方,把const volScalarField& T = thermo.T();
改为
volScalarField& T = thermo.T();
即可。
对了,我们在求解器中使用了fvDOM
这个类,所以需要在求解器最开始的地方include
其头文件。祝顺利~