Heat Exchanger - Epsilon NTU Model

Model description

The HexeNTU component models a steady-state heat exchanger using the effectiveness–NTU (ε-NTU) method. This approach is well suited for situations where outlet temperatures are unknown and must be determined from inlet conditions, flow rates, and exchanger geometry.

The HexeNTU component models a steady-state heat exchanger using the effectiveness–NTU (ε-NTU) method. This method computes the heat transfer rate directly from inlet conditions, without requiring outlet temperatures a priori.

Heat Capacity Rates

For each fluid, the heat capacity rate is defined as:

\[C = \dot{m} \cdot c_p\]

where (\(\dot{m}\)) is the mass flow rate and (\(c_p\)) is the specific heat capacity evaluated at inlet conditions. The minimum and maximum heat capacity rates are:

\[C_{\min} = \min(C_H, C_C), \qquad C_{\max} = \max(C_H, C_C)\]

The heat capacity ratio is:

\[C_r = \frac{C_{\min}}{C_{\max}}\]

Overall Heat Transfer Coefficient (AU)

The overall heat transfer coefficient multiplied by area, (AU), is computed from a series of thermal resistances:

\[\frac{1}{AU} = \frac{1}{h_H A} \cdot \frac{1}{h_C A} \cdot \frac{t_{plate}}{k_{plate} A} \cdot \frac{R_{fouling}}{A}\]

The convective heat transfer coefficients (\(h_H\)) and (\(h_C\)) are evaluated using the Gnielinski correlation for internal turbulent flow.

Number of Transfer Units (NTU)

The number of transfer units is defined as:

\[NTU = \frac{AU}{C_{\min}}\]

NTU represents the relative size of the heat exchanger compared to the ability of the fluids to store thermal energy.

Heat Exchanger Effectiveness

The heat exchanger effectiveness (\(\varepsilon\)) is computed using a standard ε-NTU correlation, which depends on:

  • the flow configuration (counterflow, parallel flow, crossflow, etc.),

  • the number of transfer units (NTU),

  • the heat capacity ratio (\(C_r\)).

\[\varepsilon = f(NTU, C_r, \text{Flow Type})\]

Heat Transfer Rate

The maximum possible heat transfer is defined as:

\[Q_{\max} = C_{\min} \left( T_{H,in} - T_{C,in} \right)\]

The actual heat transfer rate is then:

\[\dot{Q} = \varepsilon , Q_{\max}\]

Assumptions

  • Steady-state operation

  • No heat loss to the environment

  • No pressure drop

  • Single-phase flow

  • Thermophysical properties evaluated at inlet conditions

Class description

class component.heat_exchanger.hex_eNTU.HexeNTU[source]

Component: Heat Exchanger

Model: ε-NTU (Effectiveness - Number of Transfer Units) method.

Description:

This component models a heat exchanger using the ε-NTU method, a widely used approach for estimating heat transfer performance in steady-state conditions when outlet temperatures are not known a priori. It calculates heat transfer based on fluid properties, flow configuration, and geometry using thermal resistances and heat transfer correlations.

The model is applicable to various geometries (e.g., pipe-type, plate-type) and requires fluid and geometric properties. The thermal effectiveness is computed via an external ε-NTU correlation, which supports multiple flow configurations (e.g., CounterFlow, ParallelFlow, CrossFlow).

Assumptions:

  • Steady-state operation.

  • No heat loss to the environment.

  • No pressure drop considered (isenthalpic mixing assumed).

  • Thermophysical properties are evaluated at average temperatures.

  • No phase change within the exchanger.

Connectors:

su_H (MassConnector): Hot fluid inlet connector. su_C (MassConnector): Cold fluid inlet connector. ex_H (MassConnector): Hot fluid outlet connector. ex_C (MassConnector): Cold fluid outlet connector. Q_hex (HeatConnector): Connector for total heat transfer rate.

Parameters:

Flow_Type : Flow configuration of the fluid (‘CounterFlow’, ‘CrossFlow’, ‘Shell&Tube’, ‘ParallelFlow’) [-] A_htx: Total heat exchange area [m²] L_HTX: Length of the heat exchanger [m] V_HTX: Volume of the heat exchanger [m³] A_canal_H: Cross-sectional area of hot fluid channels [m²] A_canal_C: Cross-sectional area of cold fluid channels [m²] D_h: Hydraulic diameter [m] k_plate: Thermal conductivity of the separating plate [W/m.K] t_plate: Thickness of the separating plate [m] n_plates: Number of plates [-] co_pitch: Plate corrugation pitch [m] chevron_angle: Plate chevron angle [degrees] fouling: Fouling resistance [m².K/W]

Inputs:

T_su_H: Hot fluid inlet temperature [K] P_su_H: Hot fluid inlet pressure [Pa] h_su_H: Hot fluid inlet enthalpy [J/kg] fluid_H: Hot fluid identifier [-] m_dot_H: Hot fluid mass flow rate [kg/s]

T_su_C: Cold fluid inlet temperature [K] P_su_C: Cold fluid inlet pressure [Pa] h_su_C: Cold fluid inlet enthalpy [J/kg] fluid_C: Cold fluid identifier [-] m_dot_C: Cold fluid mass flow rate [kg/s]

Outputs:

h_ex_H: Hot fluid outlet enthalpy [J/kg] P_ex_H: Hot fluid outlet pressure [Pa] h_ex_C: Cold fluid outlet enthalpy [J/kg] p_ex_C: Cold fluid outlet pressure [Pa] Q_dot: Heat transfer rate [W]

Example of use


import numpy as np

from labothappy.component.heat_exchanger.hex_eNTU import HexeNTU

HX = HexeNTU()

HX.set_inputs(
    # First fluid
    fluid_H = 'Cyclopentane',
    T_su_H = 205 + 273.15, # K
    P_su_H = 1*1e5, # Pa
    m_dot_H = 0.014, # kg/s

    # Second fluid
    fluid_C = 'Water',
    T_su_C = 12 + 273.15, # K
    P_su_C = 4*1e5, # Pa
    m_dot_C = 0.08, # kg/s  # Make sure to include fluid information
)
 
A_htx = 0.752 # m^2

# HTX dimensions
L = 0.393 # [m] : length
w = 0.243 # [m] : width
h = 0.0446 # [m] : height
l_v = 0.324 # [m] : length between ports
casing_t = 0.005 # [m] : casing thickness # !!! arbitrary

# Number and thickness of plates
n_plates = 10
t_plates = 0.0008 # [m] # !!! arbitrary

# Fooling factor
fooling = 98.51/1000 # (m^2*K)/W

# Number of canals
C_n_canals = 5
H_n_canals = 4

# Plate values 
plate_cond = 45 # [W/(m*K)] : plate conduction
plate_pitch_co = 0.005 # 0.00745870973 # corrugated pitch # !!! arbitrary
chevron_angle = 20*np.pi/180 # !!! arbitrary

# Total volume of each part
V_tot = 0.9*1e-3 # [m^3]

# Canal thickness
C_canal_t = ((h-2*casing_t) - n_plates*t_plates)/(2*C_n_canals)
H_canal_t = ((h-2*casing_t) - n_plates*t_plates)/(2*H_n_canals)

# Total Canal Surface
C_CS = C_canal_t*(w-2*casing_t)*C_n_canals
H_CS = H_canal_t*(w-2*casing_t)*H_n_canals

# Dh : hydraulic diameter
C_Dh = (4*C_canal_t*w)/(2*C_canal_t+2*w)
H_Dh = (4*H_canal_t*w)/(2*H_canal_t+2*w)
    
HX.set_parameters(
    A_htx=0.752, L_HTX=0.393, V_HTX=0.9*1e-3, Flow_Type = 'CounterFlow',
    A_canal_h=H_CS, A_canal_c=C_CS, D_h=H_Dh, 
    k_plate=45, t_plate=0.0008, n_plates = 10,
    co_pitch=0.005, chevron_angle=20*np.pi/180, fouling=98.51/1000
)

# Solve the expander component
HX.solve()
HX.print_setup()
HX.print_results()

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

References

/