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.
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}\):
otherwise:
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]).
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:
Two constraints are written to define the solid volume fraction at the feed and underflow point (no constraint is written for the overflow point).
The solids volume fraction at the overflow and underflow are bounded by the following inequality constraints:
Finally, the Stokes velocity is calculated using Stokes Law:
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
- 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.