How to set up a population balance model


The core settings for simulations involving a population balance model are contained in the populationBalanceProperties dictionary, located in the constant directory of the corresponding case.

Selecting type of population balance equation

In order to solve a univariate population balance, the entry

populationBalanceModel univariate;

must be present.

Selecting sub-models

Sub-models are activated in the sub-dictionary corresponding to the selected PBE. For a univariate PBE:

univariateCoeffs
{

  …

}

Selecting the aggregation kernel

The aggregation kernel is activated by adding the following instruction to the univariateCoeffs sub-dictionary

aggregation on;

The corresponding kernel is selected using the aggregationKernel sub-dictionary inside the univariateCoeffs sub-dictionary

aggregationKernel
{
    aggregationKernel turbulentBrownian;
}

Some kernels may require additional inputs such as coefficients or parameters, which need to be specified inside the aggregationKernel sub-dictionary. If absent, an error will be returned, or a default value will be used when appropriate. Please, refer to the code documentation for the specific kernels for details.

Selecting the breakup kernel

Similarly to aggregation, breakup is activated with the keyword:

breakup on;

The breakup kernel is selected in the breakupKernel subdictionary:

breakupKernel
{
    breakupKernel LuoSvendsen;

    Cb            Cb [ 0 0 0 0 0 0 0 ] 1.0e-3;
    epsilonExp    0.75;
    nuExp        -1.25;
    sizeExp        1.0;
}

The daughter distribution is specified in the corresponding sub-dictionary as follows

daughterDistribution
{
    daughterDistribution symmetricFragmentation;
}

Selecting the diffusion model

The diffusion model and the corresponding parameters are specified in the diffusionModel subdictionary:

diffusionModel
{
    diffusionModel turbulentDiffusion;
    gammaLam       gammaLam [ 0 2 -1 0 0 0 0 ] 1.0e-6;
    Sc             0.7;
}

Selecting the growth model

The growth model is activated with the keyword:

growth on;

The corresponding growth model is selected in the growthModel sub-dictionary:

growthModel
{
    growthModel constant;
    minAbscissa minAbscissa [0 -2 0 0 0 0 0] 0.0;
    maxAbscissa maxAbscissa [0 -2 0 0 0 0 0] 1.0;

    Cg          Cg [0 3 -1 0 0 0 0 ] 1.0;
}

Selecting the nucleation model

The nucleation model and the corresponding parameters are specified in the nucleationModel subdictionary:

nucleationModel
{
    nucleationModel none;
}

Integration of the sub-models

Sub-models are integrated using the realizable ODE solver implemented in general form into OpenQBMM. Settings for this solver are specified in the populationBalanceProperties dictionary, as explained here.

Examples and validation cases

An example case using the population balance model implementation in OpenQBMM can be found in the tutorial:

  • OpenQBMM/tutorials/pbeTransportFoam/TaylorCouette/

Validation cases are provided in:

  • OpenQBMM/validation/pbeTransportFoam/serraTaylorCouette/