34 template<
class CloudType>
43 Sb_(this->coeffDict().getScalar(
"Sb")),
44 C1_(this->coeffDict().getScalar(
"C1")),
45 C2_(this->coeffDict().getScalar(
"C2")),
46 E_(this->coeffDict().getScalar(
"E")),
55 label idSolid =
owner.composition().idSolid();
56 CsLocalId_ =
owner.composition().localId(idSolid,
"C");
59 WO2_ =
owner.thermo().carrier().W(O2GlobalId_);
60 const scalar WCO2 =
owner.thermo().carrier().W(CO2GlobalId_);
63 HcCO2_ =
owner.thermo().carrier().Hc(CO2GlobalId_);
65 const scalar YCloc =
owner.composition().Y0(idSolid)[CsLocalId_];
66 const scalar YSolidTot =
owner.composition().YMixture0()[idSolid];
67 Info<<
" C(s): particle mass fraction = " << YCloc*YSolidTot <<
endl;
71 template<
class CloudType>
83 CsLocalId_(srm.CsLocalId_),
84 O2GlobalId_(srm.O2GlobalId_),
85 CO2GlobalId_(srm.CO2GlobalId_),
94 template<
class CloudType>
119 const label idSolid = CloudType::parcelType::SLD;
120 const scalar fComb = YMixture[idSolid]*YSolid[CsLocalId_];
128 const SLGThermo&
thermo = this->owner().thermo();
131 const scalar YO2 =
thermo.carrier().Y(O2GlobalId_)[celli];
134 const scalar D0 = C1_/d*
pow(0.5*(
T + Tc), 0.75);
137 const scalar Rk = C2_*
exp(-E_/(
RR*Tc));
143 scalar dmC = Ap*rhoc*
RR*Tc*YO2/WO2_*D0*Rk/(D0 + Rk)*dt;
146 dmC =
min(mass*fComb, dmC);
149 const scalar dOmega = dmC/WC_;
152 const scalar dmO2 = dOmega*Sb_*WO2_;
155 const scalar dmCO2 = dOmega*(WC_ + Sb_*WO2_);
158 dMassSolid[CsLocalId_] += dOmega*WC_;
161 dMassSRCarrier[O2GlobalId_] -= dmO2;
162 dMassSRCarrier[CO2GlobalId_] += dmCO2;
164 const scalar HsC =
thermo.solids().properties()[CsLocalId_].Hs(
T);
169 return dmC*HsC - dmCO2*HcCO2_;
A list of keyword definitions, which are a keyword followed by a number of values (eg...
basicSpecieMixture & composition
dimensionedSymmTensor sqr(const dimensionedVector &dv)
Ostream & endl(Ostream &os)
Add newline and flush stream.
const CloudType & owner() const
Return const access to the owner cloud.
psiReactionThermo & thermo
dimensionedScalar exp(const dimensionedScalar &ds)
constexpr scalar pi(M_PI)
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
virtual scalar calculate(const scalar dt, const scalar Re, const scalar nu, const label celli, const scalar d, const scalar T, const scalar Tc, const scalar pc, const scalar rhoc, const scalar mass, const scalarField &YGas, const scalarField &YLiquid, const scalarField &YSolid, const scalarField &YMixture, const scalar N, scalarField &dMassGas, scalarField &dMassLiquid, scalarField &dMassSolid, scalarField &dMassSRCarrier) const
Update surface reactions.
const Vector< label > N(dict.get< Vector< label >>("N"))
scalarField Re(const UList< complex > &cmplx)
Extract real component.
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
COxidationKineticDiffusionLimitedRate(const dictionary &dict, CloudType &owner)
Construct from dictionary.
messageStream Info
Information stream (stdout output on master, null elsewhere)
const scalar RR
Universal gas constant: default in [J/(kmol K)].
Templated surface reaction model class.
Templated base class for dsmc cloud.
Kinetic/diffusion limited rate surface reaction model for coal parcels. Limited to: ...