34 template<
class CloudType>
42 Sb_(this->coeffDict().getScalar(
"Sb")),
53 label idSolid = owner.composition().idSolid();
54 CsLocalId_ = owner.composition().localId(idSolid,
"C");
55 ashLocalId_ = owner.composition().localId(idSolid,
"ash",
true);
58 WO2_ = owner.thermo().carrier().W(O2GlobalId_);
59 const scalar WCO2 = owner.thermo().carrier().W(CO2GlobalId_);
62 HcCO2_ = owner.thermo().carrier().Hc(CO2GlobalId_);
64 const scalar YCloc = owner.composition().Y0(idSolid)[CsLocalId_];
65 const scalar YSolidTot = owner.composition().YMixture0()[idSolid];
66 Info<<
" C(s): particle mass fraction = " << YCloc*YSolidTot <<
endl;
68 if (this->coeffDict().readIfPresent(
"heatOfReaction", heatOfReaction_))
70 Info<<
" Using user specified heat of reaction: "
71 << heatOfReaction_ <<
" [J/kg]" <<
endl;
76 template<
class CloudType>
79 const COxidationHurtMitchell<CloudType>& srm
84 CsLocalId_(srm.CsLocalId_),
85 ashLocalId_(srm.ashLocalId_),
86 O2GlobalId_(srm.O2GlobalId_),
87 CO2GlobalId_(srm.CO2GlobalId_),
91 heatOfReaction_(srm.heatOfReaction_)
97 template<
class CloudType>
121 const label idGas = CloudType::parcelType::GAS;
122 const label idSolid = CloudType::parcelType::SLD;
123 const scalar Ychar = YMixture[idSolid]*YSolid[CsLocalId_];
131 const SLGThermo&
thermo = this->owner().thermo();
134 const scalar YO2 =
thermo.carrier().Y(O2GlobalId_)[celli];
143 const scalar convSI = 1000.0/10000.0;
146 const scalar RRcal = 1985.877534;
149 scalar Ydaf = YMixture[idGas] + YMixture[idSolid];
150 if (ashLocalId_ != -1)
152 Ydaf -= YMixture[idSolid]*YSolid[ashLocalId_];
156 const scalar charPrc =
max(0,
min(Ychar/(Ydaf + ROOTVSMALL)*100.0, 100));
163 const scalar ppO2 =
max(0.0, rhoc*YO2/WO2_*
RR*Tc);
166 const scalar E = -5.94 + 0.355*charPrc;
169 const scalar lnK1750 = 2.8 - 0.0758*charPrc;
170 const scalar
A =
exp(lnK1750 + E/RRcal/1750.0);
173 const scalar Rk =
A*
exp(-E/(RRcal*
T));
176 const scalar qCsLim = mass*Ychar/(WC_*Ap*dt);
177 const scalar qCs =
min(convSI*Rk*
Foam::sqrt(ppO2/101325.0), qCsLim);
180 const scalar dOmega = qCs*Ap*dt;
183 dMassSRCarrier[O2GlobalId_] += -dOmega*Sb_*WO2_;
184 dMassSRCarrier[CO2GlobalId_] += dOmega*(WC_ + Sb_*WO2_);
187 dMassSolid[CsLocalId_] += dOmega*WC_;
192 if (heatOfReaction_ < 0)
194 const scalar HsC =
thermo.solids().properties()[CsLocalId_].Hs(
T);
195 return dOmega*(WC_*HsC - (WC_ + Sb_*WO2_)*HcCO2_);
199 return dOmega*WC_*heatOfReaction_;