OpenFOAM火焰面模型的超声速修正
-
大家好,最近在做火焰面模型的超声速修正,采用的方法是添加能量方程隐式求解温
度,修正基于flameletFoam ,参考了FPVCentralFoam:火焰面模型的超声速修正,其
中一种方法是只查询火焰面表中的组分质量分数,然后添加能量方程,通过能量方
程隐式求解温度,这个应该就是通过求解能量方程得到焓分布,再通过调用
thermo.correct();隐式求解温度。考虑到flameletFoam中的chemkinReader使用的是显焓
形式,我选取的还是显焓形成的能量方程(跟reactingFoam的形式一样,区别只是反
应源项不同),其他修改的部分参考了FPVCentralFoam
https://github.com/weixian001/FPVCentralFoam-v3.0.1EEqn:
{ volScalarField& he=thermo.he(); volScalarField& dq=thermo.dq(); fvScalarMatrix EEqn ( fvm::ddt(rho, he) + fvm::div(phi, he) + fvc::ddt(rho, K) + fvc::div(phi, K) + ( he.name() == "e" ? fvc::div ( fvc::absolute(phi/fvc::interpolate(rho), U), p, "div(phiv,p)" ) : -dpdt ) - fvm::laplacian(turbulence->alphaEff(), he) == dq ); EEqn.relax(); //fvOptions.constrain(EEqn); EEqn.solve(); //fvOptions.correct(he); // Calculate thermodynamic Properties, calculate T and other parameters thermo.correct(); }
通过导入非燃烧火焰面数据计算冷态混合时得到的结果不对(燃烧解更不对)。我
注意到flamletFoam的前处理通过温度与各个组分的质量分数得到显焓:
void Foam::canteraReader::calculateEnthalpy() { Info << "calculate sensible Enthalpy" << endl; scalar pstd = 1e5; label labelT(tableNames_["T"]); List<scalar> he(singleData_[labelT].size(), 0.0); for (int i=0;i<singleData_[labelT].size();i++) { for (int j=0; j<thermo.composition().species().size();j++) { label k = composition.species()[tableNames_[j]]; he[i] += singleData_[j][i] * composition.Hs(k, pstd, singleData_[labelT][i]); } } singleData_.append(he); }
其中
he[i] += singleData_[j][i] * composition.Hs(k, pstd, singleData_[labelT][i]);
表示的是 h(T)=ΣYihi(T), i表示第i个组分,Y表示质量分数
由于火焰面模型不涉及化学反应,并且组分质量分数是通过查表得到的,我怀疑现
在通过求解添加的能量方程得到的显焓不是 h(T)=ΣYihi(T)这个形式
想请教下OpenFOAM自带的reactingFOAM求解能量方程得到的显焓也是这样的形式
吗?还是他也是通过
mixture_ = this->cellMixture(celli);
质量分数加权得到 mixture 的值,这样得到 h(T)=ΣYihi(T)。