OpenFOAM 中使用 chemkin 机理注意事项
chemkin 格式的机理在 OpenFOAM 中使用须知
- 首先,全部转化为大写。
- 如果计算液态燃料,需要使用燃料的物性,那么燃料名字必须和OF的物性库中的名字一致。比如:NC7H16 全部改成 C7H16,chem 和 thermo 都要改。
- thermo 文件中,改成 C7H16 的那一行,错位了,修正一下。
- 热物性中,最后一列是 1 2 3 4,如果前边有其它数,需要删掉。
- 热物性第一行,THERMO 要改成 THERMO ALL。
- thermophysicalProperties 中,不要选用 new format
- 在 Linux 下,使用 dos2unix,转化格式。
- 运行一遍算例,如果仍有错误,按错误提示修改。
- 如果没有格式错误,后边计算组分的时候,第一步就报错,检查一下机理里边 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() - 如果发散(最大迭代数溢出),把 therm.dat 文件中每个组分的 temperature range(主要是 T common) 改成一致就可以了。解决方案来自 CFD-Online 可以使用 chemkin 中的 Utility/FitData 功能来修正 temperature range。
OpenFOAM 中,组分必须以字母开头,并且可以出现下列特殊符号:
+ |
不能出现的符号:
/ |
一个正确的机理文件(删减版)示范:
chem.inp 文件(这是一个甲烷的机理,完整版,机理来源):
ELEMENTS |
therm.dat 文件(完整版):
THERMO ALL |
请严格按照这个示范文件来修改你的机理文件。
比如 therm.dat 文件的第二行中的三个数字,它们所在的列数区间是有严格限制的。
在第二行的 1-30 列上给出低温、常温、高温三个温度范围,每个数字均匀分布在 10 列位置上。
再如这两个文件中的 END
一定不要漏掉。
最后,我创建了一个化学机理仓库,所有的格式都是修改过的,绝大部分都能在 OpenFOAM 中直接使用:
https://github.com/ZhangYanTJU/chemicalMechanisms
也欢迎您贡献修改好的机理,方便后人使用。