multiphaseEulerFoam: populationBalance: Updated and improved source code documentation

Patch contributed by Institute of Fluid Dynamics, Helmholtz-Zentrum
Dresden - Rossendorf (HZDR)
This commit is contained in:
Will Bainbridge
2022-03-11 09:13:03 +00:00
parent 9de4c78614
commit dfc28bb580
16 changed files with 222 additions and 138 deletions

View File

@ -26,8 +26,8 @@ Class
Description
Calculates and writes out integral (integer moments) or mean properties
(mean, variance, standard deviation) of a size distribution computed with
multiphaseEulerFoam. Requires solver post-processing.
(mean, variance, standard deviation) of a size distribution determined by a
population balance model. Requires solver post-processing.
The following function object specification for example returns the first
moment of the volume-based number density function which is equivalent to

View File

@ -25,8 +25,9 @@ Class
Foam::functionObjects::sizeDistribution
Description
Writes out the size distribution computed with multiphaseEulerFoam for the
entire domain or a volume region. Requires solver post-processing.
Writes out the size distribution determined by a population balance model,
either for the entire domain or a cell zone. Requires solver post-
processing.
The following function object specification for example returns the volume-
based number density function:
@ -63,6 +64,12 @@ Usage
setFormat | output format | yes |
\endtable
See also
Foam::diameterModels::populationBalanceModel
Foam::functionObjects::fvMeshFunctionObject
Foam::functionObjects::volRegion
Foam::functionObject
SourceFiles
sizeDistribution.C

View File

@ -25,7 +25,9 @@ Class
Foam::PopulationBalancePhaseSystem
Description
Class which provides population balance functionality.
Class which provides population balance functionality. Stores the mass
transfer rates resulting from coalescence, breakup or drift across
representative phases that collectively define a dispersed phase.
See also
Foam::diameterModels::populationBalanceModel

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2019-2020 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2019-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -25,10 +25,14 @@ Class
Foam::diameterModels::SecondaryPropertyModel
Description
Base class for modeling the transport of an additional secondary property in
between size groups by means of coalescence, breakup, drift and nucleation.
The default behavior is conserved transport of the property, which can be
overwritten in a derived class.
Base class for modeling evolution of secondary representative properties of
a size class. By default, transport between size classes due to
coalescence, breakup and drift conserve the property. This behaviour can be
overridden in a derived class.
See also
Foam::diameterModels::sizeGroup
Foam::diameterModels::populationBalanceModel
SourceFiles
SecondaryPropertyModel.C

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2019-2020 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2019-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -25,35 +25,37 @@ Class
Foam::diameterModels::shapeModels::fractal
Description
Class for modeling fractal shapes (e.g. of aerosol agglomerates) based on a
constant fractal dimension and an average but field-dependent surface area
to volume ratio kappa.
The effect of sintering (coalescence of primary particles) on the surface
area is taken into account by a separate source term.
Kappa is transported between the size groups as a secondary property by
means of coalescence (coagulation), breakup as well as drift.
By assuming a monodisperse size distribution of the primary particles in the
aggregate, the collisional diameter of a size group can then be computed by
Class for modelling the shape of particle aggregates using the concept of
fractal geometry. Returns a collisional diameter
\f[
d_{Coll_i} =
d_{c_i} =
\frac{6}{\kappa_i}
\left(
\frac{v_i \kappa_i^3}{36 \pi \alpha_c}
\right)^{1/D_f}\;.
\right)^{1/D_{f_i}}\,,
\f]
computed from a constant fractal dimension \f$D_{f_i}\f$ and a
field-dependent surface area to volume ratio \f$\kappa_i\f$, assuming that
the primary particles in an aggregate have the same size.
The effect of sintering, i.e. the coalescence of primary particles
resulting in a loss of surface area, is taken into account by a separate
source term in the transport equation for \f$\kappa_i\f$.
Usage
\table
Property | Description | Required | Default value
kappa | Field and BC value | yes |
kappa | Initial and boundary condition value\\
| yes |
Df | Fractal dimension | yes |
alphaC | Constant | yes |
alphaC | Scaling prefactor | yes |
\endtable
See also
Foam::diameterModels::shapeModel
SourceFiles
fractal.C

View File

@ -22,11 +22,14 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::sinteringModel
Foam::diameterModels::shapeModels::sinteringModel
Description
Abstract base class for modeling sintering of primary particles in fractal
agglomerates.
Abstract base class for modelling sintering of primary particles in fractal
aggregates.
See also
Foam::diameterModels::shapeModels::fractal
SourceFiles
sinteringModel.C

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2019-2021 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2019-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -22,12 +22,16 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::shapeModel
Foam::diameterModels::shapeModel
Description
Base class for modeling shape, i.e. a physical diameter of a sizeGroup.
This diameter may then be utilised for calculation of breakup, coalescence
or drift rates, depending on the model implementation.
Base class for modelling the shape of the particles belonging to a size
class through alternative diameters, e.g. a collisional diameter, which can
then be utilised in population balance submodels, e.g. for modelling
fractal aggregation.
See also
Foam::diameterModels::sizeGroup
SourceFiles
shapeModel.C

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2017-2020 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2017-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -25,39 +25,35 @@ Class
Foam::diameterModels::sizeGroup
Description
This class represents a single sizeGroup belonging to a velocityGroup.
The main property of a sizeGroup is its representative volume. The
corresponding volScalarField f'number'.'phaseName'.'populationBalanceName'
gives the volume fraction of the sizeGroup such that all sizeGroup fractions
over a velocityGroup must sum to unity. The field is either read from the
startTime directory if present or constructed from a reference field called
f.'phaseName'.'populationBalanceName' where the boundary condition types
must be specified. All field and boundary condition values are reset to
match the 'value' given in the sizeGroup subdictionary.
Single size class fraction field representing a fixed particle volume as
defined by the user through the corresponding sphere equivalent diameter.
The corresponding physical diameter that is representative for the class is
computed by a separate shapeModel, specified in the velocityGroupCoeffs
dictionary.
If present, the field is read from the start time directory, e.g. during
restart. Otherwise, it is constructed as a uniform field using the size
class fraction value provided by the user. In the latter case, the boundary
condition types are taken from the 'f.<phaseName>' field, which represents
the sum of all size group fractions of a phase. The user specified value is
also applied at fixed value boundary conditions and used as inlet value for
mixed boundary conditions.
An alternative diameter field is provided by the selected shape model, e.g.
a collisional diameter, which is then utilised in selected population
balance submodels, e.g. for modelling fractal aggregation.
Usage
\table
Property | Description | Required | Default value
dSph | Sphere equivalent diameter | yes | none
value | Field and BC value | yes | none
value | Initial and boundary condition value of\\
size class fraction | yes | none
shapeModel | Shape model providing an alternative diameter field\\
| yes | none
\endtable
Example
\verbatim
f1
{
ds 3e-3;
value 1.0;
}
\endverbatim
See also
Foam::diameterModels::velocityGroup
Foam::diameterModels::populationBalanceModel
Foam::diameterModels::velocityGroup
Foam::diameterModels::shapeModel
SourceFiles
sizeGroup.C

View File

@ -25,37 +25,29 @@ Class
Foam::diameterModels::velocityGroup
Description
This diameterModel is intended for use with a populationBalanceModel in
order to simulate polydispersed bubbly or particulate flows. It can hold any
number of sizeGroups from which the Sauter mean diameter is calculated. It
can also be used as a diameterModel without a populationBalance and would
then behave like a constantDiameter model. In this case, some arbitrary name
must be entered for the populationBalance keyword.
Computes the Sauter mean diameter based on a user specified size
distribution, defined in terms of size class fractions. Intended for use
with a population balance model to account for the evolution of a size
distribution by means of coalescence, breakup, drift and nucleation.
Usage
\table
Property | Description
populationBalance | Name of the corresponding populationBalance
sizeGroups | List of sizeGroups
\endtable
Example
Excerpt from an examplary phaseProperties dictionary:
\verbatim
diameterModel velocityGroup;
velocityGroupCoeffs
{
populationBalance bubbles;
shapeModel constant;
shapeModel spherical;
sizeGroups
(
f0{dSph 1.00e-3; value 0;}
f1{dSph 1.08e-3; value 0;}
f2{dSph 1.16e-3; value 0.25;}
f3{dSph 1.25e-3; value 0.5;}
f4{dSph 1.36e-3; value 0.25;}
f5{dSph 1.46e-3; value 0;}
f1 {dSph 1e-3; value 1.0;}
f2 {dSph 2e-3; value 0.0;}
f3 {dSph 3e-3; value 0.0;}
f4 {dSph 4e-3; value 0.0;}
f5 {dSph 5e-3; value 0.0;}
...
);
}

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2017-2020 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2017-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -25,9 +25,12 @@ Class
Foam::diameterModels::binaryBreakupModel
Description
Base class for binary breakup models which give the breakup rate between a
sizeGroup pair directly, without an explicit expression for the daughter
size distribution.
Base class for binary breakup models that provide a breakup rate between a
size class pair directly, i.e. without explicitly stating the daughter size
distribution function.
See also
Foam::diameterModels::populationBalanceModel
SourceFiles
binaryBreakupModel.C

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2017-2020 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2017-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -25,8 +25,11 @@ Class
Foam::diameterModels::breakupModel
Description
Base class for breakup models which give a total breakup rate and a separate
daughter size distribution function.
Base class for breakup models which provide a total breakup rate and a
separate daughter size distribution function.
See also
Foam::diameterModels::populationBalanceModel
SourceFiles
breakupModel.C

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2017-2020 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2017-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -27,6 +27,9 @@ Class
Description
Base class for coalescence models.
See also
Foam::diameterModels::populationBalanceModel
SourceFiles
coalescenceModel.C

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2017-2021 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2017-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -25,8 +25,12 @@ Class
Foam::diameterModels::daughterSizeDistributionModel
Description
Base class for daughter size distribution models. Calculates and stores
the contribution to a sizeGroup i due to breakup in a larger sizeGroup k.
Base class for daughter size distribution models. Currently only supports
field-independent formulations.
See also
Foam::diameterModels::breakupModel
Foam::diameterModels::populationBalanceModel
SourceFiles
daughterSizeDistributionModel.C

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2017-2020 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2017-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -27,6 +27,9 @@ Class
Description
Base class for drift models.
See also
Foam::diameterModels::populationBalanceModel
SourceFiles
driftModel.C

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2018-2021 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2018-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -27,6 +27,9 @@ Class
Description
Base class for nucleation models.
See also
Foam::diameterModels::populationBalanceModel
SourceFiles
nucleationModel.C

View File

@ -25,31 +25,81 @@ Class
Foam::diameterModels::populationBalanceModel
Description
Class that solves the univariate population balance equation by means of
a class method (also called sectional or discrete method). The internal
coordinate is set to the particle volume, so the equation is based on
a transport equation of the volume-based number density function. The
discretisation is done using the fixed pivot technique of Kumar and
Ramkrishna (1996). The source terms are written in a way that particle
number and mass are preserved. Coalescence (coagulation), breakup, drift
(growth and surface loss) as well as nucleation are supported.
For the discrete breakup term two recipes are available, depending on the
model choice. For models which state a total breakup rate and a separate
daughter size distribution function, the formulation of Kumar and Ramkrishna
(1996) is applied which is applicable for binary and multiple breakup
events. The second formulation is given by Liao et al. (2018). It is useful
for binary breakup models which give the breakup rate between a sizeGroup
pair directly, without an explicit expression for the daughter size
distribution. The drift term is implemented using a finite difference upwind
scheme. Although it is diffusive, it ensures a stable and
number-conservative solution.
Model for tracking the evolution of a dispersed phase size distribution due
to coalescence (synonymous with coagulation, aggregation, agglomeration)
and breakup events as well as density or phase changes. Provides an
approximate solution of the population balance equation by means of a class
method. The underlying theory is described in the article of Lehnigk et al.
(2021).
The implementation allows to split the population balance over multiple
velocity fields using the capability of multiphaseEulerFoam to solve
for n momentum equations. It is also possible to define multiple population
balances, e.g. bubbles and droplets simultaneously.
The size distribution, expressed through a volume-based number density
function, is discretised using the fixot pivot technique of Kumar and
Ramkrishna (1996). Thereby, the population balance equation is transformed
into a series of transport equations for the particle (bubble, droplet)
number concentrations in separate size classes that are coupled through
their source terms. The discretisation is based on representative particle
volumes, which are provided by the user through the corresponding sphere
equivalent diameters.
Since the representative volumes are fixed a priori and the total dispersed
phase volume already available from solving the phase continuity equation,
the model only determines the evolution of the individual size class
fractions
\f[
f_{i,\varphi} = \frac{\alpha_{i,\varphi}}{\alpha_{\varphi}}\,,
\f]
where \f$\alpha_{i,\varphi}\f$ is the volume fraction of the size class and
\f$\alpha_{\varphi}\f$ the total phase fraction of phase \f$\varphi\f$.
The source terms are formulated such that the first and second moment of
the distribution, i.e. the total particle number and volume, are conserved
irrespective of the discretisation of the size domain. The treatment of
particle breakup depends on the selected breakup submodels. For models
which provide a total breakup frequency and a separate daughter size
distribution function, the formulation provided Kumar and Ramkrishna (1996)
is utilised, which is applicable both for binary and multiple breakup
events. Currently, only field-independent daughter size distribution models
are allowed. In case of binary breakup models that provide the breakup
frequency between a size class pair directly, the formulation of Liao et
al. (2018) is adopted, which is computationally more efficient compared to
first extracting the field-dependent daughter size distribution and then
consuming it in the formulation of Kumar and Ramkrishna. The source terms
describing a drift of the size distribution through particle growth or
shrinkage are derived using upwind differencing, thus ensuring conservation
of the total particle number and volume. Note that due to the volume-based
implementation, both density as well as phase change lead to a drift of the
size distribution function. Further, users can specify multiple submodels
for each mechanism, whose contributions are added up.
The model also allows to distribute the size classes over multiple
representative phases with identical physical properties that collectively
define the dispersed phase. Thereby, size class fields can be transported
with different velocity fields in order to account for the size dependency
of the particle motion. A possible mass transfer between representative
phases by means of coalescence, breakup and drift is taken into account.
Similarly, the spatial evolution of secondary particle properties such as
the particle surface area can be tracked.
The key variable during a simulation is the Sauter diameter, which is
computed from the size class fractions of the corresponding phase. The
underlying size distribution can be extracted from the simulation using the
functionObject 'sizeDistribution'. Integral and mean properties of a size
distribution can be computed with the functionObject 'moments'.
Verification cases for the population balance modeling functionality are
provided in test/multiphase/multiphaseEulerFoam/populationBalance.
References:
\verbatim
Lehnigk, R., Bainbridge, W., Liao, Y., Lucas, D., Niemi, T.,
Peltola, J., & Schlegel, F. (2021).
An opensource population balance modeling framework for the simulation
of polydisperse multiphase flows.
AIChE Journal, 68(3), e17539.
\endverbatim
\verbatim
Coalescence and breakup term formulation:
Kumar, S., & Ramkrishna, D. (1996).
@ -66,32 +116,33 @@ Description
\endverbatim
Usage
Example excerpt from a phaseProperties dictionary.
Excerpt from an examplary phaseProperties dictionary:
\verbatim
type populationBalanceTwoPhaseSystem;
type populationBalanceMultiphaseSystem;
phases (air water);
...
populationBalances (bubbles);
air
{
type purePhaseModel;
type pureIsothermalPhaseModel;
diameterModel velocityGroup;
velocityGroupCoeffs
{
populationBalance bubbles;
shapeModel constant;
shapeModel spherical;
sizeGroups
(
f0{dSph 1.00e-3; value 0;}
f1{dSph 1.08e-3; value 0;}
f2{dSph 1.16e-3; value 0.25;}
f3{dSph 1.25e-3; value 0.5;}
f4{dSph 1.36e-3; value 0.25;}
f5{dSph 1.46e-3; value 0;}
f1 {dSph 1e-3; value 1.0;}
f2 {dSph 2e-3; value 0.0;}
f3 {dSph 3e-3; value 0.0;}
f4 {dSph 4e-3; value 0.0;}
f5 {dSph 5e-3; value 0.0;}
...
);
}
@ -99,6 +150,8 @@ Usage
residualAlpha 1e-6;
}
...
populationBalanceCoeffs
{
bubbles
@ -107,24 +160,16 @@ Usage
coalescenceModels
(
hydrodynamic
{
C 0.25;
}
LehrMilliesMewes{}
);
binaryBreakupModels
();
(
LehrMilliesMewes{}
);
breakupModels
(
exponential
{
C 0.5;
exponent 0.01;
daughterSizeDistributionModel uniform;
}
);
();
driftModels
(
@ -138,8 +183,18 @@ Usage
\endverbatim
See also
Foam::PopulationBalancePhaseSystem
Foam::diameterModels::sizeGroup
Foam::diameterModels::velocityGroup
Foam::diameterModels::SecondaryPropertyModel
Foam::diameterModels::coalescenceModel
Foam::diameterModels::breakupModel
Foam::diameterModels::daughterSizeDistributionModel
Foam::diameterModels::binaryBreakupModel
Foam::diameterModels::driftModel
Foam::diameterModels::nucleationModel
Foam::functionObjects::sizeDistribution
Foam::functionObjects::moments
SourceFiles
populationBalanceModel.C