Thickener (0D)#

The Thickener0D unit model is a predictive model for clarifiers and thickeners based on the following references:

[1] R. Burger, F. Concha, K.H. Karlsen, A. Narvaez, Numerical simulation of clarifier-thickener units treating ideal suspensions with a flux density function having two inflection points, Mathematical and Computer Modelling 44 (2006) 255–275, doi:10.1016/j.mcm.2005.11.008

[2] N.G. Barton, C.-H. Li, S.J. Spencer, Control of a surface of discontinuity in continuous thickeners, Journal of the Australian Mathematical Society Series B 33 (1992) 269–289

Degrees of Freedom#

The Thickener0D model has 6 degrees of freedom. Four of these are used to define the solids settling velocity and must be provided by the user.

  • the solid particle size particle_size,

  • the maximum achievable solid fraction solid_fraction_max,

  • two empirical coefficients for calculating the settling velocity v1, C.

Additionally, the user must provide 2 additional degrees of freedom regarding the design and/or operation of the thickener such as:

  • the cross-sectional area of the settler area,

  • the total volumetric flowrate or volume fraction of solids at the underflow, or

  • the total volumetric flowrate or volume fraction of solids at the overflow.

Model Structure#

The Thickener0D model contains two separators, solid_split and liquid_spit to separate the solid and liquid flows. The separations are assumed to be based on total flow with no change in composition, temperature or pressure. The Thickener0D model has 6 Ports (2 inlet and 4 outlet):

  • solid_inlet,

  • liquid_inlet,

  • solid_overflow,

  • liquid_overflow,

  • solid_underflow,

  • liquid_underflow.

Additional Constraints#

The Thickener0D model adds the following constraints to calculate the split fractions of the solid and liquid stream.

Total volumetric flowrates at the feed overflow and underflow are calculated as the sum of the volumetric flowrates of the solid and liquid streams at each location.

\[Q_{x,t} = Q_{solid,x,t} + Q_{liquid,x,t}\]

where \(Q\) represents volumetric flowrate and \(x\) represents the feed, overflow or underflow point.

The flux density at the overflow and underflow are calculated using the following constraint:

If \(0 \leqslant \epsilon_{x,t} \leqslant \epsilon_{max}\):

\[F_{x,t} = v_0 \times \epsilon_{x, t} \times(1- \frac{\epsilon_{x,t}}{\epsilon_{max}})^C + v_1 \times \epsilon_{x,t}^2 \times(\epsilon_{max}-\epsilon_{x,t})\]

otherwise:

\[F_{x,t} = 0\]

where \(F\) is the flux density, \(v_0\) is the Stokes velocity of a single particle, \(\epsilon\) is the solid volume fraction, \(\epsilon_{max}\) is the maximum attainable solid volume fraction, and \(v_1\) and \(C\) are empirical constants [2].

The solids fraction at the overflow and underflow is described using the following equation (derived from [1]).

\[Q_{feed, t} \times \epsilon_{feed,t} = A \times (F_{overflow,t} + F_{underflow,t}) - Q_{overflow,t} \times (\epsilon_{overflow,t} - \epsilon_{feed,t}) + Q_{underflow,t} \times (\epsilon_{underflow,t} - \epsilon_{feed,t})\]

where \(A\) is the cross-sectional area of the thickener (assumed constant in space and time).

Conservation of solids is enforced using the following constraint:

\[Q_{feed,t} \times \epsilon_{feed,t} = Q_{overflow,t} \times \epsilon_{overflow,t} + Q_{underflow,t} \times \epsilon_{underflow,t}\]

Two constraints are written to define the solid volume fraction at the feed and underflow point (no constraint is written for the overflow point).

\[Q_{solid,x,t} = \epsilon_{x,t} \times (Q_{solid,x,t} + Q_{liquid,x,t})\]

The solids volume fraction at the overflow and underflow are bounded by the following inequality constraints:

\[\epsilon_{t,x} \leqslant \epsilon_{max}\]

Finally, the Stokes velocity is calculated using Stokes Law:

\[18 \times v0_t \times \mu_{liquid,t} = (\rho_{solid,t} - \rho_{liquid,t}) \times g \times d_p^2\]

where \(\mu_{liquid}\) is the viscosity of the liquid phase, \(\rho_{liquid}\) and \(\rho_{solid}\) are the densities of the liquid and solid phases, \(g\) is the acceleration due to gravity and \(d_p\) is the solid particle diameter.

Variables#

The Thickener0D adds the following variables to those contained in the Separators.

Variable

Name

Index

Notes

\(A\)

area

None

Cross-sectional area of thickener

\(Q_{feed}\)

flow_vol_feed

time

Total volumetric flowrate at feed point

\(Q_{overflow}\)

flow_vol_overflow

time

Total volumetric flowrate at overflow point

\(Q_{underflow}\)

flow_vol_underflow

time

Total volumetric flowrate at underflow point

\(\epsilon_{feed}\)

solid_fraction_feed

time

Volumetric solids fraction at feed point

\(\epsilon_{overflow}\)

solid_fraction_overflow

time

Volumetric solids fraction at overflow point

\(\epsilon_{underflow}\)

solid_fraction_underflow

time

Volumetric solids fraction at underflow point

\(F_{overflow}\)

flux_density_overflow

time

Solids flux density at overflow point

\(F_{underflow}\)

flux_density_underflow

time

Solids flux density at underflow point

\(d_p\)

particle size

time

Solid particle size

\(v0\)

v0

time

Stokes velocity of isolated particle

\(v1\)

v1

None

Empirical parameter in settling velocity correlation

\(C\)

C

None

Empirical parameter in settling velocity correlation

math:epsilon_{max}

solid_fraction_max

None

Maximum achievable volumetric solids fraction

Thickener0D Class#

class idaes.models.unit_models.solid_liquid.thickener.Thickener0D(*args, **kwds)#
Parameters:
  • rule (function) – A rule function or None. Default rule calls build().

  • concrete (bool) – If True, make this a toplevel model. Default - False.

  • ctype (class) –

    Pyomo ctype of the block. Default - pyomo.environ.Block

    Config args

    dynamic

    Indicates whether this model will be dynamic or not, default = False. Flash units do not support dynamic behavior.

    has_holdup

    Indicates whether holdup terms should be constructed or not. default - False. Flash units do not have defined volume, thus this must be False.

    material_balance_type

    Indicates what type of mass balance should be constructed, default - MaterialBalanceType.useDefault. Valid values: { MaterialBalanceType.useDefault - refer to property package for default balance type **MaterialBalanceType.none - exclude material balances, MaterialBalanceType.componentPhase - use phase component balances, MaterialBalanceType.componentTotal - use total component balances, MaterialBalanceType.elementTotal - use total element balances, MaterialBalanceType.total - use total material balance.}

    momentum_balance_type

    Indicates what type of momentum balance should be constructed, default - MomentumBalanceType.pressureTotal. Valid values: { MomentumBalanceType.none - exclude momentum balances, MomentumBalanceType.pressureTotal - single pressure balance for material, MomentumBalanceType.pressurePhase - pressure balances for each phase, MomentumBalanceType.momentumTotal - single momentum balance for material, MomentumBalanceType.momentumPhase - momentum balances for each phase.}

    energy_split_basis

    Argument indicating basis to use for splitting energy this is not used for when ideal_separation == True. default - EnergySplittingType.equal_temperature. Valid values: { EnergySplittingType.equal_temperature - outlet temperatures equal inlet EnergySplittingType.equal_molar_enthalpy - outlet molar enthalpies equal inlet, EnergySplittingType.enthalpy_split - apply split fractions to enthalpy flows.}

    solid_property_package

    Property parameter object used to define solid phase property calculations, default - useDefault. Valid values: { useDefault - use default package from parent model or flowsheet, PropertyParameterObject - a PropertyParameterBlock object.}

    solid_property_package_args

    A ConfigBlock with arguments to be passed to a solid phase property block(s) and used when constructing these, default - None. Valid values: { see property package for documentation.}

    liquid_property_package

    Property parameter object used to define liquid phase property calculations, default - useDefault. Valid values: { useDefault - use default package from parent model or flowsheet, PropertyParameterObject - a PropertyParameterBlock object.}

    liquid_property_package_args

    A ConfigBlock with arguments to be passed to a liquid phase property block(s) and used when constructing these, default - None. Valid values: { see property package for documentation.}

  • initialize (dict) – ProcessBlockData config for individual elements. Keys are BlockData indexes and values are dictionaries with config arguments as keys.

  • idx_map (function) – Function to take the index of a BlockData element and return the index in the initialize dict from which to read arguments. This can be provided to override the default behavior of matching the BlockData index exactly to the index in initialize.

Returns:

(Thickener0D) New instance

Thickener0DData Class#

class idaes.models.unit_models.solid_liquid.thickener.Thickener0DData(component)[source]#

Thickener0D Unit Model Class

build()[source]#

Begin building model (pre-DAE transformation).

Parameters:

None

Returns:

None

default_initializer#

alias of BlockTriangularizationInitializer

initialize(**kwargs)[source]#

Initialization routine for Unit Model objects and associated components.

This method is intended for initializing IDAES unit models and any modeling components attached to them, such as costing blocks. This method iterates through all objects in blk._initialization_order and deactivates them, followed by calling blk.initialize_build. Finally, it iterates through all objects in blk._initialization_order in reverse and re-activates these whilst calling the associated initialize method.

Currently, parsing of arguments to the initialize method of attached blocks is hard coded - this will be addressed in a future PR. Currently, the method supports the following attached components:

  • UnitModelCostingBlocks

Parameters:

block (costing_args - dict arguments to be passed to costing) – initialize method

For other arguments, see the initialize_unit method.