33 template<
class ParcelType>
34 template<
class TrackData>
42 ParcelType::setCellValues(td, dt, cellI);
46 Cpc_ = td.CpInterp().interpolate(this->position(), tetIs);
48 Tc_ = td.TInterp().interpolate(this->position(), tetIs);
50 if (Tc_ < td.cloud().constProps().TMin())
55 <<
"Limiting observed temperature in cell " << cellI <<
" to "
56 << td.cloud().constProps().TMin() <<
nl <<
endl;
59 Tc_ = td.cloud().constProps().TMin();
64 template<
class ParcelType>
65 template<
class TrackData>
73 this->Uc_ += td.cloud().UTrans()[cellI]/this->massCell(cellI);
75 const scalar CpMean = td.CpInterp().psi()[cellI];
78 Tc_ = td.TInterp().interpolate(this->position(), tetIs);
79 Tc_ += td.cloud().hsTrans()[cellI]/(CpMean*this->massCell(cellI));
81 if (Tc_ < td.cloud().constProps().TMin())
86 <<
"Limiting observed temperature in cell " << cellI <<
" to "
87 << td.cloud().constProps().TMin() <<
nl <<
endl;
90 Tc_ = td.cloud().constProps().TMin();
95 template<
class ParcelType>
96 template<
class TrackData>
110 Ts = (2.0*
T + Tc_)/3.0;
112 if (Ts < td.cloud().constProps().TMin())
117 <<
"Limiting parcel surface temperature to "
118 << td.cloud().constProps().TMin() <<
nl <<
endl;
121 Ts = td.cloud().constProps().TMin();
125 const scalar TRatio = Tc_/Ts;
127 rhos = this->rhoc_*TRatio;
130 mus = td.muInterp().interpolate(this->position(), tetIs)/TRatio;
131 kappas = td.kappaInterp().interpolate(this->position(), tetIs)/TRatio;
133 Pr = Cpc_*mus/kappas;
138 template<
class ParcelType>
139 template<
class TrackData>
149 const scalar np0 = this->nParticle_;
150 const scalar mass0 = this->mass();
153 const scalar T0 = this->T_;
158 scalar Ts, rhos, mus,
Pr, kappas;
159 calcSurfaceValues(td, cellI, this->T_, Ts, rhos, mus,
Pr, kappas);
162 scalar
Re = this->
Re(this->U_, this->d_, rhos, mus);
184 scalar dhsTrans = 0.0;
195 this->calcHeatTransfer
215 this->calcVelocity(td, dt, cellI,
Re, mus, mass0,
Su, dUTrans, Spu);
220 if (td.cloud().solution().coupled())
223 td.cloud().UTrans()[cellI] += np0*dUTrans;
226 td.cloud().UCoeff()[cellI] += np0*Spu;
229 td.cloud().hsTrans()[cellI] += np0*dhsTrans;
232 td.cloud().hsCoeff()[cellI] += np0*Sph;
235 if (td.cloud().radiation())
237 const scalar ap = this->areaP();
238 const scalar T4 =
pow4(T0);
239 td.cloud().radAreaP()[cellI] += dt*np0*ap;
240 td.cloud().radT4()[cellI] += dt*np0*T4;
241 td.cloud().radAreaPT4()[cellI] += dt*np0*ap*T4;
247 template<
class ParcelType>
248 template<
class TrackData>
263 if (!td.cloud().heatTransfer().active())
268 const scalar d = this->d();
269 const scalar
rho = this->
rho();
272 scalar htc = td.cloud().heatTransfer().htc(d,
Re,
Pr,
kappa, NCpW);
274 if (
mag(htc) < ROOTVSMALL && !td.cloud().radiation())
279 T_ + dt*
Sh/(this->volume(d)*
rho*Cp_),
280 td.cloud().constProps().TMin()
284 htc =
max(htc, ROOTVSMALL);
285 const scalar As = this->areaS(d);
287 scalar ap = Tc_ +
Sh/(As*htc);
288 scalar bp = 6.0*(
Sh/As + htc*(Tc_ - T_));
289 if (td.cloud().radiation())
292 const scalar Gc = td.GInterp().interpolate(this->position(), tetIs);
294 const scalar
epsilon = td.cloud().constProps().epsilon0();
302 bp /=
rho*d*Cp_*(ap - T_) + ROOTVSMALL;
306 td.cloud().TIntegrator().integrate(T_, dt, ap*bp, bp);
314 td.cloud().constProps().TMin()
316 td.cloud().constProps().TMax()
321 dhsTrans += Sph*(Tres.average() - Tc_);
329 template<
class ParcelType>
343 template<
class ParcelType>
346 const ThermoParcel<ParcelType>&
p,