46 namespace diameterModels
56 Foam::diameterModels::populationBalanceModel::coeffDict()
const
63 Foam::diameterModels::populationBalanceModel::precomputeCoalescenceAndBreakup()
65 forAll(coalescenceModels_, model)
67 coalescenceModels_[model].precompute();
70 forAll(breakupModels_, model)
72 breakupModels_[model].precompute();
74 breakupModels_[model].dsdPtr()->precompute();
77 forAll(binaryBreakupModels_, model)
79 binaryBreakupModels_[model].precompute();
84 void Foam::diameterModels::populationBalanceModel::birthByCoalescence
90 const sizeGroup& fj = sizeGroups()[j];
91 const sizeGroup& fk = sizeGroups()[
k];
95 for (
label i = j; i < sizeGroups().size(); i++)
99 if (Eta.value() == 0)
continue;
101 const sizeGroup& fi = sizeGroups()[i];
103 tmp<volScalarField::Internal> tSui;
107 0.5*fi.x()/(fj.x()*fk.x())*Eta
108 *coalescenceRate_()*fj*fj.phase()*fk*fk.phase();
113 fi.x()/(fj.x()*fk.x())*Eta
114 *coalescenceRate_()*fj*fj.phase()*fk*fk.phase();
120 const phaseInterface interfaceij(fi.phase(), fj.phase());
122 if (dmdtfs_.found(interfaceij))
124 const scalar dmdtSign =
125 interfaceij.index(fi.phase()) == 0 ? +1 : -1;
127 *dmdtfs_[interfaceij] += dmdtSign*fj.x()/v*Sui*fj.phase().rho();
130 const phaseInterface interfaceik(fi.phase(), fk.phase());
132 if (dmdtfs_.found(interfaceik))
134 const scalar dmdtSign =
135 interfaceik.index(fi.phase()) == 0 ? +1 : -1;
137 *dmdtfs_[interfaceik] += dmdtSign*fk.x()/v*Sui*fk.phase().rho();
140 sizeGroups_[i].shape().addCoalescence(Sui, fj, fk);
145 void Foam::diameterModels::populationBalanceModel::deathByCoalescence
151 const sizeGroup& fi = sizeGroups()[i];
152 const sizeGroup& fj = sizeGroups()[j];
154 Sp_[i] -= coalescenceRate_()*fi.phase()*fj*fj.phase()/fj.x();
158 Sp_[j] -= coalescenceRate_()*fj.phase()*fi*fi.phase()/fi.x();
163 void Foam::diameterModels::populationBalanceModel::birthByBreakup
169 const sizeGroup& fk = sizeGroups()[
k];
171 for (
label i = 0; i <=
k; i++)
173 const sizeGroup& fi = sizeGroups()[i];
175 tmp<volScalarField::Internal> tSui =
176 fi.x()*breakupModels_[model].dsdPtr()().nik(i,
k)/fk.x()
177 *breakupRate_()*fk*fk.phase();
182 const phaseInterface interface(fi.phase(), fk.phase());
184 if (dmdtfs_.found(interface))
186 const scalar dmdtSign =
187 interface.index(fi.phase()) == 0 ? +1 : -1;
189 *dmdtfs_[interface] += dmdtSign*Sui*fk.phase().rho();
192 sizeGroups_[i].shape().addBreakup(Sui, fk);
197 void Foam::diameterModels::populationBalanceModel::deathByBreakup(
const label i)
199 Sp_[i] -= breakupRate_()*sizeGroups()[i].phase();
203 void Foam::diameterModels::populationBalanceModel::birthByBinaryBreakup
209 const sizeGroup& fi = sizeGroups()[i];
210 const sizeGroup& fj = sizeGroups()[j];
215 tmp<volScalarField::Internal> tSui = fi.x()*delta_[i][j]/fj.x()*
Su;
220 sizeGroups_[i].shape().addBreakup(Sui, fj);
222 const phaseInterface interfaceij(fi.phase(), fj.phase());
224 if (dmdtfs_.found(interfaceij))
226 const scalar dmdtSign =
227 interfaceij.index(fi.phase()) == 0 ? +1 : -1;
229 *dmdtfs_[interfaceij] += dmdtSign*Sui*fj.phase().rho();
239 if (Eta.value() == 0)
continue;
241 const sizeGroup& fk = sizeGroups()[
k];
243 tmp<volScalarField::Internal> tSuk = fk.x()*delta_[i][j]*Eta/fj.x()*
Su;
248 const phaseInterface interfacekj(fk.phase(), fj.phase());
250 if (dmdtfs_.found(interfacekj))
252 const scalar dmdtSign =
253 interfacekj.index(fk.phase()) == 0 ? +1 : -1;
255 *dmdtfs_[interfacekj] += dmdtSign*Suk*fj.phase().rho();
258 sizeGroups_[
k].shape().addBreakup(Suk, fj);
263 void Foam::diameterModels::populationBalanceModel::deathByBinaryBreakup
269 Sp_[i] -= sizeGroups()[i].phase()*binaryBreakupRate_()*delta_[j][i];
274 Foam::diameterModels::populationBalanceModel::computeCoalescenceAndBreakup()
278 sizeGroups_[i].shape().reset();
292 forAll(coalescencePairs_, coalescencePairi)
294 label i = coalescencePairs_[coalescencePairi].first();
295 label j = coalescencePairs_[coalescencePairi].second();
297 coalescenceRate_() =
Zero;
299 forAll(coalescenceModels_, model)
301 coalescenceModels_[model].addToCoalescenceRate
309 birthByCoalescence(i, j);
311 deathByCoalescence(i, j);
316 forAll(breakupModels_, model)
318 breakupModels_[model].setBreakupRate(breakupRate_(), i);
320 birthByBreakup(i, model);
326 forAll(binaryBreakupPairs_, binaryBreakupPairi)
328 label i = binaryBreakupPairs_[binaryBreakupPairi].first();
329 label j = binaryBreakupPairs_[binaryBreakupPairi].second();
331 binaryBreakupRate_() =
Zero;
333 forAll(binaryBreakupModels_, model)
335 binaryBreakupModels_[model].addToBinaryBreakupRate
337 binaryBreakupRate_(),
343 birthByBinaryBreakup(j, i);
345 deathByBinaryBreakup(j, i);
350 void Foam::diameterModels::populationBalanceModel::precomputeExpansion()
352 forAllConstIter(HashTable<const velocityGroup*>, velocityGroupPtrs_, iter)
354 const velocityGroup& velGrp = *iter();
355 const phaseModel& phase = velGrp.phase();
370 Foam::diameterModels::populationBalanceModel::expansionSus
373 const UPtrList<const volScalarField>& flds
376 const sizeGroup& fi = sizeGroups()[i];
378 auto fiFld = [&](
const label deltai)
382 ? tmp<volScalarField::Internal>(sizeGroups()[i + deltai])
383 : sizeGroups()[i + deltai]()*flds[i + deltai]();
386 Pair<tmp<volScalarField::Internal>> tSus;
390 const sizeGroup& fiMinus1 = sizeGroups()[i - 1];
391 const phaseModel& phaseMinus1 = fiMinus1.phase();
394 posPart(expansionRates_[phaseMinus1.index()])
395 *fi.x()/(fi.x() - fiMinus1.x())
399 if (i != sizeGroups().size() - 1)
401 const sizeGroup& fiPlus1 = sizeGroups()[i + 1];
402 const phaseModel& phasePlus1 = fiPlus1.phase();
405 -
negPart(expansionRates_[phasePlus1.index()])
406 *fi.x()/(fiPlus1.x() - fi.x())
414 void Foam::diameterModels::populationBalanceModel::computeExpansion()
416 forAllIter(dmdtfTable, expansionDmdtfs_, dmdtfIter)
421 forAllConstIter(HashTable<const velocityGroup*>, velocityGroupPtrs_, iter)
423 const sizeGroup& fi0 = iter()->sizeGroups().last();
425 if (fi0.i() == sizeGroups().size() - 1)
continue;
427 const sizeGroup& fi1 = sizeGroups()[fi0.i() + 1];
429 Pair<tmp<volScalarField::Internal>> tSus0 = expansionSus(fi0.i());
430 Pair<tmp<volScalarField::Internal>> tSus1 = expansionSus(fi1.i());
432 const phaseInterface interface01(fi0.phase(), fi1.phase());
433 const scalar
sign = interface01.index(fi0.phase()) == 0 ? -1 : +1;
435 *expansionDmdtfs_[interface01] +=
438 - tSus0.second()*fi0.phase().rho()
439 + tSus1.first()*fi1.phase().rho()
445 void Foam::diameterModels::populationBalanceModel::precomputeModelSources()
452 Foam::diameterModels::populationBalanceModel::modelSourceRhoSus
455 const UPtrList<const volScalarField>& flds
458 const sizeGroup& fi = sizeGroups()[i];
459 const velocityGroup& velGrp = fi.group();
463 Pair<tmp<volScalarField::Internal>> tRhoSus;
467 const sizeGroup& fiPopBalEnd =
468 Sui == 0 ? sizeGroups().first() : sizeGroups().last();
470 if (fi.i() == fiPopBalEnd.i())
continue;
472 const sizeGroup& fiVelGrpEnd =
473 Sui == 0 ? velGrp.sizeGroups().first() : velGrp.sizeGroups().last();
475 if (fi.i() != fiVelGrpEnd.i())
continue;
477 const sizeGroup& fiOther = sizeGroups()[i + (Sui == 0 ? -1 : +1)];
479 forAll(fluid_.fvModels(), modeli)
481 if (!isA<fvSpecificSource>(fluid_.fvModels()[modeli]))
continue;
483 const fvSpecificSource& source =
484 refCast<const fvSpecificSource>(fluid_.fvModels()[modeli]);
488 source.addsSupToField
490 fiOther.phase().volScalarField::name()
492 && isA<growthFvScalarFieldSource>
494 fldi.sources()[source.name()]
498 const growthFvScalarFieldSource& growthSource =
499 refCast<const growthFvScalarFieldSource>
501 fldi.sources()[source.name()]
506 Pair<tmp<volScalarField::Internal>> sourceCoeffs =
507 growthSource.sourceCoeffs(source);
521 void Foam::diameterModels::populationBalanceModel::computeModelSources()
523 forAllIter(dmdtfTable, modelSourceDmdtfs_, dmdtfIter)
528 forAllConstIter(HashTable<const velocityGroup*>, velocityGroupPtrs_, iter)
530 const sizeGroup& fi0 = iter()->sizeGroups().last();
532 if (fi0.i() == sizeGroups().size() - 1)
continue;
534 const sizeGroup& fi1 = sizeGroups()[fi0.i() + 1];
536 Pair<tmp<volScalarField::Internal>> tRhoSus0 =
537 modelSourceRhoSus(fi0.i());
538 Pair<tmp<volScalarField::Internal>> tRhoSus1 =
539 modelSourceRhoSus(fi1.i());
541 const phaseInterface interface01(fi0.phase(), fi1.phase());
542 const scalar
sign = interface01.index(fi0.phase()) == 0 ? -1 : +1;
544 if (tRhoSus0.second().valid())
546 *modelSourceDmdtfs_[interface01] -=
sign*tRhoSus0.second();
549 if (tRhoSus1.first().valid())
551 *modelSourceDmdtfs_[interface01] -=
sign*tRhoSus1.first();
557 void Foam::diameterModels::populationBalanceModel::computeDilatationErrors()
559 PtrList<volScalarField::Internal> modelSourceDmdts(fluid_.phases().size());
562 const phaseInterface interface(fluid_, dmdtfIter.key());
564 addField(interface.phase1(),
"dmdt", *dmdtfIter(), modelSourceDmdts);
565 addField(interface.phase2(),
"dmdt", - *dmdtfIter(), modelSourceDmdts);
568 forAllConstIter(HashTable<const velocityGroup*>, velocityGroupPtrs_, iter)
570 const velocityGroup& velGrp = *iter();
571 const phaseModel& phase = velGrp.phase();
575 dilatationErrors_.set
582 forAll(velGrp.sizeGroups(), i)
584 const sizeGroup& fi = velGrp.sizeGroups()[i];
586 dilatationErrors_[phase.index()] -=
587 Su_[fi.i()] + expansionSu(fi.i())
588 + (Sp_[fi.i()] + expansionSp(fi.i()))*fi;
591 if (modelSourceDmdts.set(phase.index()))
593 dilatationErrors_[phase.index()] -=
594 modelSourceDmdts[phase.index()]/
rho;
600 bool Foam::diameterModels::populationBalanceModel::updateSources()
602 const bool result = sourceUpdateCounter_ % sourceUpdateInterval() == 0;
604 ++ sourceUpdateCounter_;
611 Foam::diameterModels::populationBalanceModel::etaCoeffs0(
const label i)
const
617 if (i == 0)
return Pair<dimensionedScalar>(z, 1/xi);
621 return Pair<dimensionedScalar>(- x0/(xi - x0), 1/(xi - x0));
626 Foam::diameterModels::populationBalanceModel::etaCoeffs1(
const label i)
const
630 const label n = sizeGroups().size();
634 if (i ==
n - 1)
return Pair<dimensionedScalar>(z, 1/xi);
638 return Pair<dimensionedScalar>(x1/(x1 - xi), - 1/(x1 - xi));
643 Foam::diameterModels::populationBalanceModel::etaVCoeffs0(
const label i)
const
647 if (i == 0)
return Pair<dimensionedScalar>(o, zV);
652 return Pair<dimensionedScalar>(- x0/(xi - x0), 1/(xi - x0));
657 Foam::diameterModels::populationBalanceModel::etaVCoeffs1(
const label i)
const
661 const label n = sizeGroups().size();
663 if (i ==
n - 1)
return Pair<dimensionedScalar>(o, zV);
668 return Pair<dimensionedScalar>(x1/(x1 - xi), - 1/(x1 - xi));
690 mesh_(fluid_.
mesh()),
696 IOobject::groupName(
"alpha", coeffDict().lookup(
"continuousPhase"))
706 modelSourceDmdtfs_(),
707 expansionRates_(fluid_.phases().size()),
708 dilatationErrors_(fluid_.phases().size()),
711 coeffDict().lookup(
"coalescenceModels"),
718 coeffDict().lookup(
"breakupModels"),
724 coeffDict().lookup(
"binaryBreakupModels"),
727 binaryBreakupRate_(),
728 binaryBreakupPairs_(),
732 sourceUpdateCounter_(0)
739 <<
"The populationBalance " << name_
740 <<
" requires a minimum number of three sizeGroups to be specified."
762 if (binaryBreakupModels_.size() != 0)
773 if (!delta_[i].empty())
continue;
785 v_[i+1].value() - v_[i].value()
791 v_[i].value() < 0.5*fj.
x().
value()
792 && 0.5*fj.
x().
value() < v_[i+1].value()
795 delta_[i][j] =
mag(0.5*fj.
x() - v_[i]);
797 else if (0.5*fj.
x().
value() <= v_[i].value())
799 delta_[i][j].value() = 0;
864 if (&velGrp1 != &velGrp2 && !dmdtfs_.
found(interface))
929 if (coalescenceModels_.size() != 0)
948 for (
label j = 0; j <= i; j++)
950 coalescencePairs_.append(
labelPair(i, j));
955 if (breakupModels_.size() != 0)
973 if (binaryBreakupModels_.size() != 0)
975 binaryBreakupRate_.set
999 while (delta_[j][i].value() != 0)
1001 binaryBreakupPairs_.append(
labelPair(i, j));
1133 <<
"The volumetric allocation coefficient should be evaluated "
1134 <<
"with a volumetrically sampled distribution (i.e., sampleQ "
1135 <<
"should equal 3)"
1166 const bool isFirst = is.
first() == 0;
1167 const bool isLast = is.
second() == sizeGroups().size() - 1;
1173 ? d.
min()*(1 - small)
1174 : sizeGroups()[is.
first() - 1].dSph().value(),
1175 sizeGroups()[is.
first()].dSph().value(),
1176 sizeGroups()[is.
second()].dSph().value(),
1178 ? d.
max()*(1 + small)
1179 : sizeGroups()[is.
second() + 1].dSph().value()
1210 etaVCoeffs0.
first().value()
1211 *(integralPDFs[1] - integralPDFs[0])
1212 + etaVCoeffs0.
second().value()
1213 *(integralPDFByVs[1] - integralPDFByVs[0])
1214 + integralPDFs[2] - integralPDFs[1]
1215 + etaVCoeffs1.
first().value()
1216 *(integralPDFs[3] - integralPDFs[2])
1217 + etaVCoeffs1.
second().value()
1218 *(integralPDFByVs[3] - integralPDFByVs[2]);
1246 return max(sgIntegralPDFetaV, sgSmall)/
max(vgIntegralPDFetaV, vgSmall);
1266 continuousPhase_.name()
1308 const sizeGroup& fiMinus1 = sizeGroups()[i - 1];
1312 *fi.
x()/(fi.
x() - fiMinus1.
x());
1315 if (i != sizeGroups().size() - 1)
1317 const sizeGroup& fiPlus1 = sizeGroups()[i + 1];
1321 *fi.
x()/(fiPlus1.
x() - fi.
x());
1350 tRhoSus.
first().valid() && tRhoSus.
second().valid()
1360 if (!solveOnFinalIterOnly() || fluid_.pimple().finalIter())
1363 solverDict().lookupBackwardsCompatible<
label>
1365 {
"nCorrectors",
"nCorr"}
1368 const scalar tolerance = solverDict().lookup<scalar>(
"tolerance");
1370 const bool updateSrc = updateSources();
1372 if (nCorr > 0 && updateSrc)
1374 precomputeCoalescenceAndBreakup();
1376 precomputeExpansion();
1377 precomputeModelSources();
1380 scalar maxInitialResidual = 1;
1381 while (++iCorr <= nCorr && maxInitialResidual > tolerance)
1383 Info<<
"populationBalance " << this->
name()
1384 <<
": Iteration " << iCorr <<
endl;
1388 computeCoalescenceAndBreakup();
1391 computeModelSources();
1393 computeDilatationErrors();
1395 maxInitialResidual = 0;
1408 +
fvm::Sp(-(1 - small)*dilatationErrors_[phase.
index()], fi)
1412 + expansionSu(i) +
fvm::Sp(expansionSp(i), fi)
1420 /
mesh().time().deltaT(),
1428 fluid_.fvConstraints().constrain(fiEqn);
1430 maxInitialResidual =
max
1432 fiEqn.
solve().initialResidual(),
1436 fluid_.fvConstraints().constrain(fi);
1442 sizeGroups().
first().phase()*sizeGroups().
first()
1447 sizeGroups().last().phase()*sizeGroups().last()
1450 Info<< this->
name() <<
" sizeGroup phase fraction first, last = "
1460 if (velocityGroupPtrs_.size() <= 1)
return;
1463 if (alphas_.empty())
1472 fluid_.time().name(),
1522 fluid_.time().name(),
1546 fluid_.time().name(),
#define forAll(list, i)
Loop across all elements in list.
#define forAllIter(Container, container, iter)
Iterate across all elements in the container object of type.
#define forAllConstIter(Container, container, iter)
Iterate across all elements in the container object of type.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
dimensioned< Type > weightedAverage(const DimensionedField< scalar, GeoMesh, PrimitiveField2 > &) const
Calculate and return weighted average.
static tmp< DimensionedField< Type, GeoMesh, PrimitiveField > > New(const word &name, const Mesh &mesh, const dimensionSet &, const PrimitiveField< Type > &)
Return a temporary field constructed from name, mesh,.
Generic GeometricField class.
DimensionedField< Type, GeoMesh, PrimitiveField > Internal
Type of the internal field from which this GeometricField is derived.
static tmp< GeometricField< Type, GeoMesh, PrimitiveField > > New(const word &name, const Internal &, const PtrList< Patch > &, const HashPtrTable< Source > &=HashPtrTable< Source >())
Return a temporary field constructed from name,.
An STL-conforming hash table.
bool insert(const Key &, const T &newElmt)
Insert a new hashedEntry.
bool found(const Key &) const
Return true if hashedEntry is found in table.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
const Time & time() const
Return time.
const word & name() const
Return name.
static word groupName(Name name, const word &group)
bool good() const
Return true if next operation might succeed.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
An ordered pair of two objects of type <Type> with first() and second() elements.
const Type & second() const
Return second.
const Type & first() const
Return first.
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
T & first()
Return reference to the first element of the list.
label size() const
Return the number of elements in the UPtrList.
bool empty() const
Return true if the UPtrList is empty (ie, size() is zero)
T & last()
Return reference to the last element of the list.
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
const phaseModel & phase() const
Return the phase.
Base class for binary breakup models that provide a breakup rate between a size class pair directly,...
Base class for breakup models which provide a total breakup rate and a separate daughter size distrib...
Base class for coalescence models.
Constant dispersed-phase particle diameter model.
static void retrieve(const populationBalanceModel &popBal, HashTable< const velocityGroup * > &velGroupPtrs, UPtrList< sizeGroup > &szGroupPtrs)
Retrieve the pointers.
Return a pointer to a new populationBalanceModel object created on.
Model for tracking the evolution of a dispersed phase size distribution due to coalescence (synonymou...
tmp< volScalarField::Internal > Sp(const label i) const
Return the implicit coalescence and breakup source term.
bool writeData(Ostream &) const
Dummy write for regIOobject.
void correct()
Correct derived quantities.
autoPtr< populationBalanceModel > clone() const
Return clone.
populationBalanceModel(const phaseSystem &fluid, const word &name)
Construct for a fluid.
const UPtrList< sizeGroup > & sizeGroups() const
Return the size groups belonging to this populationBalance.
tmp< volScalarField::Internal > modelSourceSu(const label i, const UPtrList< const volScalarField > &flds=UPtrList< const volScalarField >()) const
Return the explicit model source source term.
tmp< volScalarField::Internal > expansionSp(const label i) const
Return the implicit expansion source term.
dimensionedScalar eta(const label i, const dimensionedScalar &v) const
Return the number allocation coefficient for a single volume.
tmp< volScalarField::Internal > expansionSu(const label i, const UPtrList< const volScalarField > &flds=UPtrList< const volScalarField >()) const
Return the explicit expansion source term.
dimensionedScalar etaV(const label i, const dimensionedScalar &v) const
Return the volume allocation coefficient for a single volume.
const tmp< volScalarField > sigmaWithContinuousPhase(const phaseModel &dispersedPhase) const
Return the surface tension coefficient between a given dispersed.
const fvMesh & mesh() const
Return reference to the mesh.
const phaseCompressibleMomentumTransportModel & continuousTurbulence() const
Return reference to momentumTransport model of the continuous phase.
virtual ~populationBalanceModel()
Destructor.
void solve()
Solve the population balance equation.
Single size class fraction field representing a fixed particle volume as defined by the user through ...
const dimensionedScalar & x() const
Return representative volume of the sizeGroup.
const velocityGroup & group() const
Return const-reference to the velocityGroup.
const phaseModel & phase() const
Return const-reference to the phase.
Computes the Sauter mean diameter based on a user specified size distribution, defined in terms of si...
const PtrList< sizeGroup > & sizeGroups() const
Return sizeGroups belonging to this velocityGroup.
A list of keywords followed by any number of values (e.g. words and numbers) or sub-dictionaries.
const dictionary & subDict(const word &) const
Find and return a sub-dictionary.
const Type & value() const
Return const reference to value.
const word & name() const
Return const reference to name.
Base class for statistical distributions.
virtual scalar max() const =0
Return the maximum value.
virtual tmp< scalarField > integralPDFxPow(const scalarField &x, const label e, const bool consistent=false) const =0
Return the integral of the PDF multiplied by an integer power of x.
label sampleQ() const
Access the sample size exponent.
virtual scalar min() const =0
Return the minimum value.
A special matrix type and solver, designed for finite volume solutions of scalar equations....
void relax(const scalar alpha)
Relax matrix (for steady-state solution).
SolverPerformance< Type > solve(const dictionary &)
Solve segregated or coupled returning the solution statistics.
const Time & time() const
Return the top-level database.
Templated abstract base class for multiphase compressible turbulence models.
Class to represent an interface between phases. Derivations can further specify the configuration of ...
virtual word name() const
Name.
tmp< volScalarField > sigma() const
Surface tension coefficient.
const dimensionedScalar & residualAlpha() const
Return the residual phase-fraction for given phase.
tmp< volScalarField > d() const
Return the Sauter-mean diameter.
label index() const
Return the index of the phase.
virtual tmp< volVectorField > U() const =0
Return the velocity.
virtual const volScalarField & rho() const =0
Return the density field.
virtual tmp< surfaceScalarField > alphaPhi() const =0
Return the volumetric flux of the phase.
Class to represent a system of phases.
regIOobject is an abstract class derived from IOobject to handle automatic object registration with t...
A class for managing temporary objects.
T & ref() const
Return non-const reference or generate a fatal error.
A class for handling words, derived from string.
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
#define notImplemented(functionName)
Issue a FatalErrorIn for a function not currently implemented.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Calculate the first temporal derivative.
Calculate the divergence of the given field.
Calculate the matrix for the first temporal derivative.
Calculate the matrix for the divergence of the given field and flux.
Calculate the matrix for implicit and explicit sources.
volScalarField alpha(IOobject("alpha", runTime.name(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
defineTypeNameAndDebug(constant, 0)
tmp< VolField< Type > > ddt(const dimensioned< Type > dt, const fvMesh &mesh)
tmp< VolField< Type > > Su(const VolField< Type > &su, const VolField< Type > &vf)
tmp< VolField< Type > > div(const SurfaceField< Type > &ssf)
tmp< fvMatrix< Type > > S(const Pair< tmp< volScalarField::Internal >> &, const VolField< Type > &)
tmp< fvMatrix< Type > > div(const surfaceScalarField &flux, const VolField< Type > &vf, const word &name)
tmp< fvMatrix< Type > > Sp(const volScalarField::Internal &, const VolField< Type > &)
tmp< fvMatrix< Type > > SuSp(const volScalarField::Internal &, const VolField< Type > &)
tmp< fvMatrix< Type > > ddt(const VolField< Type > &vf)
errorManipArg< error, int > exit(error &err, const int errNo=1)
Pair< label > labelPair
Label pair.
dimensionedScalar sign(const dimensionedScalar &ds)
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Ostream & endl(Ostream &os)
Add newline and flush stream.
void addField(const label phasei, const word &name, tmp< GeoField > field, PtrList< GeoField > &fieldList)
const dimensionSet dimless
const dimensionSet dimLength
void mag(LagrangianPatchField< scalar > &f, const LagrangianPatchField< Type > &f1)
labelList first(const UList< labelPair > &p)
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
const dimensionSet dimTime
dimensionedScalar negPart(const dimensionedScalar &ds)
const dimensionSet dimDensity
const dimensionSet dimVolume
VolField< scalar > volScalarField
word typedName(Name name)
Return the name of the object within the given type.
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
tmp< fvMatrix< Type > > correction(const fvMatrix< Type > &)
Return the correction form of the given matrix.
word name(const LagrangianState state)
Return a string representation of a Lagrangian state enumeration.
const dimensionSet dimVelocity
void inv(LagrangianPatchField< tensor > &f, const LagrangianPatchField< tensor > &f1)
dimensionedScalar posPart(const dimensionedScalar &ds)
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.