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}\) |
|
[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}\) |
|
[p, j] |
\(\text{kg/s}\) |
Temperature |
\(T\) |
|
[t] |
\(\text{K}\) |
Pressure |
\(P\) |
|
[t] |
\(\text{Pa}\) |
Saturation pressure |
\(P_{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 outlet pressure set by saturation pressure and margin |
\(P^{hot,out}_{t} = P^{hot,out}_{sat,t} + \Delta P_{sat,t}\) |
|
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