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

2021-01-15  本文已影响0人  charryzzz

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];
    }
...

以比热容C_p为例,如果选用janafThermo模型,OpenFOAM并不会直接计算每个组分的C_{p, i}然后求平均,而是将thermo.dat中用于计算C_{p, i}的多项式系数都对应相加,然后再代入温度求得混合物的C_p
在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,使用起来也非常方便

conda create --name spam --channel cantera cantera ipython matplotlib
conda activate spam
ck2cti --input=chem.inp --thermo=thermo.dat --transport=trans.dat --output=mech.cti
python fitData_cantera.py

关于OpenFOAM为什么采用“隐式”平均的方法求混合物的热物性参数,CFD online上曾经有过讨论,参见链接。网友指出这种“隐式”平均的方法有可能提高计算效率,但是在Bug report中,热心的群众经过实际测试发现这种“隐式”平均的方法反而比先求各个组分的参数然后平均的方法慢许多,如果大家对此有过研究,欢迎评论区交流讨论。

最后,再次感谢天津大学章严同学的辛勤Coding和无私奉献,开源和共享才是OpenFOAM社区的初心!

上一篇 下一篇

猜你喜欢

热点阅读