32 template<
class ParcelType>
33 template<
class TrackData>
43 pc_ = td.pInterp().interpolate(this->position(), cellI);
44 if (pc_ < td.constProps().pMin())
48 "void Foam::ReactingParcel<ParcelType>::setCellValues"
54 ) <<
"Limiting observed pressure in cell " << cellI <<
" to "
55 << td.constProps().pMin() <<
nl <<
endl;
57 pc_ = td.constProps().pMin();
62 template<
class ParcelType>
63 template<
class TrackData>
71 scalar massCell = this->massCell(cellI);
73 scalar addedMass = 0.0;
74 forAll(td.cloud().rhoTrans(), i)
76 addedMass += td.cloud().rhoTrans(i)[cellI];
79 this->rhoc_ += addedMass/td.cloud().pMesh().cellVolumes()[cellI];
81 scalar massCellNew = massCell + addedMass;
82 this->Uc_ += td.cloud().UTrans()[cellI]/massCellNew;
85 if (addedMass > ROOTVSMALL)
87 forAll(td.cloud().rhoTrans(), i)
89 scalar
Y = td.cloud().rhoTrans(i)[cellI]/addedMass;
91 Y*td.cloud().mcCarrierThermo().speciesData()[i].Cp(this->Tc_);
94 const scalar cpc = td.cpInterp().psi()[cellI];
95 this->cpc_ = (massCell*cpc + addedMass*cpEff)/massCellNew;
97 this->Tc_ += td.cloud().hsTrans()[cellI]/(this->cpc_*massCellNew);
101 template<
class ParcelType>
102 template<
class TrackData>
122 scalarField Xinf(td.cloud().mcCarrierThermo().speciesData().size());
127 td.cloud().mcCarrierThermo().Y(i)[cellI]
128 /td.cloud().mcCarrierThermo().speciesData()[i].W();
133 const scalar Xsff = 1.0 -
min(
sum(Cs)*specie::RR*this->T_/pc_, 1.0);
136 const scalar CsTot = pc_/(specie::RR*this->T_);
147 const scalar Csi = Cs[i] + Xsff*Xinf[i]*CsTot;
149 Xs[i] = (2.0*Csi + Xinf[i]*CsTot)/3.0;
150 Ys[i] = Xs[i]*td.cloud().mcCarrierThermo().speciesData()[i].W();
160 scalar sumYiSqrtW = 0;
161 scalar sumYiCbrtW = 0;
166 sqrt(td.cloud().mcCarrierThermo().speciesData()[i].W());
168 cbrt(td.cloud().mcCarrierThermo().speciesData()[i].W());
170 rhos += Xs[i]*td.cloud().mcCarrierThermo().speciesData()[i].W();
171 mus += Ys[i]*sqrtW*td.cloud().mcCarrierThermo().speciesData()[i].mu(T);
173 Ys[i]*cbrtW*td.cloud().mcCarrierThermo().speciesData()[i].kappa(T);
174 cps += Xs[i]*td.cloud().mcCarrierThermo().speciesData()[i].Cp(T);
176 sumYiSqrtW += Ys[i]*sqrtW;
177 sumYiCbrtW += Ys[i]*cbrtW;
180 rhos *= pc_/(specie::RR*
T);
187 template<
class ParcelType>
195 scalar mass1 = mass0 -
sum(dMass);
198 if (mass1 > ROOTVSMALL)
202 Y[i] = (Y[i]*mass0 - dMass[i])/mass1;
210 template<
class ParcelType>
211 template<
class TrackData>
221 const scalar np0 = this->nParticle_;
222 const scalar d0 = this->d_;
223 const vector& U0 = this->U_;
224 const scalar rho0 = this->rho_;
225 const scalar T0 = this->T_;
226 const scalar cp0 = this->cp_;
227 const scalar mass0 = this->mass();
233 this->calcSurfaceValues(td, cellI, T0, Ts, rhos, mus, Pr, kappa);
236 scalar
Re = this->
Re(U0, d0, rhos, mus);
246 vector dUTrans = vector::zero;
252 scalar dhsTrans = 0.0;
268 scalarField Cs(td.cloud().mcCarrierThermo().species().size(), 0.0);
293 correctSurfaceValues(td, cellI, Ts, Cs, rhos, mus, Pr, kappa);
296 scalar mass1 = updateMassFraction(mass0, dMassPC, Y_);
327 calcVelocity(td, dt, cellI, Re, mus, d0, U0, rho0, mass0, Su, dUTrans);
329 dUTrans += 0.5*(mass0 - mass1)*(U0 + U1);
333 if (td.cloud().coupled())
338 label gid = td.cloud().composition().localToGlobalCarrierId(0, i);
339 td.cloud().rhoTrans(gid)[cellI] += np0*dMassPC[i];
343 td.cloud().UTrans()[cellI] += np0*dUTrans;
346 td.cloud().hsTrans()[cellI] += np0*dhsTrans;
352 if (mass1 < td.constProps().minParticleMass())
354 td.keepParticle =
false;
356 if (td.cloud().coupled())
362 td.cloud().composition().localToGlobalCarrierId(0, i);
363 td.cloud().rhoTrans(gid)[cellI] += np0*mass1*Y_[i];
365 td.cloud().UTrans()[cellI] += np0*mass1*U1;
366 td.cloud().hsTrans()[cellI] +=
367 np0*mass1*td.cloud().composition().H(0, Y_, pc_, T1);
377 this->cp_ = td.cloud().composition().cp(0, Y_, pc_, T1);
382 if (td.constProps().constantVolume())
384 this->rho_ = mass1/this->volume();
394 template<
class ParcelType>
395 template<
class TrackData>
420 > phaseChangeModelType;
424 !td.cloud().phaseChange().active()
425 || T < td.constProps().Tvap()
433 td.
cloud().phaseChange().calculate
447 dMassPC =
min(mass*YPhase*YComponents, dMassPC);
449 scalar dMassTot =
sum(dMassPC);
452 td.cloud().addToMassPhaseChange(this->nParticle_*dMassTot);
455 scalar Wc = this->rhoc_*specie::RR*this->Tc_/this->pc_;
460 td.cloud().composition().localToGlobalCarrierId(idPhase, i);
461 const label idl = td.cloud().composition().globalIds(idPhase)[i];
466 td.cloud().phaseChange().enthalpyTransfer()
467 == phaseChangeModelType::etLatentHeat
471 td.cloud().composition().liquids().properties()[idl].hl(pc_, T);
473 Sh -= dMassPC[i]*hlp/dt;
478 scalar hc = td.cloud().mcCarrierThermo().speciesData()[idc].H(T);
480 td.cloud().composition().liquids().properties()[idl].h(pc_, T);
482 Sh -= dMassPC[i]*(hc - hp)/dt;
487 td.cloud().composition().liquids().properties()[idl].D(pc_, Ts, Wc);
490 td.cloud().mcCarrierThermo().speciesData()[idc].Cp(Ts);
491 const scalar W = td.cloud().mcCarrierThermo().speciesData()[idc].W();
492 const scalar Ni = dMassPC[i]/(this->areaS(d)*dt*W);
501 Cs[idc] += Ni*d/(2.0*Dab);
508 template <
class ParcelType>