OpenFOAM 中的热物理类之继承派生关系

根据上一篇的介绍,我们已经知道

1
2
3
4
5
6
7
8
9
10
thermoType
{
type heRhoThermo;
mixture pureMixture;
transport const;
thermo hConst;
equationOfState perfectGas;
specie specie;
energy sensibleInternalEnergy;
}

这个设置对应的是下述类:

1
2
3
4
5
6
7
8
heRhoThermo                                                                 
<
rhoThermo,
pureMixture
<
constTransport<species::thermo<hConstThermo<perfectGas<specie>>,sensibleInternalEnergy>>
>

>

接下来就能来看看具体的类的继承派生关系了。

经过前面的分析,最终指针 thermo_ 指向的是 heRhoThermo 类的对象,所以先来看一下 heRhoThermo 类。

1
2
3
4
5
6
7
8
9
10
11
12
template<class BasicPsiThermo, class MixtureType>
class heRhoThermo
:
public heThermo<BasicPsiThermo, MixtureType>
{
// Private Member Functions

//- Calculate the thermo variables
void calculate();

//- Construct as copy (not implemented)
heRhoThermo(const heRhoThermo<BasicPsiThermo, MixtureType>&);

heRhoThermo 类很简单,它继承自 heThermo 类,并且和 heThermo 类用同样的模板参数。
接下来看看 heThermo 类:

1
2
3
4
5
6
7
8
9
10
11
12
template<class BasicThermo, class MixtureType>
class heThermo
:
public BasicThermo,
public MixtureType
{
protected:

// Protected data

//- Energy field
volScalarField he_;

这里,前面多次提到的“继承其模板参数代表的类”这种模式又出现了。有了前两篇分析的基础,我们已经知晓了 thermophysicalProperties 文件里的设置将对应着怎么的一个具体的模型,所有的模板参数都一目了然。知道了模板参数,就能将模板类实例化,再分析其继承派生关系就不是问题了。探索的中间过程这里不详述了,只列出文章开头的那个实例对应的继承派生关系:

继承派生关系

注意几点:

  1. 上图中有两个继承派生关系,其中 constTransport 这个类是作为 pureMixture 类的模板参数的,从而将这两个部分联系起来。
  2. species::thermo 中, species 是命名空间, thermo 是类名,具体定义在 src/thermophysicalModels/specie/thermo/thermo/thermo.H
  3. sensibleInternalEnergy 类的模板参数中,某种程度上讲,包含了它自己!
  4. mixture,transport,thermo,equationOfstate,specie,energy 这 6 个子模型有哪些可选的,这一点在 UserGuide 的第 7 章已经介绍得很清楚了,这里就不再重复了。

了解了这些,就能理解热物理类的框架了。下一部分将针对 twoPhaseEulerFoam 的热物理相关的模块,来梳理一下热物理模型的流程,主要是,能量方程的构建,如何从能量来得到温度,其他依赖于温度的量包括粘度、密度、压力等又是如何更新的,希望能对传热的模拟有些指导作用,尤其是当出问题的时候,能大概知道可能的原因。