Plate Heat Exchanger#
The thermal model of IDAES Plate Heat Exchanger (PHE) as part of the MEA scrubbing process for post-combustion carbon capture (PCC) is based on the Effectiveness-Number of Transfer Units (e-NTU) approach. In amine-based PCC, the rich solvent leaving the absorber is pre-heated in the PHE using heat recovered from the lean solvent leaving the stripper to reduce the regeneration energy requirement. In the PHE unit, the series of plates stacked together form channels where hot and cold fluids flow alternatively as shown in Figure 1(A). Divider plates enable the partitioning of PHEs into different operating zones. The main dimensions of a gasket plate are shown in Figure 1(B). The PHE is a viable alternative to the conventional Shell and Tube Heat Exchanger specifically because of its lower approach temperature difference capability. For more information on the PHE model see Akula et al. (2019).

Figure 1(A). Z-configuration Plate Heat Exchanger with P passes#

Figure 1(B). Basic details of a Chevron Plate#
Degrees of Freedom#
The Plate Heat Exchanger model has 3 design parameters and 7 design variables.
Design Parameters and Variables:
number of passes (mutable parameter),
channels per pass (mutable parameter),
number of divider plates (mutable parameter,
plate length,
plate width,
plate thickness,
port diameter,
plate thermal conductivity, and
total heat transfer area.
Model Structure#
The Plate Heat Exchanger unit model builds off the core HeatExchangerNTU model, and heat transfer is based on the Effectiveness-Number of Transfer Units (e-NTU method).
Parameters#
The following parameters can be set via configuration arguments when instantiating the Plate Heat Exchanger model, or modified later.
Variable |
Symbol |
Index Sets |
Doc |
---|---|---|---|
number_of_passes |
\(N_{passes}\) |
None |
Number of passes in heat exchanger unit |
channels_per_pass |
\(N_{channels}\) |
None |
Number of channels per heat exchanger pass (assumed equal in all plates) |
number_of_divider_plates |
\(N_{dividers}\) |
None |
Number of divider plates in heat exchanger assembly |
Variables#
The following variables are declared in addition to those variables created by the HeatExchangerNTU class.
Variable |
Symbol |
Index Sets |
Doc |
---|---|---|---|
plate_length |
\(L\) |
None |
Length of a heat exchanger plate |
plate_width |
\(W\) |
None |
Width of a heat exchanger plate |
plate_thickness |
\(H\) |
None |
Thickness of a heat exchanger plate |
plate_pact_length |
\(L_{pact}\) |
None |
Compressed plate pact length |
port_diameter |
\(d_{port}\) |
None |
Diameter of fluid ports in each plate |
plate_therm_cond |
\(k_{plate}\) |
None |
Thermal conductivity of heat exchanger plates |
Expressions#
The following expressions are declared in addition to those created by the HeatExchangerNTU class.
Plate gap:
where
Channel diameter:
Hot and cold side heat transfer coefficients are calculated using the following correlation:
where \(k_{fluid}\) is the thermal conductivity of the fluid, \(Re\) and \(Pr\) are the Reynolds and Prandlt number respectively and \(A\), \(B\) and \(C\) are coefficients.
The friction factor for the pressure drop correlation is expressed as:
where \(Re\) is the Reynolds and \(A\), \(B\) and \(C\) are coefficients (different to those above).
Constraints#
The Plate Heat Exchanger unit model writes additional Constraints
beyond those written by the
HeatExchangerNTU class.
The overall heat transfer coefficient is calculated using the following correlation:
For heat exchangers with an even number of passes, the following correlation is used for the effectiveness factor:
For heat exchangers with an odd number of passes, the following correlation is used for the effectiveness factor:
Pressure drop for both sides of the heat exchanger is calculated using the following correlation:
where \(f\) is the friction factor for the side and \(v\) is the velocity of the fluid at the port.
PlateHeatExchanger Class#
- class idaes.models_extra.column_models.plate_heat_exchanger.PlateHeatExchanger(*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
Hot fluid config arguments
- 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_pressure_change
Plate Heat Exchanger model includes correlations for pressure drop thus has_pressure_change must be True
- property_package
Property parameter object used to define property calculations default - useDefault. Valid values: { useDefault - use default package from parent model or flowsheet, PhysicalParameterObject - a PhysicalParameterBlock object.}
- property_package_args
A ConfigBlock with arguments to be passed to property block(s) and used when constructing these, default - None. Valid values: { see property package for documentation.}
- cold_side
Cold fluid config arguments
- 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_pressure_change
Plate Heat Exchanger model includes correlations for pressure drop thus has_pressure_change must be True
- property_package
Property parameter object used to define property calculations default - useDefault. Valid values: { useDefault - use default package from parent model or flowsheet, PhysicalParameterObject - a PhysicalParameterBlock object.}
- property_package_args
A ConfigBlock with arguments to be passed to property block(s) and used when constructing these, default - None. Valid values: { see property package for documentation.}
- 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
- passes
Number of passes of the fluids through the heat exchanger
- channels_per_pass
Number of channels to be used in each pass where a channel is the space between two plates with a flowing fluid
- number_of_divider_plates
Divider plates are used to create separate partitions in the unit. Each pass can be separated by a divider plate
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:
(PlateHeatExchanger) New instance
PlateHeatExchangerData Class#
- class idaes.models_extra.column_models.plate_heat_exchanger.PlateHeatExchangerData(component)[source]#
DEPRECATED.
Plate Heat Exchanger(PHE) Unit Model.
Deprecated since version 2.3.0: The Plate Heat Exchanger (PHE) model is known to be affected by issues causing it to fail to solve on certain platforms starting with Pyomo v6.7.0. This might cause the model to be removed in an upcoming IDAES release if these failures are not resolved. For more information, see IDAES/idaes-pse#1294
- build()[source]#
General build method for UnitModelBlockData. This method calls a number of sub-methods which automate the construction of expected attributes of unit models.
Inheriting models should call super().build.
- Parameters:
None
- Returns:
None
- initialize(hot_side_state_args=None, cold_side_state_args=None, outlvl=0, solver=None, optarg=None, duty=None)[source]#
Heat exchanger initialization method.
- Parameters:
hot_side_state_args – a dict of arguments to be passed to the property initialization for the hot side (see documentation of the specific property package) (default = None).
cold_side_state_args – a dict of arguments to be passed to the property initialization for the cold side (see documentation of the specific property package) (default = None).
outlvl – sets output level of initialization routine
optarg – solver options dictionary object (default=None, use default solver options)
solver – str indicating which solver to use during initialization (default = None, use default solver)
duty – an initial guess for the amount of heat transferred. This should be a tuple in the form (value, units), (default = (1000 J/s))
- Returns:
None
References#
Akula, P., Eslick, J., Bhattacharyya, D., & Miller, D. C. (2019). “Modelling and Parameter Estimation of a Plate Heat Exchanger as Part of a Solvent-Based Post-Combustion CO2 Capture System”, In Computer Aided Chemical Engineering (Vol. 47, pp. 47-52). Elsevier. https://doi.org/10.1016/B978-0-12-818597-1.50008-4
Kakac, S., Liu, H., & Pramuanjaroenkij, A. (2012). Heat exchangers: selection, rating, and thermal design. CRC press.