@yjc95 在 OpenFoam不可压+瞬态 对流项隐性离散推导看不懂 中说:
为啥是二重积分?
分别对体积 $V$ 和时间 $t$ 积分。
@yjc95 在 OpenFoam不可压+瞬态 对流项隐性离散推导看不懂 中说:
等式左边是如何转化到右边的呢?
体积分转为面积分,用的高数里的高斯定理。李老师的《笔记》里有推导的。
@yjc95 在 OpenFoam不可压+瞬态 对流项隐性离散推导看不懂 中说:
为啥是二重积分?
分别对体积 $V$ 和时间 $t$ 积分。
@yjc95 在 OpenFoam不可压+瞬态 对流项隐性离散推导看不懂 中说:
等式左边是如何转化到右边的呢?
体积分转为面积分,用的高数里的高斯定理。李老师的《笔记》里有推导的。
@HIT_lly 试试这个:
mpirun --use-hwthread-cpus -np 32 compressibleInterIsoFoam -parallel
@tiankai U 没问题,试试将fields后面的大括号{}改成小括号(),最后面再加一个分号;,如下。
fields
//{
(
U
{
mean on;
prime2Mean off;
base time;
}
//}
);
@13615617682 我不清楚fluent里具体用的单位,可能得查手册。但我见过的文献指前因子A的单位都是 $\rm m^3/(mol \cdot s)$。
@13615617682 啊,我不知道fluent中的指前因子是什么样的,它的单位是什么?能看一下不?
@13615617682 看 $A_i$ 的单位 $\rm kg/(m^2sPa)$,反应速率 $R_i$(单位:kg/s)应该是这样的:
$$
R_i =A_i \exp \left (-\frac{E_i}{RT} \right) S_i P
$$
其中,$S_i$是面积($\rm m^2$),$P$是压力($\rm Pa$)。
@hehaohao2013 报错提示,湍流模型只能选择kEpsilon或kOmegaSST,没有kineticTheory这个模型。
@尚善若水 应该可以吧。RR[speciei][celli]是celli网格里speciei的反应速率,那该网格里该组分的Qdot应该可以这么写:
scalar Qdot-speciei-celli = hi * RR_[speciei][celli];
@丑居 $M_j$ 是摩尔质量,单位:$\rm kg/mol$。
@尚善若水 看了一下,开发版和of2012差别很大,开发版里不能用specieThermo_了。依据要不要单位,组分的生成焓在开发版里可以这么写:
dimensionedScalar hi = chemistryModel_.thermo().hfi(speciei); //- Enthalpy of formation [J/kg]
或者
scalar hi = chemistryModel_.thermo().hfiValue(speciei); //- Enthalpy of formation [J/kg]
@尚善若水 没太看懂const scalar h[speciei] = specieThermos_h[speciei].hf(); //如何访问?
这是啥意思。
如果需要得到每个组分的化学焓(生成焓),可以这么写:
const scalar hi = specieThermo_[speciei].Hc(); // 化学焓 J/kg
OpenFOAM版本不同,可能有些许差异,我用的是OpenFOAM-v2012。
@李东岳 哈哈,李老师,我不是大佬,我们组里没人用PINN研究化学反应。看论坛里讨论得这么火热,我也想学习学习PINN的,就是还不熟悉。搞这个要向李老师多学习呀!
@研究牲 粒子的相对速度与碰撞横截面积的乘积,单位是$\rm m^3/s$。源码里应该有说明的。
@研究牲 是的。
@研究牲 这个参数表示每个parcel所代表的真实粒子数。
@风云5091 我的知识也有限,没见过后处理有这个计算基元反应速率的功能。提供个思路。
StandardChemistryModel.H 里有计算某个反应中某个组分反应速率的函数:
//- Return reaction rate of the speciei in reactionI
virtual tmp<volScalarField::Internal> calculateRR
(
const label reactionI,
const label speciei
) const;
specieReactionRates.C 用到了上面那个函数,得到的是总的反应速率:
volScalarField::Internal RR
(
chemistryModel_.calculateRR(ri, si)
);
我想应该可以仿照它写一个满足要求的functionObjects吧。供参考。
@风云5091 OpenFOAM-v2012中有个reactionsSensitivityAnalysis ,具体是在controlDict里加一段:
functions
{
sensitivityAnalysis
{
libs (fieldFunctionObjects);
type psiReactionsSensitivityAnalysis;
writeControl writeTime;
}
}
可能对你有用,供参考。
@风云5091 可压缩指的是处理间断吧,超音速,激波等等,可以看东岳老师写的解析。
reactingFoam里混合物密度的处理是每个组分的理想气体状态方程得到的密度之和。
$$
\begin{equation}
\rho = \sum_{k=1}^N \rho_k
\end{equation}
$$
以OpenFOAM-v2012为例,perfectGasI.H 计算每个组分的密度:
template<class Specie>
inline Foam::scalar Foam::perfectGas<Specie>::rho(scalar p, scalar T) const
{
return p/(this->R()*T);
}
混合物的特性(包括密度)是在multiComponentMixture.H 里计算的,四个函数里分别乘以质量分数:
const ThermoType& cellMixture(const label celli) const;
const ThermoType& patchFaceMixture
(
const label patchi,
const label facei
) const;
const ThermoType& cellVolMixture
(
const scalar p,
const scalar T,
const label celli
) const;
const ThermoType& patchFaceVolMixture
(
const scalar p,
const scalar T,
const label patchi,
const label facei
) const;
混合物中每个组分的密度也可以在SpecieMixture.C 中获取。
template<class MixtureType>
Foam::scalar Foam::SpecieMixture<MixtureType>::rho
(
const label speciei,
const scalar p,
const scalar T
) const
{
return this->getLocalThermo(speciei).rho(p, T);
}
最后,网格和边界里的密度是在哪儿计算并更新的呢?hePsiThermo.C或heRhoThermo.C。
这些都是源码里提供的,供参考。
@ann 阿伦尼乌斯(Arrheniu)反应速率的三个参数($A$,$b$,$E_a$):
$$
k=AT^b\exp(- \frac{E_a}{RT})
$$
$k$ 的单位是 $ \rm cm^3/mol/s$,$E_a$ 的单位是 $ \rm cal/mol$,$A$ 的单位根据 $b$ 的值确定。
@ann 在 C12H26组分数较少的chemkin燃烧反应机理 中说:
C7H16 + 11O2 => 7CO2 + 8H2O 5.00E+8 0.0 15780.0! 1
这个反应里 $b=0.0$,$A$ 的单位就是 $ \rm cm^3/mol/s$。