31 template<
class ParcelType>
34 template<
class ParcelType>
37 template<
class ParcelType>
43 template<
class ParcelType>
44 template<
class TrackData>
56 this->Y_[GAS]*td.
cloud().composition().cp(idG, YGas_, p, T)
57 + this->Y_[LIQ]*td.
cloud().composition().cp(idL, YLiquid_, p, T)
58 + this->Y_[SLD]*td.cloud().composition().cp(idS, YSolid_, p, T);
62 template<
class ParcelType>
63 template<
class TrackData>
75 this->Y_[GAS]*td.
cloud().composition().H(idG, YGas_, p, T)
76 + this->Y_[LIQ]*td.
cloud().composition().H(idL, YLiquid_, p, T)
77 + this->Y_[SLD]*td.cloud().composition().H(idS, YSolid_, p, T);
81 template<
class ParcelType>
82 template<
class TrackData>
94 this->Y_[GAS]*td.
cloud().composition().L(idG, YGas_, p, T)
95 + this->Y_[LIQ]*td.
cloud().composition().L(idL, YLiquid_, p, T)
96 + this->Y_[SLD]*td.cloud().composition().L(idS, YSolid_, p, T);
100 template<
class ParcelType>
112 this->updateMassFraction(mass0*YMix[GAS], dMassGas, YGas_);
114 this->updateMassFraction(mass0*YMix[LIQ], dMassLiquid, YLiquid_);
116 this->updateMassFraction(mass0*YMix[SLD], dMassSolid, YSolid_);
118 scalar massNew =
max(massGas + massLiquid + massSolid, ROOTVSMALL);
120 YMix[GAS] = massGas/massNew;
121 YMix[LIQ] = massLiquid/massNew;
122 YMix[SLD] = 1.0 - YMix[GAS] - YMix[LIQ];
130 template<
class ParcelType>
131 template<
class TrackData>
143 template<
class ParcelType>
144 template<
class TrackData>
152 scalar massCell = this->massCell(cellI);
154 scalar addedMass = 0.0;
155 forAll(td.cloud().rhoTrans(), i)
157 addedMass += td.cloud().rhoTrans(i)[cellI];
160 this->rhoc_ += addedMass/td.cloud().pMesh().cellVolumes()[cellI];
162 scalar massCellNew = massCell + addedMass;
163 this->Uc_ += td.cloud().UTrans()[cellI]/massCellNew;
166 if (addedMass > ROOTVSMALL)
168 forAll(td.cloud().rhoTrans(), i)
170 scalar
Y = td.cloud().rhoTrans(i)[cellI]/addedMass;
172 Y*td.cloud().mcCarrierThermo().speciesData()[i].Cp(this->Tc_);
175 const scalar cpc = td.cpInterp().psi()[cellI];
176 this->cpc_ = (massCell*cpc + addedMass*cpEff)/massCellNew;
178 this->Tc_ += td.cloud().hsTrans()[cellI]/(this->cpc_*massCellNew);
182 template<
class ParcelType>
183 template<
class TrackData>
193 const scalar np0 = this->nParticle_;
194 const scalar d0 = this->d_;
195 const vector& U0 = this->U_;
196 const scalar rho0 = this->rho_;
197 const scalar T0 = this->T_;
198 const scalar cp0 = this->cp_;
199 const scalar mass0 = this->mass();
201 const scalar
pc = this->pc_;
204 const label idG = td.cloud().composition().idGas();
205 const label idL = td.cloud().composition().idLiquid();
206 const label idS = td.cloud().composition().idSolid();
216 scalar
Re = this->
Re(U0, d0, rhos, mus);
226 vector dUTrans = vector::zero;
232 scalar dhsTrans = 0.0;
248 scalarField Cs(td.cloud().mcCarrierThermo().species().size(), 0.0);
301 correctSurfaceValues(td, cellI, Ts, Cs, rhos, mus, Pr, kappa);
314 td.cloud().mcCarrierThermo().species().size(),
350 updateMassFractions(mass0, dMassGas, dMassLiquid, dMassSolid);
381 calcVelocity(td, dt, cellI, Re, mus, d0, U0, rho0, mass0, Su, dUTrans);
383 dUTrans += 0.5*(mass0 - mass1)*(U0 + U1);
389 if (td.cloud().coupled())
394 label gid = td.cloud().composition().localToGlobalCarrierId(GAS, i);
395 td.cloud().rhoTrans(gid)[cellI] += np0*dMassGas[i];
399 label gid = td.cloud().composition().localToGlobalCarrierId(LIQ, i);
400 td.cloud().rhoTrans(gid)[cellI] += np0*dMassLiquid[i];
412 td.cloud().rhoTrans(i)[cellI] += np0*dMassSRCarrier[i];
416 td.cloud().UTrans()[cellI] += np0*dUTrans;
419 td.cloud().hsTrans()[cellI] += np0*dhsTrans;
426 if (mass1 < td.constProps().minParticleMass())
428 td.keepParticle =
false;
430 if (td.cloud().coupled())
436 td.cloud().composition().localToGlobalCarrierId(GAS, i);
437 td.cloud().rhoTrans(gid)[cellI] += np0*mass1*YMix[GAS]*YGas_[i];
442 td.cloud().composition().localToGlobalCarrierId(LIQ, i);
443 td.cloud().rhoTrans(gid)[cellI] +=
444 np0*mass1*YMix[LIQ]*YLiquid_[i];
456 td.cloud().UTrans()[cellI] += np0*mass1*U1;
457 td.cloud().hsTrans()[cellI] +=
458 np0*mass1*HEff(td, pc, T1, idG, idL, idS);
468 this->cp_ = cpEff(td, pc, T1, idG, idL, idS);
473 if (td.constProps().constantVolume())
475 this->rho_ = mass1/this->volume();
485 template<
class ParcelType>
486 template<
class TrackData>
496 const label idVolatile,
497 const scalar YVolatileTot,
511 !td.cloud().devolatilisation().active()
512 || T < td.constProps().Tvap()
519 const scalar dMassTot = td.cloud().devolatilisation().calculate
525 td.cloud().composition().YMixture0()[idVolatile],
531 dMassDV = YVolatile*dMassTot;
533 td.cloud().addToMassDevolatilisation(this->nParticle_*dMassTot);
535 Sh -= dMassTot*td.constProps().LDevol()/dt;
538 const scalar Wc = this->rhoc_*specie::RR*this->Tc_/this->pc_;
547 td.cloud().composition().localToGlobalCarrierId(GAS, i);
548 const scalar Cp = td.cloud().mcCarrierThermo().speciesData()[id].Cp(Ts);
549 const scalar W = td.cloud().mcCarrierThermo().speciesData()[id].W();
550 const scalar Ni = dMassDV[i]/(this->areaS(d)*dt*W);
554 3.6059e-3*(
pow(1.8*Ts, 1.75))*
sqrt(1.0/W + 1.0/Wc)/(this->pc_*
beta);
558 Cs[id] += Ni*d/(2.0*Dab);
563 template<
class ParcelType>
564 template<
class TrackData>
573 const bool canCombust,
588 if (!td.cloud().surfaceReaction().active() || !canCombust)
594 const scalar hReaction = td.cloud().surfaceReaction().calculate
615 td.cloud().addToMassSurfaceReaction
618 *(
sum(dMassSRGas) +
sum(dMassSRLiquid) +
sum(dMassSRSolid))
621 const scalar xsi =
min(T/5000.0, 1.0);
622 const scalar hRetentionCoeffMod =
623 (1.0 - xsi*xsi)*td.constProps().hRetentionCoeff();
625 Sh += hRetentionCoeffMod*hReaction/dt;
627 dhsTrans += (1.0 - hRetentionCoeffMod)*hReaction;
633 template <
class ParcelType>
641 YLiquid_(p.YLiquid_),