33template<
class CloudType>
41 D12_(this->coeffDict().getScalar(
"D12")),
42 epsilon_(this->coeffDict().getScalar(
"epsilon")),
43 gamma_(this->coeffDict().getScalar(
"gamma")),
44 sigma_(this->coeffDict().getScalar(
"sigma")),
45 E_(this->coeffDict().getScalar(
"E")),
46 A_(this->coeffDict().getScalar(
"A")),
47 Aeff_(this->coeffDict().getScalar(
"Aeff")),
48 Ea_(this->coeffDict().getScalar(
"Ea")),
49 nuFuel_(this->coeffDict().getScalar(
"nuFuel")),
50 nuOx_(this->coeffDict().getScalar(
"nuOx")),
51 nuProd_(this->coeffDict().getScalar(
"nuProd")),
58 label idSolid =
owner.composition().idSolid();
60 owner.composition().localId
67 owner.composition().localId
74 WO2_ =
owner.thermo().carrier().W(O2GlobalId_);
78template<
class CloudType>
86 epsilon_(srm.epsilon_),
96 O2GlobalId_(srm.O2GlobalId_),
97 FuelLocalId_(srm.FuelLocalId_),
98 ProdLocalId_(srm.ProdLocalId_),
105template<
class CloudType>
127 const scalar fComb = YSolid[FuelLocalId_];
136 const auto&
composition = this->owner().composition();
138 const scalar WFuel =
composition.solids().properties()[FuelLocalId_].
W();
139 const scalar WProd =
composition.solids().properties()[ProdLocalId_].
W();
143 thermo.carrier().Y(O2GlobalId_)[celli]*rhoc/WO2_;
151 const scalar
k = A_*
exp(-Ea_/(RR*
T));
154 const scalar Deff = D12_*epsilon_/gamma_;
157 const scalar Sc =
nu/(D12_ + ROOTVSMALL);
163 const scalar r = d/2;
165 const scalar
f =
F[FuelLocalId_];
169 const scalar deltaRho0 = (nuOx_/nuFuel_)*
rhof/WFuel;
181 F[FuelLocalId_] += dfdt*dt;
184 const scalar ri = r*
cbrt(1-
f);
188 const scalar dridt = -dfdt*(
pow3(r)/3)/
sqr(ri);
194 const scalar dOmega = q02*dt;
198 composition.solids().properties()[ProdLocalId_].Hf()
199 -
composition.solids().properties()[FuelLocalId_].Hf();
202 const scalar sFuel = nuFuel_/(nuOx_);
205 const scalar sProd = nuProd_/(nuOx_);
208 dMassSRCarrier[O2GlobalId_] += dOmega*WO2_;
211 dMassSolid[FuelLocalId_] -= dOmega*WFuel*sFuel;
214 dMassSolid[ProdLocalId_] += dOmega*WProd*sProd;
218 Pout<<
"mass = " << mass <<
nl
219 <<
"fComb = " << fComb <<
nl
220 <<
"dfdt = " << dfdt <<
nl
221 <<
"F = " <<
F[FuelLocalId_] <<
nl
222 <<
"ri = " << ri <<
nl
223 <<
"dridt = " << dridt <<
nl
224 <<
"q02 = " << q02 <<
nl
225 <<
"dOmega = " << dOmega <<
nl
226 <<
"Hr = " << dOmega*WFuel*sFuel*Hc <<
endl;
230 return -dOmega*WFuel*sFuel*Hc;
234template<
class CloudType>
An indexed form of CGAL::Triangulation_cell_base_3<K> used to keep track of the Delaunay cells (tets)...
const CloudType & owner() const
Return const access to the owner cloud.
Templated base class for dsmc cloud.
Base class for heterogeneous reacting models.
Heteregeneous noncatalytic reaction MUCS approach. Reference: D. Papanastassiou and G....
virtual label nReactions() const
Number of reactions in the model.
Thermo package for (S)olids (L)iquids and (G)ases Takes reference to thermo package,...
virtual scalar rho(const label speciei, const scalar p, const scalar T) const =0
Density [kg/m3].
virtual scalar W(const label speciei) const =0
Molecular weight of the given specie [kg/kmol].
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
const dictionary & coeffDict() const
Return const access to the coefficients dictionary.
Basic thermodynamics type based on the use of fitting functions for cp, h, s obtained from the templa...
basicSpecieMixture & composition
surfaceScalarField rhof(fvc::interpolate(rho, "div(phi,rho)"))
volVectorField F(fluid.F())
constexpr scalar pi(M_PI)
dimensionedScalar exp(const dimensionedScalar &ds)
scalarField Re(const UList< complex > &cf)
Extract real component.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
dimensionedScalar pow3(const dimensionedScalar &ds)
Ostream & endl(Ostream &os)
Add newline and flush stream.
dimensionedScalar sqrt(const dimensionedScalar &ds)
dimensionedScalar cbrt(const dimensionedScalar &ds)
prefixOSstream Pout
OSstream wrapped stdout (std::cout) with parallel prefix.
constexpr char nl
The newline '\n' character (0x0a)
const Vector< label > N(dict.get< Vector< label > >("N"))