OpenFOAM技术内幕:热物理模型中的能量场——thermo.he()¶
摘要
OpenFOAM的原始开发团队应该可以说已经把C++的高级特性(泛型编程)玩的炉火纯青了! 我基于OpenFOAM平台开发自己研究项目所需要的求解器的时候,常常会这样感叹。 整个框架搭建起来之后,只需要很少的代码就可以非常优雅的实现非常复杂的功能。 比如它的热物理模型(thermoPhysical model)框架,同一个求解器在不改变代码的情况下适用于其他的同类问题,只是流体不同了而已。 比如同一个求解器既可以用于石油在孔隙介质中的流动问题,也可以用于温泉或海底热液系统中的热液流动问题,只需要给出相应流体的热物理模型即可。 当然了,对于具体的问题,OpenFOAM并没有提供方案,将这种高级的框架应用于实际问题正是我们需要研究的问题。 本文就介绍热物理模型中的能量问题。
流体力学中的能量表达方式¶
比焓形式¶
总能量形式¶
温度形式¶
流体的状态方程及及其热力学性质¶
OpenFOAM中热物理模型框架¶
热物理模型最基本的类是basicThermo
, 它是继承自IOdictionary
。
我们在流体动力学模拟中比较常用的是其派生类fluidThermo
和 heThermo
。
而 thermo.he()
函数就是在heThermo
类中进行了重写,返回 he_
这个表示能量场的成员变量。
对其初始是在成员函数 init(...)
中实现的,在里面定义了 he_
的边界条件和内部场的计算方式。
内部场通过 HE(p,T)
函数计算,而这个 HE
函数是通过mixture实现的,也就是后面我们在energy的类中进行实现。
比如在 sensibleEnthalpy
这个能量类型中,它的 HE
函数调用了 thermo类的 Hs
函数,
这个函数最终在状态方程的类中进行实例化。
所以不同的能量类型情况下,如何通过状态方程计算 he
的值,可以在能量类中的 HE
函数具体指定,然后在状态方程类中实现。
calculate函数里面调用的 mixture_.THE
是 $FOAM_SRC/thermophysicalModels/specie/thermo/thermoI.H
中定义的THE函数,
这个THE函数直接调用能量类型中定义的THE函数,比如 sensibleEnthalpy
,一般在能量类中指定的THE函数,就可以调用所有thermo可以调用的函数,比如thermo.rho(p,T).
因为这个函数中第一个参数就传回了thermo的引用。