36template<
class ParcelType>
37template<
class TrackCloudType>
40 TrackCloudType&
cloud,
47 return cloud.composition().Cp(idS, this->Y_,
p,
T);
51template<
class ParcelType>
52template<
class TrackCloudType>
55 TrackCloudType&
cloud,
62 return cloud.composition().Hs(idS, this->Y_,
p,
T);
66template<
class ParcelType>
67template<
class TrackCloudType>
70 TrackCloudType&
cloud,
77 return cloud.composition().L(idS, this->Y_,
p,
T);
84template<
class ParcelType>
85template<
class TrackCloudType>
88 TrackCloudType&
cloud,
100 dMass[i]/
composition.solids().properties()[i].rho();
103 return sum(dVolSolid);
107template<
class ParcelType>
108template<
class TrackCloudType>
111 TrackCloudType&
cloud,
116 typedef typename TrackCloudType::reactingCloudType reactingCloudType;
124 const scalar np0 = this->nParticle_;
125 const scalar d0 = this->d_;
126 const vector& U0 = this->U_;
127 const scalar
T0 = this->T_;
128 const scalar mass0 = this->mass();
130 const scalar pc = td.pc();
135 scalar Ts, rhos, mus, Prs, kappas;
136 this->calcSurfaceValues(
cloud, td,
T0, Ts, rhos, mus, Prs, kappas);
137 scalar Res = this->
Re(rhos, U0, td.Uc(), d0, mus);
158 scalar dhsTrans = 0.0;
178 calcHeterogeneousReactions
204 scalar mass1 = mass0 -
sum(dMassSolid);
207 if (np0*mass1 <
cloud.constProps().minParcelMass())
209 td.keepParticle =
false;
215 (void)this->updateMassFraction(mass0, dMassSolid, this->Y_);
220 cloud.constProps().volUpdateType()
221 == constantProperties::volumeUpdateType::mUndefined
224 if (
cloud.constProps().constantVolume())
226 this->rho_ = mass1/this->volume();
230 this->d_ =
cbrt(mass1/this->rho_*6/
pi);
235 switch (
cloud.constProps().volUpdateType())
237 case constantProperties::volumeUpdateType::mConstRho :
239 this->d_ =
cbrt(mass1/this->rho_*6/
pi);
242 case constantProperties::volumeUpdateType::mConstVol :
244 this->rho_ = mass1/this->volume();
247 case constantProperties::volumeUpdateType::mUpdateRhoAndVol :
258 this->rho_ = mass1/(this->volume() + deltaVol);
259 this->d_ =
cbrt(mass1/this->rho_*6.0/
pi);
265 this->correctSurfaceValues(
cloud, td, Ts,
Cs, rhos, mus, Prs, kappas);
266 Res = this->
Re(rhos, U0, td.Uc(), this->d_, mus);
277 this->calcHeatTransfer
293 this->Cp_ = CpEff(
cloud, td, pc, this->T_, idS);
300 this->calcVelocity(
cloud, td, dt, Res, mus, mass1,
Su, dUTrans, Spu);
306 if (
cloud.solution().coupled())
323 scalar dm = np0*dMassSRCarrier[i];
331 cloud.UTrans()[this->
cell()] += np0*dUTrans;
335 cloud.hsTrans()[this->
cell()] += np0*dhsTrans;
336 cloud.hsCoeff()[this->
cell()] += np0*Sph;
339 if (
cloud.radiation())
341 const scalar ap = this->areaP();
342 const scalar T4 =
pow4(
T0);
343 cloud.radAreaP()[this->
cell()] += dt*np0*ap;
344 cloud.radT4()[this->
cell()] += dt*np0*T4;
345 cloud.radAreaPT4()[this->
cell()] += dt*np0*ap*T4;
353template<
class ParcelType>
354template<
class TrackCloudType>
357 TrackCloudType&
cloud,
365 const label canCombust,
377 if (!
cloud.heterogeneousReaction().active())
383 (void)
cloud.constProps().hRetentionCoeff();
384 (void)
cloud.constProps().TMax();
393 const scalar hReaction =
cloud.heterogeneousReaction().calculate
413 cloud.heterogeneousReaction().addToSurfaceReactionMass
415 this->nParticle_*
sum(dMassSRSolid)
418 const scalar xsi =
min(
T/
cloud.constProps().TMax(), 1.0);
420 (1.0 - xsi*xsi)*
cloud.constProps().hRetentionCoeff();
422 Sh += coeff*hReaction/dt;
424 dhsTrans += (1.0 - coeff)*hReaction;
430template<
class ParcelType>
438 canCombust_(
p.canCombust_)
442template<
class ParcelType>
451 canCombust_(
p.canCombust_)
Templated reacting parcel composition model class Consists of carrier species (via thermo package),...
Reacting heterogeneous Parcel.
scalar updatedDeltaVolume(TrackCloudType &cloud, const scalarField &dMass, const scalar p, const scalar T)
Return change of volume due to mass exchange.
void calcHeterogeneousReactions(TrackCloudType &cloud, trackingData &td, const scalar dt, const scalar Res, const scalar nu, const scalar d, const scalar T, const scalar mass, const label canCombust, const scalar N, scalar &NCpW, const scalarField &YSolid, scalarField &F, scalarField &dMassSRSolid, scalarField &dMassSRCarrier, scalar &Sh, scalar &dhsTrans) const
Calculate surface reactions.
void size(const label n)
Older name for setAddressableSize.
A cell is defined as a list of faces with extra functionality.
A cloud is a registry collection of lagrangian particles.
Class used to pass data into container.
Mesh consisting of general polyhedral cells.
basicSpecieMixture & composition
volVectorField F(fluid.F())
constexpr scalar pi(M_PI)
scalarField Re(const UList< complex > &cf)
Extract real component.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &df)
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
dimensionedScalar pow4(const dimensionedScalar &ds)
dimensionedScalar cbrt(const dimensionedScalar &ds)
#define forAll(list, i)
Loop across all elements in list.