30 template<
class CloudType>
40 coeffDict_(dict.
subDict(type +
"Coeffs")),
41 mcCarrierThermo_(owner.mcCarrierThermo()),
46 owner.mesh().objectRegistry::lookupObject<
dictionary>
48 owner.carrierThermo().name()
56 owner.mesh().objectRegistry::lookupObject<
dictionary>
58 owner.carrierThermo().name()
64 coeffDict_.lookup(
"phases"),
65 mcCarrierThermo_.species(),
66 liquids_().components(),
67 solids_().components()
74 template<
class CloudType>
81 template<
class CloudType>
88 template<
class CloudType>
95 template<
class CloudType>
102 template<
class CloudType>
106 return mcCarrierThermo_;
110 template<
class CloudType>
117 template<
class CloudType>
124 template<
class CloudType>
132 template<
class CloudType>
135 return phaseProps_.size();
139 template<
class CloudType>
144 if (phaseProps_.size() == 1)
146 return phaseProps_[0].names();
150 return phaseProps_.phaseTypes();
155 template<
class CloudType>
159 return phaseProps_.stateLabels();
163 template<
class CloudType>
167 return phaseProps_[phaseI].names();
171 template<
class CloudType>
177 forAll(mcCarrierThermo_.species(), i)
179 if (cmptName == mcCarrierThermo_.species()[i])
187 "Foam::label Foam::CompositionModel<CloudType>::globalCarrierId"
191 ) <<
"Unable to determine global id for requested component "
198 template<
class CloudType>
205 label
id = phaseProps_[phaseI].globalId(cmptName);
211 "Foam::label Foam::CompositionModel<CloudType>::globalId"
216 ) <<
"Unable to determine global id for requested component "
224 template<
class CloudType>
230 return phaseProps_[phaseI].globalIds();
234 template<
class CloudType>
241 label
id = phaseProps_[phaseI].id(cmptName);
247 "Foam::label Foam::CompositionModel<CloudType>::localId"
252 ) <<
"Unable to determine local id for component " << cmptName
260 template<
class CloudType>
267 label gid = phaseProps_[phaseI].globalCarrierIds()[id];
274 "Foam::CompositionModel<CloudType>::localToGlobalCarrierId"
279 ) <<
"Unable to determine global carrier id for phase "
280 << phaseI <<
" with local id " <<
id
288 template<
class CloudType>
294 return phaseProps_[phaseI].Y();
298 template<
class CloudType>
308 switch (props.
phase())
310 case phaseProperties::GAS:
315 WInv += Y[i]/mcCarrierThermo_.speciesData()[gid].W();
316 X[i] = Y[i]/mcCarrierThermo_.speciesData()[gid].W();
320 case phaseProperties::LIQUID:
325 WInv += Y[i]/this->liquids().properties()[gid].W();
326 X[i] += Y[i]/this->liquids().properties()[gid].W();
334 "Foam::scalarField Foam::CompositionModel<CloudType>::X"
339 ) <<
"Only possible to convert gas and liquid mass fractions"
348 template<
class CloudType>
358 scalar HMixture = 0.0;
359 switch (props.
phase())
361 case phaseProperties::GAS:
366 HMixture += Y[i]*mcCarrierThermo_.speciesData()[gid].H(T);
370 case phaseProperties::LIQUID:
375 HMixture += Y[i]*this->liquids().properties()[gid].h(p, T);
379 case phaseProperties::SOLID:
387 this->solids().properties()[gid].Hf()
388 + this->solids().properties()[gid].cp()*
T
397 "Foam::scalar Foam::CompositionModel<CloudType>::H"
400 " const scalarField&, "
412 template<
class CloudType>
422 scalar HsMixture = 0.0;
423 switch (props.
phase())
425 case phaseProperties::GAS:
430 HsMixture += Y[i]*mcCarrierThermo_.speciesData()[gid].Hs(T);
434 case phaseProperties::LIQUID:
442 this->liquids().properties()[gid].h(p, T)
443 - this->liquids().properties()[gid].h(p, 298.25)
448 case phaseProperties::SOLID:
453 HsMixture += Y[i]*this->solids().properties()[gid].cp()*
T;
461 "Foam::scalar Foam::CompositionModel<CloudType>::Hs"
464 " const scalarField&, "
476 template<
class CloudType>
486 scalar HcMixture = 0.0;
487 switch (props.
phase())
489 case phaseProperties::GAS:
494 HcMixture += Y[i]*mcCarrierThermo_.speciesData()[gid].Hc();
498 case phaseProperties::LIQUID:
504 Y[i]*this->liquids().properties()[gid].h(p, 298.15);
508 case phaseProperties::SOLID:
513 HcMixture += Y[i]*this->solids().properties()[gid].Hf();
521 "Foam::scalar Foam::CompositionModel<CloudType>::Hc"
524 " const scalarField&, "
536 template<
class CloudType>
546 scalar cpMixture = 0.0;
547 switch (props.
phase())
549 case phaseProperties::GAS:
554 cpMixture += Y[i]*mcCarrierThermo_.speciesData()[gid].Cp(T);
558 case phaseProperties::LIQUID:
563 cpMixture += Y[i]*this->liquids().properties()[gid].cp(p, T);
567 case phaseProperties::SOLID:
572 cpMixture += Y[i]*this->solids().properties()[gid].cp();
580 "Foam::scalar Foam::CompositionModel<CloudType>::cp"
583 "const scalarField&, "
595 template<
class CloudType>
605 scalar LMixture = 0.0;
606 switch (props.
phase())
608 case phaseProperties::GAS:
614 "Foam::scalar Foam::CompositionModel<CloudType>::L"
617 "const scalarField&, "
621 ) <<
"No support for gaseous components" <<
endl;
625 case phaseProperties::LIQUID:
630 LMixture += Y[i]*this->liquids().properties()[gid].hl(p, T);
634 case phaseProperties::SOLID:
640 "Foam::scalar Foam::CompositionModel<CloudType>::L"
643 "const scalarField&, "
647 ) <<
"No support for solid components" <<
endl;
655 "Foam::scalar Foam::CompositionModel<CloudType>::L"
658 "const scalarField&, "