Steam Heater (0D)

from watertap.unit_models.steam_heater_0D import SteamHeater0D

The Steam Heater 0D unit model is a 0D heat exchanger model based on the IDAES heat exchanger. The model is intended for cases where the hot side represents steam that condenses while transferring heat to a cold-side process stream.

The model extends the IDAES heat exchanger with WaterTAP-specific constraints for the condensing hot side:

  • vapor flow in the hot-side outlet is fixed to its lower bound

  • hot-side outlet pressure is constrained to the saturation pressure of the hot-side outlet state plus a non-negative pressure margin

The pressure margin is represented by pressure_deltaP. It is fixed to zero by default, and users can call set_subcooling_margin or release_subcooling_margin to fix or unfix the margin.

Degrees of Freedom

The degrees of freedom depend on the heat exchanger configuration and on whether the model is being used to estimate steam flow, heat transfer area, or cold-side flow. Typical specifications include:

  • hot-side inlet temperature and pressure

  • hot-side inlet liquid flow

  • cold-side inlet temperature, pressure, and component mass flows

  • overall heat transfer coefficient

  • either heat transfer area or another design/operating variable that closes the heat exchanger degrees of freedom

Model Structure

The model inherits the IDAES HeatExchangerData structure. Users provide hot- and cold-side property packages through the heat exchanger configuration. Common WaterTAP usage names the two sides hot and cold:

m.fs.unit = SteamHeater0D(
    hot_side_name="hot",
    cold_side_name="cold",
    hot={"property_package": m.fs.steam_properties},
    cold={"property_package": m.fs.cold_side_properties},
)

Sets

Description

Symbol

Indices

Time

\(t\)

[0]

Phases

\(p\)

[‘Liq’, ‘Vap’]*

Components

\(j\)

*

*Phases and components depend on the imported property packages.

Variables

The Steam Heater 0D model adds the following variable:

Description

Symbol

Variable Name

Index

Units

Pressure margin above hot-side saturation pressure

\(\Delta P_{sat}\)

pressure_deltaP

[t]

\(\text{Pa}\)

Each hot-side and cold-side property block also contains the state variables defined by the selected property packages. Common variables of interest include:

Description

Symbol

Variable Name

Index

Units

Phase-component mass flow

\(M_{p,j}\)

flow_mass_phase_comp

[p, j]

\(\text{kg/s}\)

Temperature

\(T\)

temperature

[t]

\(\text{K}\)

Pressure

\(P\)

pressure

[t]

\(\text{Pa}\)

Saturation pressure

\(P_{sat}\)

pressure_sat

[t]

\(\text{Pa}\)

Equations and Relationships

In addition to the standard IDAES heat exchanger equations, Steam Heater 0D adds the following relationships on the hot side:

Description

Equation

Model object

Total condensation at the hot-side outlet

\(M^{hot,out}_{Vap,j,t} = M^{hot,out,lb}_{Vap,j,t}\)

hot_side.properties_out[t].flow_mass_phase_comp['Vap', j]

Hot-side outlet pressure set by saturation pressure and margin

\(P^{hot,out}_{t} = P^{hot,out}_{sat,t} + \Delta P_{sat,t}\)

outlet_pressure_sat

The model uses the default heat exchanger costing method from watertap.costing.unit_models.heat_exchanger.

Class Documentation

class watertap.unit_models.steam_heater_0D.SteamHeater0D(*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 = useDefault. Valid values: { useDefault - get flag from parent (default = False), True - set as a dynamic model, False - set as a steady-state model.}

    has_holdup

    Indicates whether holdup terms should be constructed or not. Must be True if dynamic = True, default - False. Valid values: { useDefault - get flag from parent (default = False), True - construct holdup terms, False - do not construct holdup terms}

    hot_side_name

    Hot side name, sets control volume and inlet and outlet names

    cold_side_name

    Cold side name, sets control volume and inlet and outlet names

    hot_side

    A config block used to construct the hot side control volume. This config can be given by the hot side name instead of hot_side.

    hot_side
    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.}

    energy_balance_type

    Indicates what type of energy balance should be constructed, default - EnergyBalanceType.useDefault. Valid values: { EnergyBalanceType.useDefault - refer to property package for default balance type **EnergyBalanceType.none - exclude energy balances, EnergyBalanceType.enthalpyTotal - single enthalpy balance for material, EnergyBalanceType.enthalpyPhase - enthalpy balances for each phase, EnergyBalanceType.energyTotal - single energy balance for material, EnergyBalanceType.energyPhase - energy balances for each phase.}

    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.}

    has_phase_equilibrium

    Indicates whether terms for phase equilibrium should be constructed, default = False. Valid values: { True - include phase equilibrium terms False - exclude phase equilibrium terms.}

    has_pressure_change

    Indicates whether terms for pressure change should be constructed, default - False. Valid values: { True - include pressure change terms, False - exclude pressure change terms.}

    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.}

    cold_side

    A config block used to construct the cold side control volume. This config can be given by the cold side name instead of cold_side.

    cold_side
    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.}

    energy_balance_type

    Indicates what type of energy balance should be constructed, default - EnergyBalanceType.useDefault. Valid values: { EnergyBalanceType.useDefault - refer to property package for default balance type **EnergyBalanceType.none - exclude energy balances, EnergyBalanceType.enthalpyTotal - single enthalpy balance for material, EnergyBalanceType.enthalpyPhase - enthalpy balances for each phase, EnergyBalanceType.energyTotal - single energy balance for material, EnergyBalanceType.energyPhase - energy balances for each phase.}

    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.}

    has_phase_equilibrium

    Indicates whether terms for phase equilibrium should be constructed, default = False. Valid values: { True - include phase equilibrium terms False - exclude phase equilibrium terms.}

    has_pressure_change

    Indicates whether terms for pressure change should be constructed, default - False. Valid values: { True - include pressure change terms, False - exclude pressure change terms.}

    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.}

    delta_temperature_callback

    Callback for for temperature difference calculations

    flow_pattern

    Heat exchanger flow pattern, default - HeatExchangerFlowPattern.countercurrent. Valid values: { HeatExchangerFlowPattern.countercurrent - countercurrent flow, HeatExchangerFlowPattern.cocurrent - cocurrent flow, HeatExchangerFlowPattern.crossflow - cross flow, factor times countercurrent temperature difference.}

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

(SteamHeater0D) New instance