You're reading an old version of this documentation. For the latest released version, please have a look at v5.0.3.
Population balance model¶
The PBM in CADET is implemented as part of the reaction module and can thus be used in any unit operation that includes reactions. Typical applications consider crystallization in a Continuous stirred tank reactor model or, to model continuous processes, in a Dispersive Plug-Flow Reactor (DPFR), which is modelled by a Lumped Rate Model Without Pores.
The particle size domain (internal coordinate) is discretized by the FV method, giving us a finite set of particle sizes under consideration \(\{x_1, \dots, x_{N_x}\}\).
Every particle size considered is treated as an individual component of the unit operation and the field NCOMP
of that unit operation in which the crystallization happens, must be specified accordingly as \(N_x + 2\).
The two additional components account for the solute \(c\) and solubility \(c_\text{eq}\).
That is, by setting the ``NCOMP`` field, you specify the number of FV cells for the internal coordinate.
Note that the first component must be solute \(c\) and the last component must be the solubility \(c_\text{eq}\).
Example code to configure the PBM can be found in CADET-Verification .
Group /input/model/unit_XXX¶
NCOMP
Number of components, which is given by two plus the number discrete particle sizes, which is given by the number of FV cells discretizing the internal coordinate
Type: int
Range: \(\geq 3\)
Length: 1
REACTION_MODEL
The crystallization code is implemented as a reaction module, which is why crystallization needs to be specified here
Type: String
Range: \(\{ CRYSTALLIZATION \}\)
Length: 1
Group /input/model/unit_XXX/reaction_bulk - REACTION_MODEL = CRYSTALLIZATION - UNIT_TYPE = CSTR¶
The following parameters need to be specified under Group /input/model/unit_XXX/reaction/reaction_bulk/ for CSTR units, and Group /input/model/unit_XXX/reaction/reaction/ for transport units like the LRM.
CRY_BINS
Coordinates of the cell faces, e.g. equidistant or logarithmic discretization of the internal coordinate \(x \in [x_c, x_\text{end}]\), including the end points.
Type: double
Range: \(\geq 1\)
Length: \(\mathrm{N_x} + 1\)
CRY_NUCLEI_MASS_DENSITY
Nulcei mass density
Type: double
Range: \(\geq 0\)
Length: 1
CRY_VOL_SHAPE_FACTOR
Volumetric shape factor of the particles
Type: double
Range: \(\geq 0\)
Length: 1
CRY_PRIMARY_NUCLEATION_RATE
Primary nucleation rate constant \(k_p\)
Type: double
Range: \(\geq 0\)
Length: 1
CRY_SECONDARY_NUCLEATION_RATE
Secondary nucleation rate \(k_b\)
Type: double
Range: \(\geq 0\)
Length: 1
CRY_GROWTH_RATE_CONSTANT
Growth rate constant \(k_g\)
Type: double
Range: \(\geq 0\)
Length: 1
CRY_GROWTH_CONSTANT
Growth constant \(\gamma\)
Type: double
Range: \(\geq 0\)
Length: 1
CRY_A
Defines constant \(a\) used to determine the growth rate
Type: double
Range: \(\geq 0\)
Length: 1
CRY_G
Defines constant \(g\) used to determine the growth rate
Type: double
Range: \(\geq 0\)
Length: 1
CRY_P
Defines constant \(p\) used to determine the growth rate
Type: double
Range: \(\geq 0\)
Length: 1
CRY_GROWTH_DISPERSION_RATE
Growth dispersion rate \(D_g\)
Type: double
Range: \(\geq 0\)
Length: 1
CRY_U
Defines constant \(u\) used to determine the primary nucleation
Type: double
Range: \(\geq 0\)
Length: 1
CRY_B
Defines constant \(b\) used to determine the secondary nucleation
Type: double
Range: \(\geq 0\)
Length: 1
CRY_K
Defines constant \(k\) used to determine the secondary nucleation
Type: double
Range: \(\geq 0\)
Length: 1
CRY_GROWTH_SCHEME_ORDER
Defines the growth flux FV reconstruction scheme. It can only be \(1\): upwind scheme; \(2\): HR Koren scheme; \(3\): WENO23 scheme; \(4\): WENO35 scheme. We recommend using the HR Koren scheme, which showed to be the most performant in our benchmarks.
Type: int
Range: \([1, \dots, 4]\)
Length: 1