34 template<
class CloudType>
45 this->owner().thermo().carrier().Y()[i][cellI]
46 /this->owner().thermo().carrier().W(i);
53 template<
class CloudType>
66 template<
class CloudType>
74 liquids_(owner.thermo().liquids()),
75 activeLiquids_(this->coeffDict().lookup(
"activeLiquids")),
76 liqToCarrierMap_(activeLiquids_.size(), -1),
77 liqToLiqMap_(activeLiquids_.size(), -1)
79 if (activeLiquids_.size() == 0)
83 "Foam::LiquidEvaporation<CloudType>::LiquidEvaporation" 85 "const dictionary& dict, " 88 ) <<
"Evaporation model selected, but no active liquids defined" 93 Info<<
"Participating liquid species:" <<
endl;
98 Info<<
" " << activeLiquids_[i] <<
endl;
100 owner.composition().carrierId(activeLiquids_[i]);
104 const label idLiquid = owner.composition().idLiquid();
108 owner.composition().localId(idLiquid, activeLiquids_[i]);
114 template<
class CloudType>
121 liquids_(pcm.
owner().thermo().liquids()),
130 template<
class CloudType>
137 template<
class CloudType>
155 if ((liquids_.Tc(X) -
T) < SMALL)
161 "void Foam::LiquidEvaporation<CloudType>::calculate" 173 "const scalarField&, " 176 ) <<
"Parcel reached critical conditions: " 177 <<
"evaporating all avaliable mass" <<
endl;
182 const label lid = liqToLiqMap_[i];
183 dMassPC[lid] = GREAT;
195 const label gid = liqToCarrierMap_[i];
196 const label lid = liqToLiqMap_[i];
199 const scalar Dab = liquids_.properties()[lid].D(pc, Ts);
207 const scalar
pSat = liquids_.properties()[lid].pv(pc, T);
210 const scalar Sc = nu/(Dab + ROOTVSMALL);
213 const scalar
Sh = this->
Sh(Re, Sc);
216 const scalar kc = Sh*Dab/(d + ROOTVSMALL);
219 const scalar Cs = pSat/(
RR*Ts);
222 const scalar Cinf = Xc[gid]*pc/(
RR*Ts);
225 const scalar Ni =
max(kc*(Cs - Cinf), 0.0);
228 dMassPC[lid] += Ni*
pi*
sqr(d)*liquids_.properties()[lid].W()*dt;
233 template<
class CloudType>
245 switch (parent::enthalpyTransfer_)
247 case (parent::etLatentHeat):
252 case (parent::etEnthalpyDifference):
254 scalar hc = this->owner().composition().carrier().Ha(idc, p, T);
255 scalar hp = liquids_.
properties()[idl].h(p, T);
264 "Foam::scalar Foam::LiquidEvaporation<CloudType>::dh" 279 template<
class CloudType>
285 return liquids_.Tpt(X);
289 template<
class CloudType>
296 return liquids_.pvInvert(p, X);
dimensionedScalar sqrt(const dimensionedScalar &ds)
const CloudType & owner() const
Return const access to the owner cloud.
tmp< scalarField > calcXc(const label cellI) const
Calculate the carrier phase component volume fractions at cellI.
virtual scalar dh(const label idc, const label idl, const scalar p, const scalar T) const
Return the enthalpy per unit mass.
const dimensionedScalar & pSat
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
dimensionedScalar cbrt(const dimensionedScalar &ds)
List< label > liqToLiqMap_
Mapping between local and global liquid species.
A list of keyword definitions, which are a keyword followed by any number of values (e...
virtual scalar Tvap(const scalarField &X) const
Return vapourisation temperature.
Templated phase change model class.
Ostream & endl(Ostream &os)
Add newline and flush stream.
#define WarningIn(functionName)
Report a warning using Foam::Warning.
PtrList< volScalarField > & Y
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
virtual scalar TMax(const scalar p, const scalarField &X) const
Return maximum/limiting temperature.
const dictionary & properties() const
Return const access to the properties dictionary.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &df)
virtual ~LiquidEvaporation()
Destructor.
errorManip< error > abort(error &err)
#define FatalErrorIn(functionName)
Report an error message using Foam::FatalError.
Liquid evaporation model.
const scalar RR
Universal gas constant (default in [J/(kmol K)])
List< label > liqToCarrierMap_
Mapping between liquid and carrier species.
Templated base class for dsmc cloud.
LiquidEvaporation(const dictionary &dict, CloudType &cloud)
Construct from dictionary.
virtual void calculate(const scalar dt, const label cellI, const scalar Re, const scalar Pr, const scalar d, const scalar nu, const scalar T, const scalar Ts, const scalar pc, const scalar Tc, const scalarField &X, scalarField &dMassPC) const
Update model.
psiReactionThermo & thermo
dimensionedSymmTensor sqr(const dimensionedVector &dv)
scalar Sh() const
Sherwood number.
List< word > activeLiquids_
List of active liquid names.
A class for managing temporary objects.