OF实用小工具,消灭热力学参数Tcommon不一致
今天给大家分享一个非常实用的小工具,可以解决OpenFOAM热力学参数计算的一个小Bug
OpenFOAM对于混合物的处理都是采用质量分数加权平均,参见 multiComponentMixture.C
...
for (label n=1; n<Y_.size(); n++)
{
mixture_ += Y_[n][celli]*speciesData_[n];
}
...
这里定义的加权是一种”隐式“的加权,参见 janafThermoI.H
...
{
highCpCoeffs_[coefLabel] =
Y1*highCpCoeffs_[coefLabel]
+ Y2*jt.highCpCoeffs_[coefLabel];
lowCpCoeffs_[coefLabel] =
Y1*lowCpCoeffs_[coefLabel]
+ Y2*jt.lowCpCoeffs_[coefLabel];
}
...
以比热容为例,如果选用janafThermo模型,OpenFOAM并不会直接计算每个组分的然后求平均,而是将thermo.dat中用于计算的多项式系数都对应相加,然后再代入温度求得混合物的。
在thermo.dat中我们需要给定Tmax,Tcommon和Tmin用来指定不同温度范围内多项式系数的选取。如果在thermo.dat中不同组分的Tmax和Tmin不同,OpenFOAM会选择最大的Tmin和最小的Tmax来作为边界温度,从而保证热物性参数拟合的准确性,但是如果出现不同的Tcommon,OpenFOAM只会采用用第一种组分的Tcommon来计算热物性参数,导致某些组分多项式参数的错误选取,造成诸如比热容、焓等参数的严重偏差,甚至Crash. 针对这个Bug,OpenFOAM官方曾经有过Bug report,但最终也没有给出满意的处理结果。
最近来自天津大学的章严同学开发了一款基于Cantera的小工具,可以将多组分不同的Tcommon通过拟合调整为统一的Tcommon,目前该程序已经再Github上开源:fitData_Cantera,使用起来也非常方便
- 安装Cantera
conda create --name spam --channel cantera cantera ipython matplotlib
- 激活Cantera
conda activate spam
- 将chemkin格式的机理文件转为Cantera可识别的
*.cti
格式
ck2cti --input=chem.inp --thermo=thermo.dat --transport=trans.dat --output=mech.cti
-
根据实际情况修改脚本(更改机理名称)
-
运行程序
python fitData_cantera.py
- 得到新的统一Tcommon的thermoNEW.dat
关于OpenFOAM为什么采用“隐式”平均的方法求混合物的热物性参数,CFD online上曾经有过讨论,参见链接。网友指出这种“隐式”平均的方法有可能提高计算效率,但是在Bug report中,热心的群众经过实际测试发现这种“隐式”平均的方法反而比先求各个组分的参数然后平均的方法慢许多,如果大家对此有过研究,欢迎评论区交流讨论。
最后,再次感谢天津大学章严同学的辛勤Coding和无私奉献,开源和共享才是OpenFOAM社区的初心!
网友评论