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-2026 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::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  fraciions
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  // Define the phases
122  phases (air water);
123 
124  // Settings for the air phase. This phase is in the form of bubbles, the
125  // diameters of which will be represented by a population balance model.
126  // So, set the diameter model to 'populationBalance' and set the name of
127  // the associated population balance to 'bubbles'. The name of the
128  // population balance is arbitrary; it just needs to be unique and
129  // descriptive as it will be referred to below. And if multiple phases
130  // share the same population balance then it needs to be the same for all
131  // those phases.
132  air
133  {
134  type pureIsothermalPhaseModel;
135 
136  diameterModel
137  {
138  type populationBalance;
139  populationBalance bubbles;
140  nGroups 5;
141  }
142 
143  residualAlpha 1e-6;
144  }
145 
146  // Settings for the water phase. This phase is continuous, so there is no
147  // diameter model.
148  water
149  {
150  type pureIsothermalPhaseModel;
151 
152  diameterModel none;
153 
154  residualAlpha 1e-6;
155  }
156 
157  // Set the blending to 'continuous' so that only sub-models relating to the
158  // air_dispersedIn_water configuration are used
159  blending
160  {
161  default
162  {
163  type continuous;
164  phase water;
165  }
166  }
167 
168  // Set the surface tension
169  surfaceTension
170  {
171  air_water
172  {
173  type constant;
174  sigma 0.07;
175  }
176  }
177 
178  // Settings for the bubbles population balance model
179  bubbles
180  {
181  // The continuous phase surrounding the bubbles is the water phase
182  continuousPhase water;
183 
184  // Give the groups uniformly spaced diameters between 1 [mm] and 5 [mm]
185  sphericalDiameters
186  {
187  type uniform;
188  min 1e-3;
189  max 5e-3;
190  }
191 
192  // Define the bubbles to be spherical
193  shapeModel spherical;
194 
195  // Choose coalescence and breakup sub-models ...
196 
197  coalescenceModel LehrMilliesMewes;
198 
199  breakupModel LehrMilliesMewes;
200  }
201  \endverbatim
202 
203 See also
204  Foam::populationBalanceSystem
205  Foam::diameterModels::populationBalance
206  Foam::populationBalance::coalescenceModel
207  Foam::populationBalance::breakupModel
208  Foam::populationBalance::daughterSizeDistributionModel
209  Foam::functionObjects::populationBalanceSizeDistribution
210  Foam::functionObjects::populationBalanceSetSizeDistribution
211  Foam::functionObjects::populationBalanceMoments
212 
213 SourceFiles
214  populationBalanceModel.C
215 
216 \*---------------------------------------------------------------------------*/
217 
218 #ifndef populationBalanceModel_H
219 #define populationBalanceModel_H
220 
222 #include "populationBalance.H"
223 #include "phaseSystem.H"
224 #include "HashPtrTable.H"
225 
226 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
227 
228 namespace Foam
229 {
230 
231 class distribution;
232 class phaseCompressibleMomentumTransportModel;
233 
234 namespace populationBalance
235 {
236  class shapeModel;
237  class coalescenceModel;
238  class breakupModel;
239 
240  namespace breakupModels
241  {
242  class daughterSizeDistribution;
243  class binary;
244  }
245 }
246 
247 /*---------------------------------------------------------------------------*\
248  Class populationBalanceModel Declaration
249 \*---------------------------------------------------------------------------*/
250 
252 :
253  public regIOobject
254 {
255 public:
256 
257  // Public Type Definitions
258 
259  //- Table of interfacial mass transfer rates
260  typedef
262  <
266  >
267  dmdtfTable;
268 
269 
270 private:
271 
272  // Private Data
273 
274  //- Reference to the phaseSystem
275  const phaseSystem& fluid_;
276 
277  //- Reference to the mesh
278  const fvMesh& mesh_;
279 
280  //- Name of the populationBalance
281  const word name_;
282 
283  //- Continuous phase
284  const phaseModel& continuousPhase_;
285 
286  //- The phase associated with each group
288 
289  //- A minimal list of the phases in this population balance
290  UPtrList<const phaseModel> uniquePhases_;
291 
292  //- The diameter model associated with each group
294 
295  //- A minimal list of the diameter models in this population balance
297 
298  //- The group fractions
300 
301  //- The representative spherical diameters of the groups
303 
304  //- The representative volumes of the groups
306 
307  //- Explicit coalescence and breakup source terms
309 
310  //- Implicit coalescence and breakup source terms
312 
313  //- Coalescence and breakup mass transfer rates
314  dmdtfTable dmdtfs_;
315 
316  //- Expansion mass transfer rates
317  dmdtfTable expansionDmdtfs_;
318 
319  //- Model source mass transfer rates
320  dmdtfTable modelSourceDmdtfs_;
321 
322  //- Rates of change of volume per unit volume
323  PtrList<volScalarField::Internal> expansionRates_;
324 
325  //- Dilatation errors
326  PtrList<volScalarField::Internal> dilatationErrors_;
327 
328  //- The shape model
330 
331  //- Coalescence model
333 
334  //- Coalescence relevant group pairs
335  List<labelPair> coalescencePairs_;
336 
337  //- Breakup models
339 
340  //- Daughter size distribution breakup model
342  daughterSizeDistributionBreakupModel_;
343 
344  //- Binary breakup model
345  populationBalance::breakupModels::binary* binaryBreakupModel_;
346 
347  //- Section width required for binary breakup formulation
348  PtrList<PtrList<dimensionedScalar>> binaryBreakupDeltas_;
349 
350  //- Binary breakup relevant group pairs
351  List<labelPair> binaryBreakupPairs_;
352 
353  //- Total void fraction
354  autoPtr<volScalarField> alphas_;
355 
356  //- Mean Sauter diameter
358 
359  //- Average velocity
361 
362  //- Counter for interval between source term updates
363  label sourceUpdateCounter_;
364 
365 
366  // Private Member Functions
367 
368  //- Get the coefficient dictionary
369  const dictionary& typeDict() const;
370 
371  //- Do pre-calculations relating to coalescence and breakup
372  void precomputeCoalescenceAndBreakup();
373 
374  //- Calculate particle creation by coalescence
375  void birthByCoalescence
376  (
377  const label j,
378  const label k,
380  );
381 
382  //- Calculate particle destruction by coalescence
383  void deathByCoalescence
384  (
385  const label i,
386  const label j,
388  );
389 
390  //- Calculate particle creation by daughter-size-distribution-breakup
391  void birthByDaughterSizeDistributionBreakup
392  (
393  const label k,
395  );
396 
397  //- Calculate particle destruction by daughter-size-distribution-breakup
398  void deathByDaughterSizeDistributionBreakup
399  (
400  const label i,
402  );
403 
404  //- Calculate particle creation by binary-breakup
405  void birthByBinaryBreakup
406  (
407  const label i,
408  const label j,
410  );
411 
412  //- Calculate particle destruction by binary-breakup
413  void deathByBinaryBreakup
414  (
415  const label j,
416  const label i,
418  );
419 
420  //- Do calculations relating to coalescence and breakup
421  void computeCoalescenceAndBreakup();
422 
423  //- Do pre-calculations relating to expansion
424  void precomputeExpansion();
425 
426  //- Return the expansion sources for a group fraction, or (if flds is
427  // valid) a secondary property
429  (
430  const label i,
432  ) const;
433 
434  //- Do calculations relating to expansion
435  void computeExpansion();
436 
437  //- Do pre-calculations relating to model sources
438  void precomputeModelSources();
439 
440  //- Return the model sources for a group fraction, or (if flds is
441  // valid) a secondary property
442  Pair<tmp<volScalarField::Internal>> modelSourceRhoSus
443  (
444  const label i,
446  ) const;
447 
448  //- Do calculations relating to model sources
449  void computeModelSources();
450 
451  //- Update the dilatation errors
452  void computeDilatationErrors();
453 
454  //- Return whether the sources should be updated on this iteration
455  bool updateSources();
456 
457  //- Return the interval at which the sources are updated
458  inline label sourceUpdateInterval() const;
459 
460  //- Return the coefficients of the lower half of the number allocation
461  // coefficient function. This spans the range from group i-1 to group
462  // i. The first coefficient is a constant, and the second is
463  // multiplied by v.
464  Pair<dimensionedScalar> etaCoeffs0(const label i) const;
465 
466  //- Return the coefficients of the lower half of the number allocation
467  // coefficient function. This spans the range from group i to group
468  // i+1. The first coefficient is a constant, and the second is
469  // multiplied by v.
470  Pair<dimensionedScalar> etaCoeffs1(const label i) const;
471 
472  //- Return the coefficients of the lower half of the volume allocation
473  // coefficient function. This spans the range from group i-1 to group
474  // i. The first coefficient is a constant, and the second is
475  // multiplied by 1/v.
476  Pair<dimensionedScalar> etaVCoeffs0(const label i) const;
477 
478  //- Return the coefficients of the lower half of the volume allocation
479  // coefficient function. This spans the range from group i to group
480  // i+1. The first coefficient is a constant, and the second is
481  // multiplied by 1/v.
482  Pair<dimensionedScalar> etaVCoeffs1(const label i) const;
483 
484 
485 public:
486 
487  //- Runtime type information
488  TypeName("populationBalanceModel");
489 
490 
491  // Static Member Functions
492 
493  //- Return IO for a group-associated field
494  static IOobject groupFieldIo
495  (
496  const word& name,
497  const label i,
498  const phaseModel& phase,
501  const bool registerObject = true
502  );
503 
504  //- Read and return a group-associated field
506  (
507  const word& name,
508  const label i,
509  const phaseModel& phase
510  );
511 
512 
513  // Constructors
514 
515  //- Construct for a fluid and with a given name
517 
518 
519  //- Destructor
520  virtual ~populationBalanceModel();
521 
522 
523  // Member Functions
524 
525  //- Return reference to the phaseSystem
526  inline const phaseSystem& fluid() const;
527 
528  //- Return reference to the mesh
529  inline const fvMesh& mesh() const;
530 
531  //- Return continuous phase
532  inline const phaseModel& continuousPhase() const;
533 
534  //- Return the number of groups in the population balance
535  inline label nGroups() const;
536 
537  //- Access the list of phases associated with each group
538  inline const UPtrList<const phaseModel>& phases() const;
539 
540  //- Access the minimal list of the phases in this population balance
541  inline const UPtrList<const phaseModel>& uniquePhases() const;
542 
543  //- Access the list of diameter models associated with each group
545  diameters() const;
546 
547  //- Access the minimal list of the diameter models in this population
548  // balance
550  uniqueDiameters() const;
551 
552  //- Access the group fractions
553  inline const PtrList<volScalarField>& fs() const;
554 
555  //- Modify the group fractions
556  inline PtrList<volScalarField>& fs();
557 
558  //- Access a group fraction
559  inline const volScalarField& f(const label i) const;
560 
561  //- Modify a group fraction
562  inline volScalarField& f(const label i);
563 
564  //- Access the representative spherical diameters of the groups
565  inline const PtrList<dimensionedScalar>& dSphs() const;
566 
567  //- Access the representative spherical diameters of a group
568  inline const dimensionedScalar& dSph(const label i) const;
569 
570  //- Access the representative volumes diameters of the groups
571  inline const PtrList<dimensionedScalar>& vs() const;
572 
573  //- Access the representative volumes diameters of a group
574  inline const dimensionedScalar& v(const label i) const;
575 
576  //- Access the shape model
577  const populationBalance::shapeModel& shape() const;
578 
579  //- Return the representative surface area of the group
580  tmp<volScalarField> a(const label i) const;
581 
582  //- Return the representative diameter of the group
583  tmp<volScalarField> d(const label i) const;
584 
585  //- Return reference to the coalescence and breakup interfacial mass
586  // transfer rates
587  inline const dmdtfTable& dmdtfs() const;
588 
589  //- Return reference to the expansion interfacial mass transfer rates
590  inline const dmdtfTable& expansionDmdtfs() const;
591 
592  //- Return reference to the model source interfacial mass transfer rates
593  inline const dmdtfTable& modelSourceDmdtfs() const;
594 
595  //- Return solution settings dictionary for this populationBalance
596  inline const dictionary& solverDict() const;
597 
598  //- Solve on final pimple iteration only
599  inline bool solveOnFinalIterOnly() const;
600 
601  //- Return coalescence relevant group pairs
602  inline const List<labelPair>& coalescencePairs() const;
603 
604  //- Return binary breakup relevant group pairs
605  inline const List<labelPair>& binaryBreakupPairs() const;
606 
607  //- Return total void of phases belonging to this populationBalance
608  inline const volScalarField& alphas() const;
609 
610  //- Return average velocity
611  inline tmp<volVectorField> U() const;
612 
613  //- Return the number allocation coefficient for a single volume
614  dimensionedScalar eta(const label i, const dimensionedScalar& v) const;
615 
616  //- Return the number allocation coefficient for a field of volumes
618  (
619  const label i,
621  ) const;
622 
623  //- Return the volume allocation coefficient for a single volume
624  dimensionedScalar etaV(const label i, const dimensionedScalar& v) const;
625 
626  //- Return the volume allocation coefficient for a field of volumes
628  (
629  const label i,
631  ) const;
632 
633  //- Return the volume allocation coefficient for a given distribution
634  // of diameters over a range of groups. The diameter distribution
635  // should be volumetrically sampled (i.e., sampleQ should equal 3).
636  dimensionedScalar etaV(const labelPair is, const distribution& d) const;
637 
638  //- Return the volume allocation coefficient for a given distribution
639  // of diameters. The diameter distribution should be volumetrically
640  // sampled (i.e., sampleQ should equal 3). The result is normalised
641  // with respect to the volume allocation coefficient for the phase.
642  dimensionedScalar etaV(const label i, const distribution& d) const;
643 
644  //- Return the surface tension coefficient between a given dispersed
645  // and the continuous phase
647  (
648  const phaseModel& dispersedPhase
649  ) const;
650 
651  //- Return the surface tension coefficient between a given group
652  // and the continuous phase
654 
655  //- Return reference to momentumTransport model of the continuous phase
657  continuousTurbulence() const;
658 
659  //- Return the implicit coalescence and breakup source term
660  tmp<volScalarField::Internal> Sp(const label i) const;
661 
662  //- Return the explicit expansion source term
664  (
665  const label i,
667  ) const;
668 
669  //- Return the implicit expansion source term
671 
672  //- Return the explicit model source source term
674  (
675  const label i,
677  ) const;
678 
679  //- Solve the population balance equation
680  void solve();
681 
682  //- Correct derived quantities
683  void correct();
684 
685  //- Dummy write for regIOobject
686  bool writeData(Ostream&) const;
687 };
688 
689 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
690 
691 } // End namespace Foam
692 
693 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
694 
695 #include "populationBalanceModelI.H"
696 
697 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
698 
699 #endif
700 
701 // ************************************************************************* //
label k
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:68
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:99
readOption
Enumeration defining the read options.
Definition: IOobject.H:117
bool & registerObject()
Register object created from this IOobject with registry if true.
Definition: IOobject.H:343
const word & name() const
Return name.
Definition: IOobject.H:307
writeOption
Enumeration defining the write options.
Definition: IOobject.H:126
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:67
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
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
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: autoPtr.H:51
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:98
Templated abstract base class for multiphase compressible momentum transport models.
Word-pair based class used for keying interface models in hash tables.
Class to represent a system of phases.
Definition: phaseSystem.H:74
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 volScalarField & f(const label i) const
Access a group fraction.
const UPtrList< const phaseModel > & uniquePhases() const
Access the minimal list of the phases in this population balance.
const dimensionedScalar & v(const label i) const
Access the representative volumes diameters of a group.
const dmdtfTable & dmdtfs() const
Return reference to the coalescence and breakup interfacial mass.
const PtrList< dimensionedScalar > & dSphs() const
Access the representative spherical diameters of the groups.
const phaseSystem & fluid() const
Return reference to the phaseSystem.
bool writeData(Ostream &) const
Dummy write for regIOobject.
void correct()
Correct derived quantities.
const List< labelPair > & coalescencePairs() const
Return coalescence relevant group pairs.
const List< labelPair > & binaryBreakupPairs() const
Return binary breakup relevant group pairs.
tmp< volVectorField > U() const
Return average velocity.
const dmdtfTable & expansionDmdtfs() const
Return reference to the expansion interfacial mass transfer rates.
bool solveOnFinalIterOnly() const
Solve on final pimple iteration only.
const dmdtfTable & modelSourceDmdtfs() const
Return reference to the model source interfacial mass transfer rates.
populationBalanceModel(const phaseSystem &fluid, const word &name)
Construct for a fluid and with a given name.
const UPtrList< const diameterModels::populationBalance > & diameters() const
Access the list of diameter models associated with each group.
const dimensionedScalar & dSph(const label i) const
Access the representative spherical diameters of a group.
tmp< volScalarField::Internal > expansionSp(const label i) const
Return the implicit expansion source term.
const phaseModel & continuousPhase() const
Return continuous phase.
tmp< volScalarField::Internal > expansionSu(const label i, const UPtrList< volScalarField > &flds=UPtrList< volScalarField >()) const
Return the explicit expansion source term.
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.
label nGroups() const
Return the number of groups in the population balance.
const volScalarField & alphas() const
Return total void of phases belonging to this populationBalance.
tmp< volScalarField::Internal > modelSourceSu(const label i, const UPtrList< volScalarField > &flds=UPtrList< volScalarField >()) const
Return the explicit model source source term.
static tmp< volScalarField > groupField(const word &name, const label i, const phaseModel &phase)
Read and return a group-associated field.
dimensionedScalar etaV(const label i, const dimensionedScalar &v) const
Return the volume allocation coefficient for a single volume.
const populationBalance::shapeModel & shape() const
Access the shape model.
static IOobject groupFieldIo(const word &name, const label i, const phaseModel &phase, const IOobject::readOption r=IOobject::NO_READ, const IOobject::writeOption w=IOobject::NO_WRITE, const bool registerObject=true)
Return IO for a group-associated field.
const UPtrList< const phaseModel > & phases() const
Access the list of phases associated with each group.
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 PtrList< volScalarField > & fs() const
Access the group fractions.
tmp< volScalarField > d(const label i) const
Return the representative diameter of the group.
const phaseCompressibleMomentumTransportModel & continuousTurbulence() const
Return reference to momentumTransport model of the continuous phase.
const UPtrList< const diameterModels::populationBalance > & uniqueDiameters() const
Access the minimal list of the diameter models in this population.
tmp< volScalarField > a(const label i) const
Return the representative surface area of the group.
virtual ~populationBalanceModel()
Destructor.
const PtrList< dimensionedScalar > & vs() const
Access the representative volumes diameters of the groups.
void solve()
Solve the population balance equation.
const dictionary & solverDict() const
Return solution settings dictionary for this populationBalance.
Base class for binary breakup models that provide a breakup rate between a size class pair directly,...
Definition: binary.H:60
Base class for breakup models which provide a total breakup rate and a separate daughter size distrib...
Base class for modelling the shape of the particles belonging to a size class through alternative dia...
Definition: shapeModel.H:59
regIOobject is an abstract class derived from IOobject to handle automatic object registration with t...
Definition: regIOobject.H:55
A class for managing temporary objects.
Definition: tmp.H:55
A class for handling words, derived from string.
Definition: word.H:63
const dimensionSet rate
Namespace for OpenFOAM.
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