36 template<
class ParcelType>
37 template<
class TrackCloudType>
40 TrackCloudType&
cloud,
47 return cloud.composition().Cp(idS, this->Y_,
p,
T);
51 template<
class ParcelType>
52 template<
class TrackCloudType>
55 TrackCloudType&
cloud,
62 return cloud.composition().Hs(idS, this->Y_,
p,
T);
66 template<
class ParcelType>
67 template<
class TrackCloudType>
70 TrackCloudType&
cloud,
77 return cloud.composition().L(idS, this->Y_,
p,
T);
84 template<
class ParcelType>
85 template<
class TrackCloudType>
88 TrackCloudType&
cloud,
100 dMass[i]/
composition.solids().properties()[i].rho();
103 return sum(dVolSolid);
107 template<
class ParcelType>
108 template<
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;
353 template<
class ParcelType>
354 template<
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;
430 template<
class ParcelType>
438 canCombust_(
p.canCombust_)
442 template<
class ParcelType>
445 const ReactingHeterogeneousParcel<ParcelType>&
p,
451 canCombust_(
p.canCombust_)