Heat Exchanger - Discretized Constant Efficiency Model

Model description

This document describes a discretized counterflow heat exchanger model that both a constant effectiveness and a Minimum Pinch approach. The user provides the heat exchanger effectiveness, denoted \(\varepsilon\) (epsilon), as a model parameter.

The heat transfer rate is computed as:

\[\dot{Q} = \varepsilon \cdot \dot{Q}_{\max}\]

where \(\dot{Q}\) is the actual heat transfer rate and \(\dot{Q}_{\max}\) is the maximum possible heat transfer rate (based on an external and internal pinching analysis and an ideal exchanger assumption).

The maximum possible heat transfer rate is the one that corresponds to a temperature pinch (Delta T_{pp}) equal to zero. It is determined before solving by varying a fictive heat exchanger effectiveness from 1 to 0 to by increment of 1% until a pinch larger than zero is obtained.

Where \(\dot{Q}_{\max} = \dot{Q}\) such that \(\Delta T_{pp} = 0\)

Then, the heat exchanger is solved by decrementing its efficiency (starting from the user-defined value acting as a maximum efficiency : varepsilon) until the imposed minimum temperature pinch (Delta T_{pp,min}) is satisfied.

Pressure drops can be imposed on both sides of the heat exchanger, these are equally distributed over the discretizations.

Definitions

  • \(\dot{m}_H\), \(\dot{m}_C\) Mass flow rates of the hot and cold streams, respectively (kg/s).

  • \(h_{su,H}\), \(h_{su,C}\) Specific enthalpies at the inlets of the hot and cold streams (J/kg).

  • \(h_{ex,id,H}\), \(h_{ex,id,C}\) Specific enthalpies at the outlets of the hot and cold streams in an ideal heat exchanger (i.e., infinite area / infinite NTU).

Procedure to compute heat transfer rate

  1. Compute or obtain the inlet temperatures and specific enthalpies \(h_{su,H}\) and \(h_{su,C}\).

  2. Impose and distribute the pressure drops.

3. Determine \(\dot{Q}_{max}\) by decrementing a fictive heat exchanger effectiveness (starting from 1 and down 1% per iteration). \(\dot{Q}_{max}\) is the heat rate value when the minimum pinch (at every discretization) becomes larger or equal to 0.

4. Compute \(\dot{Q}\) from \(\dot{Q}_{max}\) in a similar way: by decrementing the heat exchanger effectiveness (starting from the user-defined maximum value) until the imposed minimum temperature pinch is satisfied at every discretization.

\[\dot{Q} = \varepsilon \cdot \dot{Q}_{\max}\]
  1. Outlet enthalpies are computed as:

\[h_{out,H} = h_{su,H} - \frac{\dot{Q}}{\dot{m}_H}\]
\[h_{out,C} = h_{su,C} + \frac{\dot{Q}}{\dot{m}_C}\]

Assumptions

  • Counterflow geometry.

  • User-specified maximum effectiveness \(\varepsilon\), with \(0 < \varepsilon \le 1\).

  • Ideal outlet enthalpies computed using an iterative method for internal

pinching (a solving method could be employed but proved to be slower for efficient heat exchangers). - No heat losses to the environment. - Pressure drop equally distributed along the heat exchanger discretizations.

Class description

class component.heat_exchanger.hex_csteff_disc.HexCstEffDisc[source]

Component: Counterflow Heat Exchanger with Constant Effectiveness (HXEffCstDisc)

Model: Discretized Counterflow Heat Exchanger with Fixed Effectiveness and Pinch Check

Description:

This model simulates a counterflow heat exchanger with constant effectiveness, discretized into segments along the flow direction. The model uses energy balances and basic thermodynamics (via CoolProp) to determine outlet conditions for both hot and cold streams. It iteratively adjusts the effectiveness to satisfy a minimum pinch point temperature difference (Pinch_min). The model is suitable for on-design, steady-state simulations of heat exchangers where detailed flow dynamics are simplified.

Assumptions:

  • Steady-state operation.

  • Constant effectiveness per iteration, adjusted to meet Pinch_min.

  • Uniform discretization of the heat exchanger along its length.

  • Uniform mass flow rates at inlets and outlets.

  • Fluid properties are obtained via CoolProp.

Connectors:

su_C (MassConnector): Mass connector for the cold-side supply. su_H (MassConnector): Mass connector for the hot-side supply. ex_C (MassConnector): Mass connector for the cold-side exhaust. ex_H (MassConnector): Mass connector for the hot-side exhaust. Q_dot (HeatConnector): Heat transfer connector for the total exchanged heat.

Parameters:

eta (float): Initial effectiveness of the heat exchanger [-].

n_disc (int): Number of discretization segments along the exchanger length.

Pinch_min (float): Minimum allowable pinch temperature difference [K].

Inputs:

fluid_H (str): Hot-side fluid.

h_su_H (float): Hot-side inlet specific enthalpy [J/kg].

P_su_H (float): Hot-side inlet pressure [Pa].

m_dot_H (float): Hot-side mass flow rate [kg/s].

fluid_C (str): Cold-side fluid.

h_su_C (float): Cold-side inlet specific enthalpy [J/kg].

P_su_C (float): Cold-side inlet pressure [Pa].

m_dot_C (float): Cold-side mass flow rate [kg/s].

Outputs:

h_ex_C: Cold-Side Exhaust specific enthalpy at outlet [J/kg].

P_ex_C: Cold-Side Exhaust pressure at outlet [Pa].

h_ex_H: Hot-Side specific enthalpy at outlet [J/kg].

P_ex_H: Hot-Side pressure at outlet [Pa].

Q_dot: Total heat transfer rate across the exchanger [W].

DT_pinch: Minimum temperature difference between hot and cold streams across all segments [K].

h_hot, h_cold: Arrays of enthalpies across discretization points [J/kg]. T_hot, T_cold: Arrays of temperatures across discretization points [K].

Example of use

from labothappy.component.heat_exchanger.hex_csteff_disc import HexCstEffDisc


"Simple test - CO2 HTHP GasCooler"

#Exo ORC M&S
HTX = HexCstEffDisc()

HTX.set_inputs(
    fluid_C = 'Water',
    T_su_C = 273.15 + 15,
    m_dot_C = 0.1,
    P_su_C = 10e5,

    fluid_H = 'CO2',
    T_su_H = 450,
    m_dot_H = 0.16,
    P_su_H = 140*1e5,
)

# HTX.set_inputs(
#     fluid_C = 'CO2',
#     T_su_C = 270.15,
#     m_dot_C = 0.16,
#     P_su_C = 2963161,

#     fluid_H = 'CO2',
#     T_su_H = 314.75,
#     m_dot_H = 0.16,
#     P_su_H = 120*1e5,
# )

HTX.set_parameters(**{
    'eta_max' : 0.95,
    'n_disc' : 100, 
    'Pinch_min' : 10,
    'DP_c' : 50*1e3,
    'DP_h' : 50*1e3,    
})

HTX.solve()
HTX.plot_disc()

fig = HTX.plot_Ts(choose_HX_side='H')
fig.show()

References

/