Dewatering Unit

The main assumptions of the implemented model are as follows:

  1. Single liquid phase only

  2. Steady state only

  3. Has no volume

Introduction

Dewatering is a process commonly used in wastewater treatment plants to separate water from solids using centrifugal motion and/or vacuums. In doing so, the dewatering unit reduces the sludge volume, which improves system operation and mitigates costs related to storage, processing, disposal, etc. This implementation of the dewatering unit is based on the IDAES separator unit.

Degrees of Freedom

The degrees of freedom in a dewatering unit model are the inlet feed state variables:

  • temperature

  • pressure

  • component mass compositions

Model Structure

The dewatering unit model does not use ControlVolumes, and instead writes a set of material, energy and momentum balances to split the inlet stream into two outlet streams. Dewatering models have a single inlet Port (named inlet) and two outlet Ports (named overflow and underflow).

Sets

Description

Symbol

Indices

Time

\(t\)

[0]

Phases

\(p\)

[‘Liq’]

Particulate Components

\(j\)

[‘X_I’, ‘X_S’, ‘X_P’, ‘X_BH’, ‘X_BA’, ‘X_ND’]

Non-particulate Components

\(j\)

[‘H2O’, ‘S_I’, ‘S_S’, ‘S_O’, ‘S_NO’, ‘S_NH’, ‘S_ND’, ‘S_ALK’]

NOTE: These components are defined in the ASM1 Property Package documentation.

Parameters

Description

Symbol

Variable Name

Index

Value

Units

Percentage of suspended solids in the underflow

\(p_{dewat}\)

p_dewat

None

0.28

\(\text{dimensionless}\)

Percentage of suspended solids removed

\(TSS_{rem}\)

TSS_rem

None

0.98

\(\text{dimensionless}\)

Equations and Relationships

Description

Equation

Suspended solid concentration

\(C_{TSS} = 0.75 (C_{X_{I}} + C_{X_{IP}} + C_{X_{BH}} + C_{X_{BA}} + C_{X_{S}})\)

Dewatering factor

\(f_{dewat} = p_{dewat} (\frac{10}{C_{TSS}})\)

Remove factor

\(f_{q_{du}} = \frac{TSS_{rem}}{100 * f_{dewat}}\)

Overflow particulate fraction

\(split_{particulate} = 1 - TSS_{rem}\)

Overflow soluble fraction

\(split_{soluble} = 1 - f_{q_{du}}\)

Class Documentation

class watertap.unit_models.dewatering.DewateringUnit(*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. Product blocks are always steady- state.

    has_holdup

    Product blocks do not contain holdup, thus this must be False.

    property_package

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

    property_package_args

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

    outlet_list

    A list containing names of outlets, default - None. Valid values: { None - use num_outlets argument, list - a list of names to use for outlets.}

    num_outlets

    Argument indicating number (int) of outlets to construct, not used if outlet_list arg is provided, default - None. Valid values: { None - use outlet_list arg instead, or default to 2 if neither argument provided, int - number of outlets to create (will be named with sequential integers from 1 to num_outlets).}

    split_basis

    Argument indicating basis to use for splitting mixed stream, default - SplittingType.totalFlow. Valid values: { SplittingType.totalFlow - split based on total flow (split fraction indexed only by time and outlet), SplittingType.phaseFlow - split based on phase flows (split fraction indexed by time, outlet and phase), SplittingType.componentFlow - split based on component flows (split fraction indexed by time, outlet and components), SplittingType.phaseComponentFlow - split based on phase-component flows ( split fraction indexed by both time, outlet, phase and components).}

    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 - pressure in all outlets is equal, MomentumBalanceType.pressurePhase - not yet supported, MomentumBalanceType.momentumTotal - not yet supported, MomentumBalanceType.momentumPhase - not yet supported.}

    has_phase_equilibrium

    Argument indicating whether phase equilibrium should be calculated for the resulting mixed stream, default - False. Valid values: { True - calculate phase equilibrium in mixed stream, False - do not calculate equilibrium in mixed stream.}

    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.none - no energy balance constraints, 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. Does not work with component or phase-component splitting.}

    ideal_separation

    Argument indicating whether ideal splitting should be used. Ideal splitting assumes perfect spearation of material, and attempts to avoid duplication of StateBlocks by directly partitioning outlet flows to ports, default - False. Valid values: { True - use ideal splitting methods. Cannot be combined with has_phase_equilibrium = True, False - use explicit splitting equations with split fractions.}

    ideal_split_map

    Dictionary containing information on how extensive variables should be partitioned when using ideal splitting (ideal_separation = True). default - None. Valid values: { dict with keys of indexing set members and values indicating which outlet this combination of keys should be partitioned to. E.g. {(“Vap”, “H2”): “outlet_1”}}

    mixed_state_block

    An existing state block to use as the source stream from the Separator block, default - None. Valid values: { None - create a new StateBlock for the mixed stream, StateBlock - a StateBock to use as the source for the mixed stream.}

    construct_ports

    Argument indicating whether model should construct Port objects linked the mixed state and all outlet states, default - True. Valid values: { True - construct Ports for all states, False - do not construct Ports.

    activated_sludge_model

    Options to account for version of activated sludge model property package.

    default - ActivatedSludgeModelType.ASM1

    Configuration Options

    Description

    ActivatedSludgeModelType.ASM1

    ASM1 model

    ActivatedSludgeModelType.ASM2D

    ASM2D model

    ActivatedSludgeModelType.modified_ASM2D

    modified ASM2D model for ADM1 compatibility

  • 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:

(DewateringUnit) New instance

References

J. Alex, L. Benedetti, J.B. Copp, K.V. Gernaey, U. Jeppsson, I. Nopens, M.N. Pons, C. Rosen, J.P. Steyer & P. A. Vanrolleghem Benchmark Simulation Model no. 2 (BSM2)