OpenFOAM 中使用 chemkin 机理注意事项

chemkin 格式的机理在 OpenFOAM 中使用须知

  1. 首先,全部转化为大写。
  2. 如果计算液态燃料,需要使用燃料的物性,那么燃料名字必须和OF的物性库中的名字一致。比如:NC7H16 全部改成 C7H16,chem 和 thermo 都要改。
  3. thermo 文件中,改成 C7H16 的那一行,错位了,修正一下。
  4. 热物性中,最后一列是 1 2 3 4,如果前边有其它数,需要删掉。
  5. 热物性第一行,THERMO 要改成 THERMO ALL。
  6. thermophysicalProperties 中,不要选用 new format
  7. 在 Linux 下,使用 dos2unix,转化格式。
  8. 运行一遍算例,如果仍有错误,按错误提示修改。
  9. 如果没有格式错误,后边计算组分的时候,第一步就报错,检查一下机理里边 TROE 后边的 4 个数,看有没有 0 ,若有,改成 1E-30。
    报错信息:
    #3  Foam::ReversibleReaction<Foam::Reaction, Foam::sutherlandTransport<Foam::species::thermo<Foam::janafThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleEnthalpy> >, Foam::FallOffReactionRate<Foam::ArrheniusReactionRate, Foam::TroeFallOffFunction> >::kf(double, double, Foam::Field<double> const&) const
    #4 Foam::Reaction<Foam::sutherlandTransport<Foam::species::thermo<Foam::janafThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleEnthalpy> > >::omega(double, double, Foam::Field<double> const&, double&, double&, int&, double&, double&, int&) const
    #5 Foam::Reaction<Foam::sutherlandTransport<Foam::species::thermo<Foam::janafThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleEnthalpy> > >::dwdc(double, double, Foam::Field<double> const&, Foam::SquareMatrix<double>&, Foam::Field<double>&, double&, double&, double&, bool, Foam::List<int> const&) const
    #6 Foam::StandardChemistryModel<Foam::psiReactionThermo, Foam::sutherlandTransport<Foam::species::thermo<Foam::janafThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleEnthalpy> > >::jacobian(double, Foam::Field<double> const&, Foam::Field<double>&, Foam::SquareMatrix<double>&) const
    #7 Foam::seulex::solve(double&, Foam::Field<double>&, Foam::ODESolver::stepState&) const
    #8 Foam::ODESolver::solve(double, double, Foam::Field<double>&, double&) const
    #9 Foam::ode<Foam::StandardChemistryModel<Foam::psiReactionThermo, Foam::sutherlandTransport<Foam::species::thermo<Foam::janafThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleEnthalpy> > > >::solve(Foam::Field<double>&, double&, double&, double&, double&) const
    #10 double Foam::StandardChemistryModel<Foam::psiReactionThermo, Foam::sutherlandTransport<Foam::species::thermo<Foam::janafThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleEnthalpy> > >::solve<Foam::UniformField<double> >(Foam::UniformField<double> const&)
    #11 Foam::StandardChemistryModel<Foam::psiReactionThermo, Foam::sutherlandTransport<Foam::species::thermo<Foam::janafThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleEnthalpy> > >::solve(double)
    #12 Foam::combustionModels::laminar<Foam::psiReactionThermo>::correct()
  10. 如果发散(最大迭代数溢出),把 therm.dat 文件中每个组分的 temperature range(主要是 T common) 改成一致就可以了。解决方案来自 CFD-Online 可以使用 chemkin 中的 Utility/FitData 功能来修正 temperature range。

OpenFOAM 中,组分必须以字母开头,并且可以出现下列特殊符号:

+
-
_
*



不能出现的符号:

/

一个正确的机理文件(删减版)示范:
chem.inp 文件(这是一个甲烷的机理,完整版机理来源):

ELEMENTS                                                                        
O H C N AR
END
SPECIES
H2 O2
END
REACTIONS
O+HO2<=>OH+O2 2.000E+13 0.000 0.00
END

therm.dat 文件(完整版):

THERMO ALL
200.000 1000.000 5000.000
O L 1/90O 1 00 00 00G 200.000 3500.000 1000.0 1
2.56942078E+00-8.59741137E-05 4.19484589E-08-1.00177799E-11 1.22833691E-15 2
2.92175791E+04 4.78433864E+00 3.16826710E+00-3.27931884E-03 6.64306396E-06 3
-6.12806624E-09 2.11265971E-12 2.91222592E+04 2.05193346E+00 6.72540300E+03 4
END

请严格按照这个示范文件来修改你的机理文件。

比如 therm.dat 文件的第二行中的三个数字,它们所在的列数区间是有严格限制的。

在第二行的 1-30 列上给出低温、常温、高温三个温度范围,每个数字均匀分布在 10 列位置上。

再如这两个文件中的 END 一定不要漏掉。

最后,我创建了一个化学机理仓库,所有的格式都是修改过的,绝大部分都能在 OpenFOAM 中直接使用:
https://github.com/ZhangYanTJU/chemicalMechanisms

也欢迎您贡献修改好的机理,方便后人使用。

文章作者: Yan Zhang
文章链接: https://openfoam.top/chemkin/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 OpenFOAM 成长之路
您的肯定会给我更大动力~