33 template<
class CloudType>
42 const scalar Yliq = massliq/(massliq + masssol);
43 const scalar Ysol = 1 - Yliq;
44 Xliq = Yliq/liquids_.properties()[liqToLiqMap_].W();
45 Xsol = Ysol/this->owner().thermo().solids().properties()[solToSolMap_].W();
46 Xliq /= (Xliq + Xsol);
51 template<
class CloudType>
62 this->owner().thermo().carrier().Y()[i][celli]
63 /this->owner().thermo().carrier().W(i);
70 template<
class CloudType>
81 template<
class CloudType>
93 <<
"Activity coefficient UNIFAC is not implemented " <<
nl
99 const scalar ic = this->coeffDict().getScalar(
"ic");
100 return inv((1 + ic*Xsol/(Xliq + ROOTVSMALL)));
110 template<
class CloudType>
119 gamma_(this->coeffDict().getScalar(
"gamma")),
120 alpha_(this->coeffDict().getScalar(
"alpham")),
121 liquids_(owner.
thermo().liquids()),
122 solution_(this->coeffDict().
lookup(
"solution")),
123 liqToCarrierMap_(-1),
130 <<
"Solution is not well defined. It should be (liquid solid)"
135 Info<<
"Participating liquid-solid species:" <<
endl;
139 owner.composition().carrierId(
solution_[0]);
142 const label idLiquid = owner.composition().idLiquid();
144 owner.composition().localId(idLiquid,
solution_[0]);
147 const label idSolid = owner.composition().idSolid();
150 owner.composition().localId(idSolid,
solution_[1]);
152 const word activityCoefficienType
154 this->coeffDict().getWord(
"activityCoefficient")
157 if (activityCoefficienType ==
"Hoff")
161 else if (activityCoefficienType ==
"UNIFAC")
168 <<
"activityCoefficient must be either 'Hoff' or 'UNIFAC'"
175 template<
class CloudType>
178 const LiquidEvapFuchsKnudsen<CloudType>& pcm
182 method_(pcm.method_),
185 liquids_(pcm.owner().
thermo().liquids()),
186 solution_(pcm.solution_),
187 liqToCarrierMap_(pcm.liqToCarrierMap_),
188 liqToLiqMap_(pcm.liqToLiqMap_),
189 solToSolMap_(pcm.solToSolMap_)
195 template<
class CloudType>
215 const scalar
rhog = this->owner().thermo().thermo().rho()()[celli];
217 const label gid = liqToCarrierMap_;
218 const label lid = liqToLiqMap_;
219 const label sid = solToSolMap_;
221 const scalar W = liquids_.properties()[lid].W();
223 const scalar YeInf = this->owner().thermo().carrier().Y()[gid][celli];
225 const scalar
sigma = liquids_.properties()[lid].sigma(pc, Ts);
231 const scalar Dab = liquids_.properties()[lid].D(pc, Ts);
234 const scalar pSat = liquids_.properties()[lid].pv(pc,
T);
236 scalar Xliq(0), Xsol(0);
237 calcXcSolution(liqMass[lid], solMass[sid], Xliq, Xsol);
240 const scalar
gamma = activityCoeff(Xliq, Xsol);
243 const scalar Rliq =
RR/W;
246 const scalar Kn = 2*gamma_/d;
248 (1+Kn)/(1+ (4/(3*alpha_) + 0.377)*Kn +
sqr(Kn)*4/(3*alpha_));
251 const scalar Sc =
nu/(Dab + ROOTVSMALL);
254 const scalar Sherwood = Sh(
Re, Sc);
257 const scalar Ni = (
rhog*Sherwood*Dab*Cm/d)*
log((1 - YeInf)/(1 - YeSurf));
261 dMassPC[lid] += Ni*As*dt;
265 template<
class CloudType>
277 switch (parent::enthalpyTransfer_)
279 case (parent::etLatentHeat):
281 dh = liquids_.properties()[idl].hl(
p,
T);
284 case (parent::etEnthalpyDifference):
286 scalar hc = this->owner().composition().carrier().Ha(idc,
p,
T);
287 scalar hp = liquids_.properties()[idl].h(
p,
T);
303 template<
class CloudType>
313 template<
class CloudType>
323 return liquids_.pvInvert(
p, X);