32 template<
class BasePhaseSystem>
36 autoPtr<phaseSystem::dmdtfTable> totalDmdtfsPtr
38 new phaseSystem::dmdtfTable
40 phaseSystem::dmdtfTable& totalDmdtfs = totalDmdtfsPtr();
44 phaseTransferModelTable,
46 phaseTransferModelIter
49 const phasePair& pair =
50 this->phasePairs_[phaseTransferModelIter.key()];
52 totalDmdtfs.insert(pair, phaseSystem::dmdtf(pair).ptr());
54 if (phaseTransferModelIter()->
mixture())
56 *totalDmdtfs[pair] += *dmdtfs_[pair];
61 HashPtrTable<volScalarField>,
66 *totalDmdtfs[pair] += *dmidtfIter();
70 return totalDmdtfsPtr;
76 template<
class BasePhaseSystem>
79 const phaseSystem::dmdtfTable& dmdtfs,
80 phaseSystem::specieTransferTable& eqns
85 const phasePairKey& key = dmdtfIter.key();
86 const phasePair& pair(this->phasePairs_[key]);
92 const phaseModel& phase1 = pair.phase1();
93 const phaseModel& phase2 = pair.phase2();
100 *eqns[Y1.name()] += dmdtf21*Y2 +
fvm::Sp(dmdtf12, Y1);
101 *eqns[Y2.name()] -= dmdtf12*Y1 +
fvm::Sp(dmdtf21, Y2);
107 template<
class BasePhaseSystem>
110 const phaseSystem::dmidtfTable& dmidtfs,
111 phaseSystem::specieTransferTable& eqns
116 const phasePairKey& key = dmidtfIter.key();
117 const phasePair& pair(this->phasePairs_[key]);
119 const phaseModel& phase1 = pair.phase1();
120 const phaseModel& phase2 = pair.phase2();
122 forAllConstIter(HashPtrTable<volScalarField>, *dmidtfIter(), dmidtfJter)
124 const word& member = dmidtfJter.key();
134 *eqns[Y1.name()] += dmidtf;
140 *eqns[Y2.name()] -= dmidtf;
149 template<
class BasePhaseSystem>
155 BasePhaseSystem(mesh)
157 this->generatePairsAndSubModels
160 phaseTransferModels_,
166 phaseTransferModelTable,
167 phaseTransferModels_,
168 phaseTransferModelIter
171 const phasePair& pair = this->phasePairs_[phaseTransferModelIter.key()];
173 if (phaseTransferModelIter()->
mixture())
184 "phaseTransfer:dmdtf",
187 this->
mesh().time().timeName(),
196 dmidtfs_.insert(pair,
new HashPtrTable<volScalarField>());
198 const hashedWordList species(phaseTransferModelIter()->species());
202 const word& specie = *specieIter;
204 dmidtfs_[pair]->insert
215 "phaseTransfer:dmidtf",
220 this->
mesh().time().timeName(),
234 template<
class BasePhaseSystem>
241 template<
class BasePhaseSystem>
245 const phasePairKey& key
248 tmp<volScalarField> tDmdtf = BasePhaseSystem::dmdtf(key);
250 if (phaseTransferModels_.found(key))
254 if (phaseTransferModels_[key]->
mixture())
256 tDmdtf.ref() += dmdtfSign**dmdtfs_[key];
261 HashPtrTable<volScalarField>,
266 tDmdtf.ref() += dmdtfSign**dmidtfIter();
274 template<
class BasePhaseSystem>
278 PtrList<volScalarField> dmdts(BasePhaseSystem::dmdts());
280 autoPtr<phaseSystem::dmdtfTable> totalDmdtfsPtr = this->totalDmdtfs();
285 const phasePair& pair = this->phasePairs_[totalDmdtfIter.key()];
287 addField(pair.phase1(),
"dmdt", *totalDmdtfIter(), dmdts);
288 addField(pair.phase2(),
"dmdt", - *totalDmdtfIter(), dmdts);
295 template<
class BasePhaseSystem>
299 autoPtr<phaseSystem::momentumTransferTable> eqnsPtr =
304 this->addDmdtUfs(totalDmdtfs(), eqns);
310 template<
class BasePhaseSystem>
314 autoPtr<phaseSystem::momentumTransferTable> eqnsPtr =
315 BasePhaseSystem::momentumTransferf();
319 this->addDmdtUfs(totalDmdtfs(), eqns);
325 template<
class BasePhaseSystem>
329 autoPtr<phaseSystem::heatTransferTable> eqnsPtr =
330 BasePhaseSystem::heatTransfer();
341 template<
class BasePhaseSystem>
345 autoPtr<phaseSystem::specieTransferTable> eqnsPtr
355 const phaseModel& phase = this->phaseModels_[
phasei];
357 const PtrList<volScalarField>& Yi = phase.Y();
369 this->addDmdtYfs(dmdtfs_, eqns);
370 this->addDmidtYf(dmidtfs_, eqns);
376 template<
class BasePhaseSystem>
384 phaseTransferModelTable,
385 phaseTransferModels_,
386 phaseTransferModelIter
389 const phasePair& pair = this->phasePairs_[phaseTransferModelIter.key()];
391 if (phaseTransferModelIter()->
mixture())
393 *dmdtfs_[pair] =
Zero;
396 const hashedWordList species(phaseTransferModelIter()->species());
400 const word& specie = *specieIter;
402 *(*dmidtfs_[pair])[specie] =
Zero;
409 phaseTransferModelTable,
410 phaseTransferModels_,
411 phaseTransferModelIter
414 const phasePair& pair = this->phasePairs_[phaseTransferModelIter.key()];
416 if (phaseTransferModelIter()->
mixture())
418 *dmdtfs_[pair] += phaseTransferModelIter()->dmdtf();
421 const HashPtrTable<volScalarField> dmidtf
423 phaseTransferModelIter()->dmidtf()
428 *(*dmidtfs_[pair])[dmidtfIter.key()] += *dmidtfIter();
434 template<
class BasePhaseSystem>
void addDmidtHef(const phaseSystem::dmidtfTable &dmidtfs, phaseSystem::heatTransferTable &eqns) const
Add energy transfer terms which result from specie mass transfers.
fvMatrix< scalar > fvScalarMatrix
#define forAll(list, i)
Loop across all elements in list.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
PhaseTransferPhaseSystem(const fvMesh &)
Construct from fvMesh.
HashPtrTable< fvVectorMatrix > momentumTransferTable
virtual autoPtr< phaseSystem::heatTransferTable > heatTransfer() const
Return the heat transfer matrices.
#define forAllIter(Container, container, iter)
Iterate across all elements in the container object of type.
virtual autoPtr< phaseSystem::momentumTransferTable > momentumTransferf()
Return the momentum transfer matrices for the face-based algorithm.
static int compare(const Pair< word > &a, const Pair< word > &b)
Compare Pairs.
Class which models non-thermally-coupled or weakly thermally coupled mass transfers.
HashPtrTable< fvScalarMatrix > heatTransferTable
HashPtrTable< fvScalarMatrix > specieTransferTable
dimensionedScalar posPart(const dimensionedScalar &ds)
void addDmdtHefs(const phaseSystem::dmdtfTable &dmdtfs, phaseSystem::heatTransferTable &eqns) const
Add energy transfer terms which result from bulk mass transfers.
virtual void correct()
Correct the mass transfer rates.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
virtual bool read()
Read base phaseProperties dictionary.
static word groupName(Name name, const word &group)
HashPtrTable< volScalarField, phasePairKey, phasePairKey::hash > dmdtfTable
virtual tmp< volScalarField > dmdtf(const phasePairKey &key) const
Return the mass transfer rate for an interface.
void addDmdtYfs(const phaseSystem::dmdtfTable &dmdtfs, phaseSystem::specieTransferTable &eqns) const
Add specie transfer terms which result from bulk mass transfers.
forAllConstIter(PtrDictionary< phaseModel >, mixture.phases(), phase)
Info<< "Predicted p max-min : "<< max(p).value()<< " "<< min(p).value()<< endl;rho==max(rho0+psi *p, rhoMin);# 1 "/home/ubuntu/OpenFOAM-8/applications/solvers/multiphase/cavitatingFoam/alphavPsi.H" 1{ alphav=max(min((rho - rholSat)/(rhovSat - rholSat), scalar(1)), scalar(0));alphal=1.0 - alphav;Info<< "max-min alphav: "<< max(alphav).value()<< " "<< min(alphav).value()<< endl;psiModel-> correct()
virtual PtrList< volScalarField > dmdts() const
Return the mass transfer rates for each phase.
word name(const complex &)
Return a string representation of a complex.
phaseSystem::momentumTransferTable & momentumTransfer(momentumTransferPtr())
const dimensionSet dimDensity
virtual autoPtr< phaseSystem::momentumTransferTable > momentumTransfer()
Return the momentum transfer matrices for the cell-based algorithm.
virtual autoPtr< phaseSystem::specieTransferTable > specieTransfer() const
Return the specie transfer matrices.
void addDmidtYf(const phaseSystem::dmidtfTable &dmidtfs, phaseSystem::specieTransferTable &eqns) const
Add specie transfer terms which result from specie mass transfers.
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
const dimensionSet dimMass(1, 0, 0, 0, 0, 0, 0)
A class for managing temporary objects.
phaseChangeTwoPhaseMixture & mixture
Calculate the matrix for implicit and explicit sources.
dimensionedScalar negPart(const dimensionedScalar &ds)
virtual ~PhaseTransferPhaseSystem()
Destructor.