Go to the documentation of this file.
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),
127 if (solution_.size() > 2)
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>
185 liquids_(pcm.owner().thermo().liquids()),
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);
const scalar RR
Universal gas constant: default in [J/(kmol K)].
Templated phase change model class.
Liquid evaporation/condensation model for solution of liquid and solid.
activityCoeffMethodType method_
Method used.
A class for handling words, derived from Foam::string.
A class for managing temporary objects.
static constexpr const zero Zero
Global zero (0)
label solToSolMap_
Mapping between local and global solid species.
virtual void calculate(const scalar dt, const label celli, const scalar Re, const scalar Pr, const scalar d, const scalar nu, const scalar rho, const scalar T, const scalar Ts, const scalar pc, const scalar Tc, const scalarField &X, const scalarField &Xsol, const scalarField &liqMass, scalarField &dMassPC) const
Update model.
psiReactionThermo & thermo
LiquidEvapFuchsKnudsen(const dictionary &dict, CloudType &cloud)
Construct from dictionary.
Ostream & endl(Ostream &os)
Add newline and flush stream.
dimensionedScalar exp(const dimensionedScalar &ds)
#define forAll(list, i)
Loop across all elements in list.
scalar gamma_
Mean gas free path.
void calcXcSolution(const scalar massliq, const scalar masssol, scalar &Xliq, scalar &Xsol) const
Calculate volumetric fractions of components in the solution.
virtual scalar dh(const label idc, const label idl, const scalar p, const scalar T) const
Return the enthalpy per unit mass.
List< word > solution_
List of active liquid names i.e (liquidName solidName)
dimensionedSphericalTensor inv(const dimensionedSphericalTensor &dt)
messageStream Info
Information stream (stdout output on master, null elsewhere)
dimensionedScalar Pr("Pr", dimless, laminarTransport)
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
Templated base class for dsmc cloud.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
dimensionedScalar log(const dimensionedScalar &ds)
tmp< scalarField > calcXc(const label celli) const
Calculate the carrier phase component volume fractions at celli.
errorManip< error > abort(error &err)
PtrList< volScalarField > & Y
dimensionedScalar rhog("rhog", dimDensity, transportProperties)
scalar Sh() const
Sherwood number.
errorManipArg< error, int > exit(error &err, const int errNo=1)
scalar activityCoeff(const scalar Xliq, const scalar Ysol) const
Return activity coefficient.
label liqToLiqMap_
Mapping between local and global liquid species.
virtual scalar TMax(const scalar p, const scalarField &X) const
Return maximum/limiting temperature.
label liqToCarrierMap_
Mapping between liquid and carrier species.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
virtual scalar Tvap(const scalarField &X) const
Return vapourisation temperature.
constexpr scalar pi(M_PI)
scalarField Re(const UList< complex > &cf)
Extract real component.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &df)
scalar alpha_
The mass thermal accomodation.
dimensionedScalar sigma("sigma", dimMass/sqr(dimTime), transportProperties)
dimensionedScalar cbrt(const dimensionedScalar &ds)