OF实用小工具,消灭热力学参数Tcommon不一致

OF实用小工具,消灭热力学参数Tcommon不一致

今天给大家分享一个非常实用的小工具,可以解决OpenFOAM热力学参数计算的一个小Bug

OpenFOAM对于混合物的处理都是采用质量分数加权平均,参见 multiComponentMixture.C

...
    for (label n=1; 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社区的初心!

你可能感兴趣的:(OF实用小工具,消灭热力学参数Tcommon不一致)