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

Z-configuration Plate Heat Exchanger with P passes

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

Basic details of a Chevron Plate

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:

\[g_{plate} = \frac{L_{pact}}{N_{plates}} - H\]

where

\[N_{plates} = 2N_{channels}N_{passes} - (1+N_{dividers})\]

Channel diameter:

\[d_{channel} = \frac{2LWg_{plate}}{A}\]

Hot and cold side heat transfer coefficients are calculated using the following correlation:

\[U_{side} = \frac{k_{fluid} \times A \times Re^B \times Pr^C}{d_{channel}}\]

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:

\[f = A + B \times Re^C\]

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:

\[U == \frac{1}{\frac{1}{U_{hot}} + \frac{g_{plate}}{k_{plate}} + \frac{1}{U_{cold}}}\]

For heat exchangers with an even number of passes, the following correlation is used for the effectiveness factor:

\[\epsilon = \frac{(1 - exp(-\frac{NTU}{{channels}} \times (1 - C_{ratio})))}{(1 - C_{ratio} \times exp(-\frac{NTU}{{channels}} \times (1 - C_{ratio})))}\]

For heat exchangers with an odd number of passes, the following correlation is used for the effectiveness factor:

\[\epsilon = \frac{(1 - exp(-\frac{NTU}{{channels}} \times (1 + C_{ratio})))}{(1 + C_{ratio})}\]

Pressure drop for both sides of the heat exchanger is calculated using the following correlation:

\[\Delta P = \frac{2fN_{passes}v^2\rho_{mass} \times (L_{plate} + d_{port})}{d_{channel}} + 0.7N_{passes}v^2\rho_{mass}g \times (L_{plate} + d_{port})\]

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#

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

  2. Kakac, S., Liu, H., & Pramuanjaroenkij, A. (2012). Heat exchangers: selection, rating, and thermal design. CRC press.