OF實(shí)用小工具,消滅熱力學(xué)參數(shù)Tcommon不一致
今天給大家分享一個(gè)非常實(shí)用的小工具,可以解決OpenFOAM熱力學(xué)參數(shù)計(jì)算的一個(gè)小Bug
OpenFOAM對(duì)于混合物的處理都是采用質(zhì)量分?jǐn)?shù)加權(quán)平均,參見 multiComponentMixture.C
...
for (label n=1; n<Y_.size(); n++)
{
mixture_ += Y_[n][celli]*speciesData_[n];
}
...
這里定義的加權(quán)是一種”隱式“的加權(quán),參見 janafThermoI.H
...
{
highCpCoeffs_[coefLabel] =
Y1*highCpCoeffs_[coefLabel]
+ Y2*jt.highCpCoeffs_[coefLabel];
lowCpCoeffs_[coefLabel] =
Y1*lowCpCoeffs_[coefLabel]
+ Y2*jt.lowCpCoeffs_[coefLabel];
}
...
以比熱容為例,如果選用janafThermo模型,OpenFOAM并不會(huì)直接計(jì)算每個(gè)組分的
然后求平均,而是將thermo.dat中用于計(jì)算
的多項(xiàng)式系數(shù)都對(duì)應(yīng)相加,然后再代入溫度求得混合物的
。
在thermo.dat中我們需要給定Tmax,Tcommon和Tmin用來指定不同溫度范圍內(nèi)多項(xiàng)式系數(shù)的選取。如果在thermo.dat中不同組分的Tmax和Tmin不同,OpenFOAM會(huì)選擇最大的Tmin和最小的Tmax來作為邊界溫度,從而保證熱物性參數(shù)擬合的準(zhǔn)確性,但是如果出現(xiàn)不同的Tcommon,OpenFOAM只會(huì)采用用第一種組分的Tcommon來計(jì)算熱物性參數(shù),導(dǎo)致某些組分多項(xiàng)式參數(shù)的錯(cuò)誤選取,造成諸如比熱容、焓等參數(shù)的嚴(yán)重偏差,甚至Crash. 針對(duì)這個(gè)Bug,OpenFOAM官方曾經(jīng)有過Bug report,但最終也沒有給出滿意的處理結(jié)果。
最近來自天津大學(xué)的章嚴(yán)同學(xué)開發(fā)了一款基于Cantera的小工具,可以將多組分不同的Tcommon通過擬合調(diào)整為統(tǒng)一的Tcommon,目前該程序已經(jīng)再Github上開源:fitData_Cantera,使用起來也非常方便
- 安裝Cantera
conda create --name spam --channel cantera cantera ipython matplotlib
- 激活Cantera
conda activate spam
- 將chemkin格式的機(jī)理文件轉(zhuǎn)為Cantera可識(shí)別的
*.cti格式
ck2cti --input=chem.inp --thermo=thermo.dat --transport=trans.dat --output=mech.cti
根據(jù)實(shí)際情況修改腳本(更改機(jī)理名稱)
運(yùn)行程序
python fitData_cantera.py
- 得到新的統(tǒng)一Tcommon的thermoNEW.dat
關(guān)于OpenFOAM為什么采用“隱式”平均的方法求混合物的熱物性參數(shù),CFD online上曾經(jīng)有過討論,參見鏈接。網(wǎng)友指出這種“隱式”平均的方法有可能提高計(jì)算效率,但是在Bug report中,熱心的群眾經(jīng)過實(shí)際測(cè)試發(fā)現(xiàn)這種“隱式”平均的方法反而比先求各個(gè)組分的參數(shù)然后平均的方法慢許多,如果大家對(duì)此有過研究,歡迎評(píng)論區(qū)交流討論。
最后,再次感謝天津大學(xué)章嚴(yán)同學(xué)的辛勤Coding和無(wú)私奉獻(xiàn),開源和共享才是OpenFOAM社區(qū)的初心!