populationBalanceModel.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2017-2025 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::diameterModels::populationBalanceModel
26 
27 Description
28  Model for tracking the evolution of a dispersed phase size distribution due
29  to coalescence (synonymous with coagulation, aggregation, agglomeration)
30  and breakup events as well as density or phase changes. Provides an
31  approximate solution of the population balance equation by means of a class
32  method. The underlying theory is described in the article of Lehnigk et al.
33  (2021).
34 
35  The size distribution, expressed through a volume-based number density
36  function, is discretised using the fixot pivot technique of Kumar and
37  Ramkrishna (1996). Thereby, the population balance equation is transformed
38  into a series of transport equations for the particle (bubble, droplet)
39  number concentrations in separate size classes that are coupled through
40  their source terms. The discretisation is based on representative particle
41  volumes, which are provided by the user through the corresponding sphere
42  equivalent diameters.
43 
44  Since the representative volumes are fixed a priori and the total dispersed
45  phase volume already available from solving the phase continuity equation,
46  the model only determines the evolution of the individual size class
47  fractions
48 
49  \f[
50  f_{i,\varphi} = \frac{\alpha_{i,\varphi}}{\alpha_{\varphi}}\,,
51  \f]
52 
53  where \f$\alpha_{i,\varphi}\f$ is the volume fraction of the size class and
54  \f$\alpha_{\varphi}\f$ the total phase fraction of phase \f$\varphi\f$.
55 
56  The source terms are formulated such that the first and second moment of
57  the distribution, i.e. the total particle number and volume, are conserved
58  irrespective of the discretisation of the size domain. The treatment of
59  particle breakup depends on the selected breakup submodels. For models
60  which provide a total breakup frequency and a separate daughter size
61  distribution function, the formulation provided Kumar and Ramkrishna (1996)
62  is utilised, which is applicable both for binary and multiple breakup
63  events. Currently, only field-independent daughter size distribution models
64  are allowed. In case of binary breakup models that provide the breakup
65  frequency between a size class pair directly, the formulation of Liao et
66  al. (2018) is adopted, which is computationally more efficient compared to
67  first extracting the field-dependent daughter size distribution and then
68  consuming it in the formulation of Kumar and Ramkrishna. The source terms
69  describing a drift of the size distribution through particle growth or
70  shrinkage are derived using upwind differencing, thus ensuring conservation
71  of the total particle number and volume. Note that due to the volume-based
72  implementation, both density as well as phase change lead to a drift of the
73  size distribution function. Further, users can specify multiple submodels
74  for each mechanism, whose contributions are added up.
75 
76  The model also allows to distribute the size classes over multiple
77  representative phases with identical physical properties that collectively
78  define the dispersed phase. Thereby, size class fields can be transported
79  with different velocity fields in order to account for the size dependency
80  of the particle motion. A possible mass transfer between representative
81  phases by means of coalescence, breakup and drift is taken into account.
82  Similarly, the spatial evolution of secondary particle properties such as
83  the particle surface area can be tracked.
84 
85  The key variable during a simulation is the Sauter diameter, which is
86  computed from the size class fractions of the corresponding phase. The
87  underlying size distribution can be extracted from the simulation using the
88  functionObject 'sizeDistribution'. Integral and mean properties of a size
89  distribution can be computed with the functionObject 'moments'.
90 
91  Verification cases for the population balance modelling functionality are
92  provided in test/multiphaseEuler/populationBalance.
93 
94  References:
95  \verbatim
96  Lehnigk, R., Bainbridge, W., Liao, Y., Lucas, D., Niemi, T.,
97  Peltola, J., & Schlegel, F. (2021).
98  An open‐source population balance modeling framework for the simulation
99  of polydisperse multiphase flows.
100  AIChE Journal, 68(3), e17539.
101  \endverbatim
102 
103  \verbatim
104  Coalescence and breakup term formulation:
105  Kumar, S., & Ramkrishna, D. (1996).
106  On the solution of population balance equations by discretization-I. A
107  fixed pivot technique.
108  Chemical Engineering Science, 51(8), 1311-1332.
109  \endverbatim
110 
111  \verbatim
112  Binary breakup term formulation:
113  Liao, Y., Oertel, R., Kriebitzsch, S., Schlegel, F., & Lucas, D. (2018).
114  A discrete population balance equation for binary breakage.
115  International Journal for Numerical Methods in Fluids, 87(4), 202-215.
116  \endverbatim
117 
118 Usage
119  Excerpt from an exemplary phaseProperties dictionary:
120  \verbatim
121  populationBalances (bubbles);
122 
123  air
124  {
125  type pureIsothermalPhaseModel;
126 
127  diameterModel velocityGroup;
128 
129  velocityGroupCoeffs
130  {
131  populationBalance bubbles;
132 
133  shapeModel spherical;
134 
135  sizeGroups
136  (
137  f1 { dSph 1e-3; }
138  f2 { dSph 2e-3; }
139  f3 { dSph 3e-3; }
140  f4 { dSph 4e-3; }
141  f5 { dSph 5e-3; }
142  ...
143  );
144  }
145 
146  residualAlpha 1e-6;
147  }
148 
149  ...
150 
151  populationBalanceCoeffs
152  {
153  bubbles
154  {
155  continuousPhase water;
156 
157  coalescenceModels
158  (
159  LehrMilliesMewes{}
160  );
161 
162  binaryBreakupModels
163  (
164  LehrMilliesMewes{}
165  );
166 
167  breakupModels
168  ();
169  }
170  }
171  \endverbatim
172 
173 See also
174  Foam::PopulationBalancePhaseSystem
175  Foam::diameterModels::sizeGroup
176  Foam::diameterModels::velocityGroup
177  Foam::diameterModels::SecondaryPropertyModel
178  Foam::diameterModels::coalescenceModel
179  Foam::diameterModels::breakupModel
180  Foam::diameterModels::daughterSizeDistributionModel
181  Foam::diameterModels::binaryBreakupModel
182  Foam::functionObjects::sizeDistribution
183  Foam::functionObjects::moments
184 
185 SourceFiles
186  populationBalanceModel.C
187 
188 \*---------------------------------------------------------------------------*/
189 
190 #ifndef populationBalanceModel_H
191 #define populationBalanceModel_H
192 
193 #include "sizeGroup.H"
194 #include "phaseSystem.H"
195 #include "HashPtrTable.H"
196 
197 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
198 
199 namespace Foam
200 {
201 
202 class distribution;
203 class phaseCompressibleMomentumTransportModel;
204 
205 namespace diameterModels
206 {
207 
208 class coalescenceModel;
209 class breakupModel;
210 class binaryBreakupModel;
211 
212 /*---------------------------------------------------------------------------*\
213  Class populationBalanceModel Declaration
214 \*---------------------------------------------------------------------------*/
215 
217 :
218  public regIOobject
219 {
220 public:
221 
222  // Public Type Definitions
223 
224  //- Table of interfacial mass transfer rates
225  typedef
227  <
231  >
232  dmdtfTable;
233 
234 
235  // Public Classes
236 
237  //- Class to accumulate population balance sub-class pointers
238  class groups
239  :
240  public regIOobject
241  {
242  // Private Data
243 
244  //- Velocity group pointers
245  HashTable<const velocityGroup*> velocityGroupPtrs_;
246 
247  //- Size group pointers
248  UPtrList<sizeGroup> sizeGroups_;
249 
250 
251  // Private Constructor
252 
253  //- Construct with a name on a database
254  groups(const word& popBalName, const objectRegistry& db)
255  :
257  (
258  IOobject
259  (
260  name(popBalName),
261  db.time().constant(),
262  db
263  )
264  )
265  {}
266 
267 
268  // Private Member Functions
269 
270  //- Return the name of the pointer cache
271  static word name(const word& popBalName)
272  {
273  return popBalName + ":groups";
274  }
275 
276 
277  public:
278 
279  // Constructors
280 
281  //- Lookup in the registry or construct new
282  static groups& New
283  (
284  const word& popBalName,
285  const objectRegistry& db
286  )
287  {
288  if (db.foundObject<groups>(name(popBalName)))
289  {
290  return db.lookupObjectRef<groups>(name(popBalName));
291  }
292 
293  groups* ps = new groups(popBalName, db);
294 
295  ps->store();
296 
297  return *ps;
298  }
299 
300 
301  // Member Functions
302 
303  //- Return the current number of size groups
305  {
306  return sizeGroups_.size();
307  }
308 
309  //- Insert a velocity group into the table
310  void insert(velocityGroup& group)
311  {
312  velocityGroupPtrs_.insert(group.phase().name(), &group);
313 
314  const label i0 = nSizeGroups();
315 
316  sizeGroups_.resize(i0 + group.sizeGroups().size());
317 
318  forAll(group.sizeGroups(), i)
319  {
320  sizeGroups_.set(i0 + i, &group.sizeGroups()[i]);
321 
322  if
323  (
324  i0 + i != 0
325  && sizeGroups_[i0 + i - 1].x().value()
326  >= sizeGroups_[i0 + i].x().value()
327  )
328  {
330  << "Size groups must be specified in order of "
331  << "their representative size"
332  << exit(FatalError);
333  }
334  }
335  }
336 
337  //- Retrieve the pointers
338  static void retrieve
339  (
340  const populationBalanceModel& popBal,
341  HashTable<const velocityGroup*>& velGroupPtrs,
342  UPtrList<sizeGroup>& szGroupPtrs
343  )
344  {
345  const objectRegistry& db = popBal.fluid().mesh();
346 
347  if (!db.foundObject<groups>(name(popBal.name())))
348  {
350  << "No velocity groups exist for population "
351  << "balance \"" << popBal.name() << "\""
352  << exit(FatalError);
353  }
354 
355  groups& ps =
356  db.lookupObjectRef<groups>(name(popBal.name()));
357 
358  velGroupPtrs.transfer(ps.velocityGroupPtrs_);
359  szGroupPtrs.transfer(ps.sizeGroups_);
360 
361  ps.checkOut();
362  }
363 
364  //- Dummy write for regIOobject
365  virtual bool writeData(Ostream&) const
366  {
367  return true;
368  }
369  };
370 
371 
372 private:
373 
374  // Private Data
375 
376  //- Reference to the phaseSystem
377  const phaseSystem& fluid_;
378 
379  //- Reference to the mesh
380  const fvMesh& mesh_;
381 
382  //- Name of the populationBalance
383  const word name_;
384 
385  //- Continuous phase
386  const phaseModel& continuousPhase_;
387 
388  //- Velocity groups belonging to this populationBalance
389  HashTable<const velocityGroup*> velocityGroupPtrs_;
390 
391  //- Size groups belonging to this populationBalance
392  UPtrList<sizeGroup> sizeGroups_;
393 
394  //- Size group boundaries
396 
397  //- Section width required for binary breakup formulation
399 
400  //- Explicit coalescence and breakup source terms
402 
403  //- Implicit coalescence and breakup source terms
405 
406  //- Coalescence and breakup mass transfer rates
407  dmdtfTable dmdtfs_;
408 
409  //- Expansion mass transfer rates
410  dmdtfTable expansionDmdtfs_;
411 
412  //- Model source mass transfer rates
413  dmdtfTable modelSourceDmdtfs_;
414 
415  //- Rates of change of volume per unit volume
416  PtrList<volScalarField::Internal> expansionRates_;
417 
418  //- Dilatation errors
419  PtrList<volScalarField::Internal> dilatationErrors_;
420 
421  //- Coalescence models
422  PtrList<coalescenceModel> coalescenceModels_;
423 
424  //- Coalescence rate
425  autoPtr<volScalarField::Internal> coalescenceRate_;
426 
427  //- Coalescence relevant size group pairs
428  List<labelPair> coalescencePairs_;
429 
430  //- Breakup models
431  PtrList<breakupModel> breakupModels_;
432 
433  //- Breakup rate
435 
436  //- Binary breakup models
437  PtrList<binaryBreakupModel> binaryBreakupModels_;
438 
439  //- Binary breakup rate
440  autoPtr<volScalarField::Internal> binaryBreakupRate_;
441 
442  //- Binary breakup relevant size group pairs
443  List<labelPair> binaryBreakupPairs_;
444 
445  //- Total void fraction
446  autoPtr<volScalarField> alphas_;
447 
448  //- Mean Sauter diameter
450 
451  //- Average velocity
453 
454  //- Counter for interval between source term updates
455  label sourceUpdateCounter_;
456 
457 
458  // Private Member Functions
459 
460  const dictionary& coeffDict() const;
461 
462  void precomputeCoalescenceAndBreakup();
463 
464  void birthByCoalescence(const label j, const label k);
465 
466  void deathByCoalescence(const label i, const label j);
467 
468  void birthByBreakup(const label k, const label model);
469 
470  void deathByBreakup(const label i);
471 
472  void birthByBinaryBreakup(const label i, const label j);
473 
474  void deathByBinaryBreakup(const label j, const label i);
475 
476  void computeCoalescenceAndBreakup();
477 
478  void precomputeExpansion();
479 
481  (
482  const label i,
483  const UPtrList<const volScalarField>& flds =
485  ) const;
486 
487  void computeExpansion();
488 
489  void precomputeModelSources();
490 
491  Pair<tmp<volScalarField::Internal>> modelSourceRhoSus
492  (
493  const label i,
494  const UPtrList<const volScalarField>& flds =
496  ) const;
497 
498  void computeModelSources();
499 
500  void computeDilatationErrors();
501 
502  //- Return whether the sources should be updated on this iteration
503  bool updateSources();
504 
505  //- Return the interval at which the sources are updated
506  inline label sourceUpdateInterval() const;
507 
508  //- Return the coefficients of the lower half of the number allocation
509  // coefficient function. This spans the range from group i-1 to group
510  // i. The first coefficient is a constant, and the second is
511  // multiplied by v.
512  Pair<dimensionedScalar> etaCoeffs0(const label i) const;
513 
514  //- Return the coefficients of the lower half of the number allocation
515  // coefficient function. This spans the range from group i to group
516  // i+1. The first coefficient is a constant, and the second is
517  // multiplied by v.
518  Pair<dimensionedScalar> etaCoeffs1(const label i) const;
519 
520  //- Return the coefficients of the lower half of the volume allocation
521  // coefficient function. This spans the range from group i-1 to group
522  // i. The first coefficient is a constant, and the second is
523  // multiplied by 1/v.
524  Pair<dimensionedScalar> etaVCoeffs0(const label i) const;
525 
526  //- Return the coefficients of the lower half of the volume allocation
527  // coefficient function. This spans the range from group i to group
528  // i+1. The first coefficient is a constant, and the second is
529  // multiplied by 1/v.
530  Pair<dimensionedScalar> etaVCoeffs1(const label i) const;
531 
532 
533 public:
534 
535  //- Runtime type information
536  TypeName("populationBalanceModel");
537 
538 
539  // Constructors
540 
541  //- Construct for a fluid
543 
544  //- Return clone
546 
547  //- Return a pointer to a new populationBalanceModel object created on
548  // freestore from Istream
549  class iNew
550  {
551  const phaseSystem& fluid_;
552 
553  public:
554 
555  iNew(const phaseSystem& fluid)
556  :
557  fluid_(fluid)
558  {}
559 
561  {
562  const word name(is);
563 
564  Info << "Setting up population balance: " << name << endl;
565 
567  (
568  new populationBalanceModel(fluid_, name)
569  );
570  }
571  };
572 
573 
574  //- Destructor
575  virtual ~populationBalanceModel();
576 
577 
578  // Member Functions
579 
580  //- Dummy write for regIOobject
581  bool writeData(Ostream&) const;
582 
583  //- Return reference to the phaseSystem
584  inline const phaseSystem& fluid() const;
585 
586  //- Return reference to the coalescence and breakup interfacial mass
587  // transfer rates
588  inline const dmdtfTable& dmdtfs() const;
589 
590  //- Return reference to the expansion interfacial mass transfer rates
591  inline const dmdtfTable& expansionDmdtfs() const;
592 
593  //- Return reference to the model source interfacial mass transfer rates
594  inline const dmdtfTable& modelSourceDmdtfs() const;
595 
596  //- Return reference to the mesh
597  inline const fvMesh& mesh() const;
598 
599  //- Return solution settings dictionary for this populationBalance
600  inline const dictionary& solverDict() const;
601 
602  //- Solve on final pimple iteration only
603  inline bool solveOnFinalIterOnly() const;
604 
605  //- Return continuous phase
606  inline const phaseModel& continuousPhase() const;
607 
608  //- Return the size groups belonging to this populationBalance
609  inline const UPtrList<sizeGroup>& sizeGroups() const;
610 
611  //- Access the size groups belonging to this populationBalance
613 
614  //- Return coalescence relevant size group pairs
615  inline const List<labelPair>& coalescencePairs() const;
616 
617  //- Return binary breakup relevant size group pairs
618  inline const List<labelPair>& binaryBreakupPairs() const;
619 
620  //- Return total void of phases belonging to this populationBalance
621  inline const volScalarField& alphas() const;
622 
623  //- Return average velocity
624  inline const volVectorField& U() const;
625 
626  //- Return the number allocation coefficient for a single volume
627  dimensionedScalar eta(const label i, const dimensionedScalar& v) const;
628 
629  //- Return the number allocation coefficient for a field of volumes
631  (
632  const label i,
633  const volScalarField::Internal& v
634  ) const;
635 
636  //- Return the volume allocation coefficient for a single volume
637  dimensionedScalar etaV(const label i, const dimensionedScalar& v) const;
638 
639  //- Return the volume allocation coefficient for a field of volumes
641  (
642  const label i,
643  const volScalarField::Internal& v
644  ) const;
645 
646  //- Return the volume allocation coefficient for a given distribution
647  // of diameters over a range of size-groups. The diameter distribution
648  // should be volumetrically sampled (i.e., sampleQ should equal 3).
649  dimensionedScalar etaV(const labelPair is, const distribution& d) const;
650 
651  //- Return the volume allocation coefficient for a given distribution
652  // of diameters. The diameter distribution should be volumetrically
653  // sampled (i.e., sampleQ should equal 3). The result is normalised
654  // with respect to the volume allocation coefficient for the phase.
655  dimensionedScalar etaV(const label i, const distribution& d) const;
656 
657  //- Return the surface tension coefficient between a given dispersed
658  // and the continuous phase
660  (
661  const phaseModel& dispersedPhase
662  ) const;
663 
664  //- Return reference to momentumTransport model of the continuous phase
666  continuousTurbulence() const;
667 
668  //- Return the implicit coalescence and breakup source term
669  tmp<volScalarField::Internal> Sp(const label i) const;
670 
671  //- Return the explicit expansion source term
673  (
674  const label i,
675  const UPtrList<const volScalarField>& flds =
677  ) const;
678 
679  //- Return the implicit expansion source term
681 
682  //- Return the explicit model source source term
684  (
685  const label i,
686  const UPtrList<const volScalarField>& flds =
688  ) const;
689 
690  //- Solve the population balance equation
691  void solve();
692 
693  //- Correct derived quantities
694  void correct();
695 };
696 
697 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
698 
699 } // End namespace diameterModels
700 } // End namespace Foam
701 
702 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
703 
704 #include "populationBalanceModelI.H"
705 
706 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
707 
708 #endif
709 
710 // ************************************************************************* //
label k
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:433
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Generic GeometricField class.
DimensionedField< Type, GeoMesh, PrimitiveField > Internal
Type of the internal field from which this GeometricField is derived.
A HashTable specialisation for hashing pointers.
Definition: HashPtrTable.H:67
An STL-conforming hash table.
Definition: HashTable.H:127
void transfer(HashTable< T, Key, Hash > &)
Transfer the contents of the argument table into this table.
Definition: HashTable.C:587
bool insert(const Key &, const T &newElmt)
Insert a new hashedEntry.
Definition: HashTableI.H:80
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:99
const objectRegistry & db() const
Return the local objectRegistry.
Definition: IOobject.C:309
word group() const
Return group (extension part of name)
Definition: IOobject.C:321
const word & name() const
Return name.
Definition: IOobject.H:307
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition: Istream.H:60
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: List.H:91
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:57
An ordered pair of two objects of type <Type> with first() and second() elements.
Definition: Pair.H:66
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
Definition: PtrList.H:75
static const word & constant()
Return constant name.
Definition: TimePaths.H:122
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
Definition: UPtrList.H:66
bool set(const label) const
Is element set.
Definition: UPtrListI.H:87
void transfer(UPtrList< T > &)
Transfer the contents of the argument UPtrList into this.
Definition: UPtrList.C:94
label size() const
Return the number of elements in the UPtrList.
Definition: UPtrListI.H:29
void resize(const label)
Reset size of UPtrList. This can only be used to set the size.
Definition: UPtrListI.H:71
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: autoPtr.H:51
Class to accumulate population balance sub-class pointers.
static void retrieve(const populationBalanceModel &popBal, HashTable< const velocityGroup * > &velGroupPtrs, UPtrList< sizeGroup > &szGroupPtrs)
Retrieve the pointers.
static groups & New(const word &popBalName, const objectRegistry &db)
Lookup in the registry or construct new.
label nSizeGroups()
Return the current number of size groups.
virtual bool writeData(Ostream &) const
Dummy write for regIOobject.
void insert(velocityGroup &group)
Insert a velocity group into the table.
Return a pointer to a new populationBalanceModel object created on.
autoPtr< populationBalanceModel > operator()(Istream &is) const
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.
const dmdtfTable & modelSourceDmdtfs() const
Return reference to the model source interfacial mass transfer rates.
const phaseSystem & fluid() const
Return reference to the phaseSystem.
bool writeData(Ostream &) const
Dummy write for regIOobject.
const List< labelPair > & coalescencePairs() const
Return coalescence relevant size group pairs.
autoPtr< populationBalanceModel > clone() const
Return clone.
const List< labelPair > & binaryBreakupPairs() const
Return binary breakup relevant size group pairs.
const volVectorField & U() const
Return average velocity.
bool solveOnFinalIterOnly() const
Solve on final pimple iteration only.
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.
const phaseModel & continuousPhase() const
Return continuous phase.
TypeName("populationBalanceModel")
Runtime type information.
dimensionedScalar eta(const label i, const dimensionedScalar &v) const
Return the number allocation coefficient for a single volume.
HashPtrTable< volScalarField::Internal, phaseInterfaceKey, phaseInterfaceKey::hash > dmdtfTable
Table of interfacial mass transfer rates.
const dmdtfTable & dmdtfs() const
Return reference to the coalescence and breakup interfacial mass.
tmp< volScalarField::Internal > expansionSu(const label i, const UPtrList< const volScalarField > &flds=UPtrList< const volScalarField >()) const
Return the explicit expansion source term.
const volScalarField & alphas() const
Return total void of phases belonging to this populationBalance.
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.
const dmdtfTable & expansionDmdtfs() const
Return reference to the expansion interfacial mass transfer rates.
void solve()
Solve the population balance equation.
const dictionary & solverDict() const
Return solution settings dictionary for this populationBalance.
Computes the Sauter mean diameter based on a user specified size distribution, defined in terms of si...
Definition: velocityGroup.H:87
A list of keywords followed by any number of values (e.g. words and numbers) or sub-dictionaries.
Definition: dictionary.H:162
Base class for statistical distributions.
Definition: distribution.H:76
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:96
Registry of regIOobjects.
const Time & time() const
Return time.
Type & lookupObjectRef(const word &name) const
Lookup and return the object reference of the given Type.
bool foundObject(const word &name) const
Is the named Type in registry.
Templated abstract base class for multiphase compressible turbulence models.
Word-pair based class used for keying interface models in hash tables.
Class to represent a system of phases.
Definition: phaseSystem.H:74
const fvMesh & mesh() const
Return the mesh.
Definition: phaseSystemI.H:91
regIOobject is an abstract class derived from IOobject to handle automatic object registration with t...
Definition: regIOobject.H:55
regIOobject(const IOobject &, const bool isTime=false)
Construct from IOobject. Optional flag for if IOobject is the.
Definition: regIOobject.C:41
bool checkOut()
Remove object from registry.
Definition: regIOobject.C:241
void store()
Transfer ownership of this object to its registry.
Definition: regIOobjectI.H:40
A class for managing temporary objects.
Definition: tmp.H:55
A class for handling words, derived from string.
Definition: word.H:62
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:334
Namespace for OpenFOAM.
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:124
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:258
messageStream Info
error FatalError