Air Cooler
Overview
Air-cooled heat exchange is a core design problem in process, power, and HVAC systems where ambient air removes heat from a process fluid through finned tube bundles. In this category, air-cooler thermal rating links heat-transfer prediction, pressure-drop estimation, and acoustic checks into one engineering workflow. These calculations matter because exchanger size, fan power, and operating cost are tightly coupled: improving thermal duty often increases airflow resistance and noise. Practical design therefore requires coordinated models rather than isolated correlations.
The shared framework uses the exchanger energy balance and corrected driving force, Q = U A F_T \Delta T_{lm}, with air-side coefficients from Nusselt-style correlations, geometry-aware fin effectiveness, and correction factors for wall properties and limited row count. Across the functions, key concepts are finned-surface augmentation, crossflow temperature correction, air-side hydrodynamics, and empirical validity ranges. Together they support early sizing, debottlenecking, and what-if analysis of retrofit options.
Implementation is based on the Python ht library, specifically ht.air_cooler. This module provides established air-cooler correlations and utility factors used in industrial thermal design, so workflows can stay transparent while remaining reproducible in spreadsheets and Python.
For thermal driving-force and correction utilities, LMTD computes the log-mean temperature difference and FT_AIRCOOLER supplies the crossflow correction factor used in air-cooler arrangements with rows and tube passes. WALL_FACTOR applies property-ratio corrections between bulk and wall conditions, which is often needed when viscosity or Prandtl number changes materially near hot or cold surfaces. ESDU_TUBE_ROW_CORR provides row-count correction behavior used by ESDU-style air-side correlations. This group is typically used first to build the corrected temperature driving force and property-adjusted basis before selecting a detailed heat-transfer correlation.
For air-side heat-transfer prediction, H_BRIGGS_YOUNG, H_ESDU_HIGH_FIN, H_ESDU_LOW_FIN, and H_GANGULI_VDI estimate finned-tube bundle coefficients under different geometric assumptions and empirical datasets. FIN_EFF_KERN_KRAUS complements these by estimating circular-fin efficiency, helping translate ideal surface area into effective heat-transfer area. In practice, engineers compare these methods to bracket uncertainty, then select a correlation consistent with fin type (high-fin vs low-fin), arrangement, and Reynolds-number range. This cluster is central for exchanger thermal rating, fan-duty tradeoff studies, and sensitivity checks during conceptual and detailed design.
For aerodynamic and mechanical-side constraints, DP_ESDU_HIGH_FIN and DP_ESDU_LOW_FIN predict air-side pressure drop through high-fin and low-fin bundles, respectively, capturing acceleration and friction effects across tube rows. Because pressure drop strongly drives fan power and operating cost, these tools are evaluated alongside the heat-transfer functions rather than afterward. Acoustic screening is handled by AIR_NOISE_GPSA and AIR_NOISE_MUKHERJEE, which estimate fan noise from tip speed, power, and fan geometry (with draft-type adjustment in the Mukherjee form). Used together, these functions support realistic design envelopes that satisfy thermal duty, hydraulic limits, and site noise constraints.
AIR_NOISE_GPSA
This function estimates the sound pressure level from an air-cooler fan using the GPSA correlation, based on blade tip speed and motor shaft power. The relation follows a logarithmic dependence on speed and power and returns the predicted noise level near the source.
\mathrm{SPL} = 56 + 30\log_{10}\!\left(\frac{v_{\text{tip}}}{304.8\ \mathrm{m/min}}\right) + 10\log_{10}(P_{\mathrm{hp}})
Excel Usage
=AIR_NOISE_GPSA(tip_speed, power)
tip_speed(float, required): Fan blade tip speed (m/s).power(float, required): Fan shaft power (W).
Returns (float): Sound pressure level at 1 m, or an error message if invalid.
Example 1: Moderate tip speed and power
Inputs:
| tip_speed | power |
|---|---|
| 50 | 15000 |
Excel formula:
=AIR_NOISE_GPSA(50, 15000)
Expected output:
98.8285
Example 2: Higher tip speed and power
Inputs:
| tip_speed | power |
|---|---|
| 65 | 25000 |
Excel formula:
=AIR_NOISE_GPSA(65, 25000)
Expected output:
104.465
Example 3: Lower power fan
Inputs:
| tip_speed | power |
|---|---|
| 45 | 8000 |
Excel formula:
=AIR_NOISE_GPSA(45, 8000)
Expected output:
94.7257
Example 4: High power fan
Inputs:
| tip_speed | power |
|---|---|
| 55 | 40000 |
Excel formula:
=AIR_NOISE_GPSA(55, 40000)
Expected output:
104.33
Python Code
Show Code
from ht.air_cooler import air_cooler_noise_GPSA as ht_air_cooler_noise_GPSA
def air_noise_gpsa(tip_speed, power):
"""
Compute air cooler noise using the GPSA correlation.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
tip_speed (float): Fan blade tip speed (m/s).
power (float): Fan shaft power (W).
Returns:
float: Sound pressure level at 1 m, or an error message if invalid.
"""
try:
return ht_air_cooler_noise_GPSA(tip_speed=tip_speed, power=power)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
AIR_NOISE_MUKHERJEE
This function predicts air-cooler fan noise using the Mukherjee correlation from tip speed, shaft power, and fan diameter, with an optional induced-draft adjustment. The model increases with speed and power and decreases with larger fan diameter.
\mathrm{SPL} = 46 + 30\log_{10}(v_{\text{tip}}) + 10\log_{10}(P_{\mathrm{hp}}) - 20\log_{10}(D_{\text{fan}})
When induced draft is selected, a 3 dB reduction is applied.
Excel Usage
=AIR_NOISE_MUKHERJEE(tip_speed, power, fan_diameter, induced)
tip_speed(float, required): Fan blade tip speed (m/s).power(float, required): Fan shaft power (W).fan_diameter(float, required): Fan diameter (m).induced(bool, optional, default: false): Whether the air cooler is induced draft (true) or forced draft (false).
Returns (float): Sound pressure level at 1 m, or an error message if invalid.
Example 1: Forced draft fan
Inputs:
| tip_speed | power | fan_diameter | induced |
|---|---|---|---|
| 55 | 20000 | 4 | false |
Excel formula:
=AIR_NOISE_MUKHERJEE(55, 20000, 4, FALSE)
Expected output:
100.454
Example 2: Induced draft fan
Inputs:
| tip_speed | power | fan_diameter | induced |
|---|---|---|---|
| 55 | 20000 | 4 | true |
Excel formula:
=AIR_NOISE_MUKHERJEE(55, 20000, 4, TRUE)
Expected output:
97.4543
Example 3: Larger diameter fan
Inputs:
| tip_speed | power | fan_diameter | induced |
|---|---|---|---|
| 50 | 15000 | 5 | false |
Excel formula:
=AIR_NOISE_MUKHERJEE(50, 15000, 5, FALSE)
Expected output:
96.025
Example 4: Higher power fan
Inputs:
| tip_speed | power | fan_diameter | induced |
|---|---|---|---|
| 60 | 35000 | 4.5 | false |
Excel formula:
=AIR_NOISE_MUKHERJEE(60, 35000, 4.5, FALSE)
Expected output:
102.995
Python Code
Show Code
from ht.air_cooler import air_cooler_noise_Mukherjee as ht_air_cooler_noise_Mukherjee
def air_noise_mukherjee(tip_speed, power, fan_diameter, induced=False):
"""
Compute air cooler noise using the Mukherjee correlation.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
tip_speed (float): Fan blade tip speed (m/s).
power (float): Fan shaft power (W).
fan_diameter (float): Fan diameter (m).
induced (bool, optional): Whether the air cooler is induced draft (true) or forced draft (false). Default is False.
Returns:
float: Sound pressure level at 1 m, or an error message if invalid.
"""
try:
return ht_air_cooler_noise_Mukherjee(
tip_speed=tip_speed,
power=power,
fan_diameter=fan_diameter,
induced=induced,
)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
DP_ESDU_HIGH_FIN
This function computes air-side pressure drop across high-fin tube bundles using the ESDU approach. It combines an acceleration term and a friction term that scales with Reynolds number, geometric pitch ratios, and tube-row count.
\Delta P = (K_{\text{acc}} + n_{\text{rows}}K_f)\,\frac{1}{2}\rho v_{\max}^2
The method is intended for turbulent crossflow through finned tube banks and uses minimum-flow-area velocity conditions.
Excel Usage
=DP_ESDU_HIGH_FIN(m, A_min, A_increase, flow_area_contraction_ratio, tube_diameter, pitch_parallel, pitch_normal, tube_rows, rho, mu)
m(float, required): Mass flow rate across the tube bank (kg/s).A_min(float, required): Minimum flow area (m^2).A_increase(float, required): Surface area ratio relative to bare tube (-).flow_area_contraction_ratio(float, required): Ratio of minimum to face area (-).tube_diameter(float, required): Bare tube diameter (m).pitch_parallel(float, required): Tube pitch parallel to flow (m).pitch_normal(float, required): Tube pitch normal to flow (m).tube_rows(int, required): Number of tube rows (-).rho(float, required): Air density (kg/m^3).mu(float, required): Air viscosity (Pa*s).
Returns (float): Pressure drop across the finned tube bank (Pa), or an error message if invalid.
Example 1: Baseline high-fin tube bank
Inputs:
| m | A_min | A_increase | flow_area_contraction_ratio | tube_diameter | pitch_parallel | pitch_normal | tube_rows | rho | mu |
|---|---|---|---|---|---|---|---|---|---|
| 1.2 | 4 | 12 | 0.4 | 0.02 | 0.05 | 0.06 | 4 | 1.2 | 0.000018 |
Excel formula:
=DP_ESDU_HIGH_FIN(1.2, 4, 12, 0.4, 0.02, 0.05, 0.06, 4, 1.2, 0.000018)
Expected output:
0.279233
Example 2: Higher flow rate and larger tubes
Inputs:
| m | A_min | A_increase | flow_area_contraction_ratio | tube_diameter | pitch_parallel | pitch_normal | tube_rows | rho | mu |
|---|---|---|---|---|---|---|---|---|---|
| 2 | 5 | 10 | 0.5 | 0.025 | 0.06 | 0.07 | 6 | 1.1 | 0.000019 |
Excel formula:
=DP_ESDU_HIGH_FIN(2, 5, 10, 0.5, 0.025, 0.06, 0.07, 6, 1.1, 0.000019)
Expected output:
0.678684
Example 3: Compact bundle geometry
Inputs:
| m | A_min | A_increase | flow_area_contraction_ratio | tube_diameter | pitch_parallel | pitch_normal | tube_rows | rho | mu |
|---|---|---|---|---|---|---|---|---|---|
| 0.8 | 3.5 | 14 | 0.35 | 0.016 | 0.045 | 0.055 | 3 | 1.25 | 0.000017 |
Excel formula:
=DP_ESDU_HIGH_FIN(0.8, 3.5, 14, 0.35, 0.016, 0.045, 0.055, 3, 1.25, 0.000017)
Expected output:
0.128936
Example 4: Many rows with moderate flow
Inputs:
| m | A_min | A_increase | flow_area_contraction_ratio | tube_diameter | pitch_parallel | pitch_normal | tube_rows | rho | mu |
|---|---|---|---|---|---|---|---|---|---|
| 1.5 | 4.5 | 11 | 0.45 | 0.018 | 0.052 | 0.062 | 8 | 1.18 | 0.0000185 |
Excel formula:
=DP_ESDU_HIGH_FIN(1.5, 4.5, 11, 0.45, 0.018, 0.052, 0.062, 8, 1.18, 0.0000185)
Expected output:
0.556944
Python Code
Show Code
from ht.air_cooler import dP_ESDU_high_fin as ht_dP_ESDU_high_fin
def dP_ESDU_high_fin(m, A_min, A_increase, flow_area_contraction_ratio, tube_diameter, pitch_parallel, pitch_normal, tube_rows, rho, mu):
"""
Compute air-side pressure drop for high-fin tube banks.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
m (float): Mass flow rate across the tube bank (kg/s).
A_min (float): Minimum flow area (m^2).
A_increase (float): Surface area ratio relative to bare tube (-).
flow_area_contraction_ratio (float): Ratio of minimum to face area (-).
tube_diameter (float): Bare tube diameter (m).
pitch_parallel (float): Tube pitch parallel to flow (m).
pitch_normal (float): Tube pitch normal to flow (m).
tube_rows (int): Number of tube rows (-).
rho (float): Air density (kg/m^3).
mu (float): Air viscosity (Pa*s).
Returns:
float: Pressure drop across the finned tube bank (Pa), or an error message if invalid.
"""
try:
return ht_dP_ESDU_high_fin(
m=m,
A_min=A_min,
A_increase=A_increase,
flow_area_contraction_ratio=flow_area_contraction_ratio,
tube_diameter=tube_diameter,
pitch_parallel=pitch_parallel,
pitch_normal=pitch_normal,
tube_rows=tube_rows,
rho=rho,
mu=mu,
)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
DP_ESDU_LOW_FIN
This function evaluates air-side pressure drop for low-fin tube banks using the ESDU correlation. The calculation includes both acceleration and friction contributions, with friction affected by Reynolds number, fin-to-bare-length ratio, and pitch geometry.
\Delta P = (K_{\text{acc}} + n_{\text{rows}}K_f)\,\frac{1}{2}\rho v_{\max}^2
It is suited to low-fin crossflow geometries and uses flow properties referenced to the bundle minimum flow area.
Excel Usage
=DP_ESDU_LOW_FIN(m, A_min, A_increase, flow_area_contraction_ratio, tube_diameter, fin_height, bare_length, pitch_parallel, pitch_normal, tube_rows, rho, mu)
m(float, required): Mass flow rate across the tube bank (kg/s).A_min(float, required): Minimum flow area (m^2).A_increase(float, required): Surface area ratio relative to bare tube (-).flow_area_contraction_ratio(float, required): Ratio of minimum to face area (-).tube_diameter(float, required): Bare tube diameter (m).fin_height(float, required): Fin height above the bare tube (m).bare_length(float, required): Bare tube length between fins (m).pitch_parallel(float, required): Tube pitch parallel to flow (m).pitch_normal(float, required): Tube pitch normal to flow (m).tube_rows(int, required): Number of tube rows (-).rho(float, required): Air density (kg/m^3).mu(float, required): Air viscosity (Pa*s).
Returns (float): Pressure drop across the finned tube bank (Pa), or an error message if invalid.
Example 1: Baseline low-fin tube bank
Inputs:
| m | A_min | A_increase | flow_area_contraction_ratio | tube_diameter | fin_height | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | mu |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.1 | 3.8 | 11.5 | 0.42 | 0.02 | 0.004 | 0.0025 | 0.05 | 0.06 | 4 | 1.2 | 0.000018 |
Excel formula:
=DP_ESDU_LOW_FIN(1.1, 3.8, 11.5, 0.42, 0.02, 0.004, 0.0025, 0.05, 0.06, 4, 1.2, 0.000018)
Expected output:
0.187157
Example 2: Higher flow rate and larger tubes
Inputs:
| m | A_min | A_increase | flow_area_contraction_ratio | tube_diameter | fin_height | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | mu |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.9 | 4.8 | 9.8 | 0.5 | 0.025 | 0.005 | 0.003 | 0.06 | 0.07 | 6 | 1.1 | 0.000019 |
Excel formula:
=DP_ESDU_LOW_FIN(1.9, 4.8, 9.8, 0.5, 0.025, 0.005, 0.003, 0.06, 0.07, 6, 1.1, 0.000019)
Expected output:
0.494035
Example 3: Compact bundle geometry
Inputs:
| m | A_min | A_increase | flow_area_contraction_ratio | tube_diameter | fin_height | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | mu |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.9 | 3.4 | 13.5 | 0.36 | 0.016 | 0.0035 | 0.002 | 0.045 | 0.055 | 3 | 1.25 | 0.000017 |
Excel formula:
=DP_ESDU_LOW_FIN(0.9, 3.4, 13.5, 0.36, 0.016, 0.0035, 0.002, 0.045, 0.055, 3, 1.25, 0.000017)
Expected output:
0.124318
Example 4: Many rows with moderate flow
Inputs:
| m | A_min | A_increase | flow_area_contraction_ratio | tube_diameter | fin_height | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | mu |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.4 | 4.2 | 10.8 | 0.45 | 0.018 | 0.0042 | 0.0028 | 0.052 | 0.062 | 8 | 1.18 | 0.0000185 |
Excel formula:
=DP_ESDU_LOW_FIN(1.4, 4.2, 10.8, 0.45, 0.018, 0.0042, 0.0028, 0.052, 0.062, 8, 1.18, 0.0000185)
Expected output:
0.404805
Python Code
Show Code
from ht.air_cooler import dP_ESDU_low_fin as ht_dP_ESDU_low_fin
def dP_ESDU_low_fin(m, A_min, A_increase, flow_area_contraction_ratio, tube_diameter, fin_height, bare_length, pitch_parallel, pitch_normal, tube_rows, rho, mu):
"""
Compute air-side pressure drop for low-fin tube banks.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
m (float): Mass flow rate across the tube bank (kg/s).
A_min (float): Minimum flow area (m^2).
A_increase (float): Surface area ratio relative to bare tube (-).
flow_area_contraction_ratio (float): Ratio of minimum to face area (-).
tube_diameter (float): Bare tube diameter (m).
fin_height (float): Fin height above the bare tube (m).
bare_length (float): Bare tube length between fins (m).
pitch_parallel (float): Tube pitch parallel to flow (m).
pitch_normal (float): Tube pitch normal to flow (m).
tube_rows (int): Number of tube rows (-).
rho (float): Air density (kg/m^3).
mu (float): Air viscosity (Pa*s).
Returns:
float: Pressure drop across the finned tube bank (Pa), or an error message if invalid.
"""
try:
return ht_dP_ESDU_low_fin(
m=m,
A_min=A_min,
A_increase=A_increase,
flow_area_contraction_ratio=flow_area_contraction_ratio,
tube_diameter=tube_diameter,
fin_height=fin_height,
bare_length=bare_length,
pitch_parallel=pitch_parallel,
pitch_normal=pitch_normal,
tube_rows=tube_rows,
rho=rho,
mu=mu,
)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
ESDU_TUBE_ROW_CORR
This function returns the ESDU tube-row correction factor used in crossflow tube-bank heat-transfer correlations. The correction depends on row count and whether the layout is staggered or inline, and approaches 1 for larger row counts.
The optional Reynolds-number input is included for interface compatibility, but in this implementation it does not change the tabulated correction value.
Excel Usage
=ESDU_TUBE_ROW_CORR(tube_rows, staggered, Re, method)
tube_rows(int, required): Number of tube rows per bundle (-).staggered(bool, optional, default: true): Whether the tube layout is staggered (-).Re(float, optional, default: 3000): Reynolds number based on bare tube diameter (-).method(str, optional, default: “Hewitt”): Correlation method name (-).
Returns (float): Tube row correction factor, or an error message if invalid.
Example 1: Staggered bundle with four rows
Inputs:
| tube_rows | staggered |
|---|---|
| 4 | true |
Excel formula:
=ESDU_TUBE_ROW_CORR(4, TRUE)
Expected output:
0.8984
Example 2: Inline bundle with six rows
Inputs:
| tube_rows | staggered |
|---|---|
| 6 | false |
Excel formula:
=ESDU_TUBE_ROW_CORR(6, FALSE)
Expected output:
0.9551
Example 3: Ten rows at higher Reynolds number
Inputs:
| tube_rows | staggered | Re |
|---|---|---|
| 10 | true | 8000 |
Excel formula:
=ESDU_TUBE_ROW_CORR(10, TRUE, 8000)
Expected output:
1
Example 4: Single row with default method
Inputs:
| tube_rows | staggered | Re |
|---|---|---|
| 1 | true | 4500 |
Excel formula:
=ESDU_TUBE_ROW_CORR(1, TRUE, 4500)
Expected output:
0.8593
Python Code
Show Code
from ht.air_cooler import ESDU_tube_row_correction as ht_ESDU_tube_row_correction
def esdu_tube_row_corr(tube_rows, staggered=True, Re=3000, method='Hewitt'):
"""
Compute the ESDU tube row correction factor for a tube bundle.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
tube_rows (int): Number of tube rows per bundle (-).
staggered (bool, optional): Whether the tube layout is staggered (-). Default is True.
Re (float, optional): Reynolds number based on bare tube diameter (-). Default is 3000.
method (str, optional): Correlation method name (-). Default is 'Hewitt'.
Returns:
float: Tube row correction factor, or an error message if invalid.
"""
try:
return ht_ESDU_tube_row_correction(
tube_rows=tube_rows,
staggered=staggered,
Re=Re,
method=method,
)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
FIN_EFF_KERN_KRAUS
This function computes circular-fin efficiency for a constant-thickness fin attached to a tube, using the Kern-Kraus formulation with modified Bessel functions. It quantifies how effectively the fin transfers heat relative to an ideal isothermal fin.
\eta_f = \frac{2r_o}{m(r_e^2-r_o^2)}\left[\frac{I_1(mr_e)K_1(mr_o)-K_1(mr_e)I_1(mr_o)}{I_0(mr_o)K_1(mr_e)+I_1(mr_e)K_0(mr_o)}\right],\quad m=\sqrt{\frac{2h}{k_{\text{fin}}t_{\text{fin}}}}
Efficiency decreases as convection strength increases relative to fin conduction capability.
Excel Usage
=FIN_EFF_KERN_KRAUS(Do, D_fin, t_fin, k_fin, h)
Do(float, required): Bare tube outer diameter (m).D_fin(float, required): Fin outer diameter (m).t_fin(float, required): Fin thickness (m).k_fin(float, required): Fin thermal conductivity (W/m/K).h(float, required): Heat transfer coefficient (W/m^2/K).
Returns (float): Fin efficiency, or an error message if invalid.
Example 1: Baseline fin geometry
Inputs:
| Do | D_fin | t_fin | k_fin | h |
|---|---|---|---|---|
| 0.0254 | 0.05715 | 0.00038 | 200 | 58 |
Excel formula:
=FIN_EFF_KERN_KRAUS(0.0254, 0.05715, 0.00038, 200, 58)
Expected output:
0.841259
Example 2: Thicker fin with higher conductivity
Inputs:
| Do | D_fin | t_fin | k_fin | h |
|---|---|---|---|---|
| 0.03 | 0.07 | 0.0006 | 230 | 65 |
Excel formula:
=FIN_EFF_KERN_KRAUS(0.03, 0.07, 0.0006, 230, 65)
Expected output:
0.841518
Example 3: Smaller fin diameter
Inputs:
| Do | D_fin | t_fin | k_fin | h |
|---|---|---|---|---|
| 0.02 | 0.045 | 0.0004 | 180 | 50 |
Excel formula:
=FIN_EFF_KERN_KRAUS(0.02, 0.045, 0.0004, 180, 50)
Expected output:
0.902913
Example 4: Higher heat transfer coefficient
Inputs:
| Do | D_fin | t_fin | k_fin | h |
|---|---|---|---|---|
| 0.025 | 0.06 | 0.00035 | 205 | 90 |
Excel formula:
=FIN_EFF_KERN_KRAUS(0.025, 0.06, 0.00035, 205, 90)
Expected output:
0.724212
Python Code
Show Code
from ht.air_cooler import fin_efficiency_Kern_Kraus as ht_fin_efficiency_Kern_Kraus
def fin_eff_kern_kraus(Do, D_fin, t_fin, k_fin, h):
"""
Compute circular fin efficiency for constant-thickness fins.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
Do (float): Bare tube outer diameter (m).
D_fin (float): Fin outer diameter (m).
t_fin (float): Fin thickness (m).
k_fin (float): Fin thermal conductivity (W/m/K).
h (float): Heat transfer coefficient (W/m^2/K).
Returns:
float: Fin efficiency, or an error message if invalid.
"""
try:
return ht_fin_efficiency_Kern_Kraus(
Do=Do,
D_fin=D_fin,
t_fin=t_fin,
k_fin=k_fin,
h=h,
)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
FT_AIRCOOLER
This function calculates the log-mean temperature-difference correction factor F_T for air-cooler style crossflow exchangers. It uses a fitted explicit relation based on stream temperatures, tube-pass count, and row count.
The correction factor adjusts ideal LMTD to account for non-ideal exchanger flow arrangement:
\Delta T_{\text{effective}} = F_T\,\Delta T_{\text{LMTD,ideal}}
This is useful for thermal design and rating when exchanger geometry departs from true countercurrent flow.
Excel Usage
=FT_AIRCOOLER(Thi, Tho, Tci, Tco, Ntp, rows)
Thi(float, required): Hot fluid inlet temperature (K).Tho(float, required): Hot fluid outlet temperature (K).Tci(float, required): Cold fluid inlet temperature (K).Tco(float, required): Cold fluid outlet temperature (K).Ntp(int, optional, default: 1): Number of tube passes (-).rows(int, optional, default: 1): Number of tube rows (-).
Returns (float): Log-mean temperature difference correction factor, or an error message if invalid.
Example 1: Four rows with one pass
Inputs:
| Thi | Tho | Tci | Tco | Ntp | rows |
|---|---|---|---|---|---|
| 125 | 45 | 25 | 95 | 1 | 4 |
Excel formula:
=FT_AIRCOOLER(125, 45, 25, 95, 1, 4)
Expected output:
0.550509
Example 2: Two rows with two passes
Inputs:
| Thi | Tho | Tci | Tco | Ntp | rows |
|---|---|---|---|---|---|
| 180 | 90 | 30 | 120 | 2 | 2 |
Excel formula:
=FT_AIRCOOLER(180, 90, 30, 120, 2, 2)
Expected output:
0.901058
Example 3: Three rows with one pass
Inputs:
| Thi | Tho | Tci | Tco | Ntp | rows |
|---|---|---|---|---|---|
| 150 | 70 | 40 | 110 | 1 | 3 |
Excel formula:
=FT_AIRCOOLER(150, 70, 40, 110, 1, 3)
Expected output:
0.664608
Example 4: Single row with one pass
Inputs:
| Thi | Tho | Tci | Tco | Ntp | rows |
|---|---|---|---|---|---|
| 110 | 60 | 20 | 80 | 1 | 1 |
Excel formula:
=FT_AIRCOOLER(110, 60, 20, 80, 1, 1)
Expected output:
0.532634
Python Code
Show Code
from ht.air_cooler import Ft_aircooler as ht_Ft_aircooler
def Ft_aircooler(Thi, Tho, Tci, Tco, Ntp=1, rows=1):
"""
Compute the LMTD correction factor for an air cooler crossflow exchanger.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
Thi (float): Hot fluid inlet temperature (K).
Tho (float): Hot fluid outlet temperature (K).
Tci (float): Cold fluid inlet temperature (K).
Tco (float): Cold fluid outlet temperature (K).
Ntp (int, optional): Number of tube passes (-). Default is 1.
rows (int, optional): Number of tube rows (-). Default is 1.
Returns:
float: Log-mean temperature difference correction factor, or an error message if invalid.
"""
try:
return ht_Ft_aircooler(Thi=Thi, Tho=Tho, Tci=Tci, Tco=Tco, Ntp=Ntp, rows=rows)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
H_BRIGGS_YOUNG
This function computes the air-side heat-transfer coefficient for finned tube bundles using the Briggs-Young correlation. It evaluates a Nusselt-number relationship based on Reynolds and Prandtl numbers together with geometric fin-spacing ratios, then reports the result on a bare-tube area basis.
Nu = 0.134\,Re^{0.681}Pr^{0.33}\left(\frac{S}{h_f}\right)^{0.2}\left(\frac{S}{b}\right)^{0.1134}
The output is intended for forced-convection crossflow over finned tube banks.
Excel Usage
=H_BRIGGS_YOUNG(m, A, A_min, A_increase, A_fin, A_tube_showing, tube_diameter, fin_diameter, fin_thickness, bare_length, rho, Cp, mu, k, k_fin)
m(float, required): Mass flow rate across the tube bank (kg/s).A(float, required): Total exposed surface area (m^2).A_min(float, required): Minimum flow area (m^2).A_increase(float, required): Surface area ratio relative to bare tube (-).A_fin(float, required): Total fin surface area (m^2).A_tube_showing(float, required): Exposed bare tube area (m^2).tube_diameter(float, required): Bare tube diameter (m).fin_diameter(float, required): Finned tube outer diameter (m).fin_thickness(float, required): Fin thickness (m).bare_length(float, required): Bare tube length between fins (m).rho(float, required): Air density (kg/m^3).Cp(float, required): Air heat capacity (J/kg/K).mu(float, required): Air viscosity (Pa*s).k(float, required): Air thermal conductivity (W/m/K).k_fin(float, required): Fin thermal conductivity (W/m/K).
Returns (float): Heat transfer coefficient on a bare-tube basis (W/m^2/K), or an error message if invalid.
Example 1: Baseline bundle properties
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.2 | 40 | 4 | 12 | 35 | 5 | 0.02 | 0.05 | 0.001 | 0.003 | 1.2 | 1005 | 0.000018 | 0.026 | 200 |
Excel formula:
=H_BRIGGS_YOUNG(1.2, 40, 4, 12, 35, 5, 0.02, 0.05, 0.001, 0.003, 1.2, 1005, 0.000018, 0.026, 200)
Expected output:
78.9099
Example 2: Higher flow rate and larger fin diameter
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 55 | 5 | 10 | 48 | 7 | 0.025 | 0.06 | 0.0012 | 0.0035 | 1.1 | 1010 | 0.000019 | 0.027 | 210 |
Excel formula:
=H_BRIGGS_YOUNG(2, 55, 5, 10, 48, 7, 0.025, 0.06, 0.0012, 0.0035, 1.1, 1010, 0.000019, 0.027, 210)
Expected output:
74.7508
Example 3: Compact geometry with lower flow
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.9 | 32 | 3.5 | 13 | 28 | 4 | 0.016 | 0.045 | 0.0009 | 0.0025 | 1.25 | 1000 | 0.000017 | 0.025 | 180 |
Excel formula:
=H_BRIGGS_YOUNG(0.9, 32, 3.5, 13, 28, 4, 0.016, 0.045, 0.0009, 0.0025, 1.25, 1000, 0.000017, 0.025, 180)
Expected output:
78.8332
Example 4: Higher fin conductivity case
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.5 | 45 | 4.5 | 11 | 38 | 7 | 0.018 | 0.055 | 0.0011 | 0.0032 | 1.18 | 1008 | 0.0000185 | 0.0265 | 240 |
Excel formula:
=H_BRIGGS_YOUNG(1.5, 45, 4.5, 11, 38, 7, 0.018, 0.055, 0.0011, 0.0032, 1.18, 1008, 0.0000185, 0.0265, 240)
Expected output:
77.9519
Python Code
Show Code
from ht.air_cooler import h_Briggs_Young as ht_h_Briggs_Young
def h_Briggs_Young(m, A, A_min, A_increase, A_fin, A_tube_showing, tube_diameter, fin_diameter, fin_thickness, bare_length, rho, Cp, mu, k, k_fin):
"""
Compute air-side heat transfer coefficient using Briggs and Young correlations.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
m (float): Mass flow rate across the tube bank (kg/s).
A (float): Total exposed surface area (m^2).
A_min (float): Minimum flow area (m^2).
A_increase (float): Surface area ratio relative to bare tube (-).
A_fin (float): Total fin surface area (m^2).
A_tube_showing (float): Exposed bare tube area (m^2).
tube_diameter (float): Bare tube diameter (m).
fin_diameter (float): Finned tube outer diameter (m).
fin_thickness (float): Fin thickness (m).
bare_length (float): Bare tube length between fins (m).
rho (float): Air density (kg/m^3).
Cp (float): Air heat capacity (J/kg/K).
mu (float): Air viscosity (Pa*s).
k (float): Air thermal conductivity (W/m/K).
k_fin (float): Fin thermal conductivity (W/m/K).
Returns:
float: Heat transfer coefficient on a bare-tube basis (W/m^2/K), or an error message if invalid.
"""
try:
return ht_h_Briggs_Young(
m=m,
A=A,
A_min=A_min,
A_increase=A_increase,
A_fin=A_fin,
A_tube_showing=A_tube_showing,
tube_diameter=tube_diameter,
fin_diameter=fin_diameter,
fin_thickness=fin_thickness,
bare_length=bare_length,
rho=rho,
Cp=Cp,
mu=mu,
k=k,
k_fin=k_fin,
)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
H_ESDU_HIGH_FIN
This function estimates air-side heat-transfer coefficient for high-fin tube banks using the ESDU formulation. The method computes a Nusselt correlation with Reynolds and Prandtl dependence plus correction factors for wall-property effects and tube-row count.
Nu = 0.242\,Re^{0.658}\left(\frac{\text{bare length}}{\text{fin height}}\right)^{0.297}\left(\frac{p_1}{p_2}\right)^{-0.091}Pr^{1/3}F_1F_2
The returned coefficient is converted to a bare-tube reference basis using fin efficiency and area-ratio terms.
Excel Usage
=H_ESDU_HIGH_FIN(m, A, A_min, A_increase, A_fin, A_tube_showing, tube_diameter, fin_diameter, fin_thickness, bare_length, pitch_parallel, pitch_normal, tube_rows, rho, Cp, mu, k, k_fin, Pr_wall)
m(float, required): Mass flow rate across the tube bank (kg/s).A(float, required): Total exposed surface area (m^2).A_min(float, required): Minimum flow area (m^2).A_increase(float, required): Surface area ratio relative to bare tube (-).A_fin(float, required): Total fin surface area (m^2).A_tube_showing(float, required): Exposed bare tube area (m^2).tube_diameter(float, required): Bare tube diameter (m).fin_diameter(float, required): Finned tube outer diameter (m).fin_thickness(float, required): Fin thickness (m).bare_length(float, required): Bare tube length between fins (m).pitch_parallel(float, required): Tube pitch parallel to flow (m).pitch_normal(float, required): Tube pitch normal to flow (m).tube_rows(int, required): Number of tube rows (-).rho(float, required): Air density (kg/m^3).Cp(float, required): Air heat capacity (J/kg/K).mu(float, required): Air viscosity (Pa*s).k(float, required): Air thermal conductivity (W/m/K).k_fin(float, required): Fin thermal conductivity (W/m/K).Pr_wall(float, optional, default: null): Prandtl number at wall temperature (-).
Returns (float): Heat transfer coefficient on a bare-tube basis (W/m^2/K), or an error message if invalid.
Example 1: Baseline high-fin bundle
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.2 | 40 | 4 | 12 | 35 | 5 | 0.02 | 0.05 | 0.001 | 0.003 | 0.05 | 0.06 | 4 | 1.2 | 1005 | 0.000018 | 0.026 | 200 |
Excel formula:
=H_ESDU_HIGH_FIN(1.2, 40, 4, 12, 35, 5, 0.02, 0.05, 0.001, 0.003, 0.05, 0.06, 4, 1.2, 1005, 0.000018, 0.026, 200)
Expected output:
92.5103
Example 2: Higher flow rate and larger pitch
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 55 | 5 | 10 | 48 | 7 | 0.025 | 0.06 | 0.0012 | 0.0035 | 0.06 | 0.07 | 6 | 1.1 | 1010 | 0.000019 | 0.027 | 210 |
Excel formula:
=H_ESDU_HIGH_FIN(2, 55, 5, 10, 48, 7, 0.025, 0.06, 0.0012, 0.0035, 0.06, 0.07, 6, 1.1, 1010, 0.000019, 0.027, 210)
Expected output:
87.2028
Example 3: Compact geometry with lower flow
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.9 | 32 | 3.5 | 13 | 28 | 4 | 0.016 | 0.045 | 0.0009 | 0.0025 | 0.045 | 0.055 | 3 | 1.25 | 1000 | 0.000017 | 0.025 | 180 |
Excel formula:
=H_ESDU_HIGH_FIN(0.9, 32, 3.5, 13, 28, 4, 0.016, 0.045, 0.0009, 0.0025, 0.045, 0.055, 3, 1.25, 1000, 0.000017, 0.025, 180)
Expected output:
85.0774
Example 4: Wall Prandtl correction applied
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin | Pr_wall |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.5 | 45 | 4.5 | 11 | 38 | 7 | 0.018 | 0.055 | 0.0011 | 0.0032 | 0.052 | 0.062 | 5 | 1.18 | 1008 | 0.0000185 | 0.0265 | 240 | 0.72 |
Excel formula:
=H_ESDU_HIGH_FIN(1.5, 45, 4.5, 11, 38, 7, 0.018, 0.055, 0.0011, 0.0032, 0.052, 0.062, 5, 1.18, 1008, 0.0000185, 0.0265, 240, 0.72)
Expected output:
89.9773
Python Code
Show Code
from ht.air_cooler import h_ESDU_high_fin as ht_h_ESDU_high_fin
def h_ESDU_high_fin(m, A, A_min, A_increase, A_fin, A_tube_showing, tube_diameter, fin_diameter, fin_thickness, bare_length, pitch_parallel, pitch_normal, tube_rows, rho, Cp, mu, k, k_fin, Pr_wall=None):
"""
Compute air-side heat transfer coefficient for high-fin tube banks.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
m (float): Mass flow rate across the tube bank (kg/s).
A (float): Total exposed surface area (m^2).
A_min (float): Minimum flow area (m^2).
A_increase (float): Surface area ratio relative to bare tube (-).
A_fin (float): Total fin surface area (m^2).
A_tube_showing (float): Exposed bare tube area (m^2).
tube_diameter (float): Bare tube diameter (m).
fin_diameter (float): Finned tube outer diameter (m).
fin_thickness (float): Fin thickness (m).
bare_length (float): Bare tube length between fins (m).
pitch_parallel (float): Tube pitch parallel to flow (m).
pitch_normal (float): Tube pitch normal to flow (m).
tube_rows (int): Number of tube rows (-).
rho (float): Air density (kg/m^3).
Cp (float): Air heat capacity (J/kg/K).
mu (float): Air viscosity (Pa*s).
k (float): Air thermal conductivity (W/m/K).
k_fin (float): Fin thermal conductivity (W/m/K).
Pr_wall (float, optional): Prandtl number at wall temperature (-). Default is None.
Returns:
float: Heat transfer coefficient on a bare-tube basis (W/m^2/K), or an error message if invalid.
"""
try:
return ht_h_ESDU_high_fin(
m=m,
A=A,
A_min=A_min,
A_increase=A_increase,
A_fin=A_fin,
A_tube_showing=A_tube_showing,
tube_diameter=tube_diameter,
fin_diameter=fin_diameter,
fin_thickness=fin_thickness,
bare_length=bare_length,
pitch_parallel=pitch_parallel,
pitch_normal=pitch_normal,
tube_rows=tube_rows,
rho=rho,
Cp=Cp,
mu=mu,
k=k,
k_fin=k_fin,
Pr_wall=Pr_wall,
)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
H_ESDU_LOW_FIN
This function calculates air-side heat-transfer coefficient for low-fin tube banks with the ESDU low-fin correlation. It uses Reynolds, Prandtl, and geometry ratios with optional wall-property correction and tube-row correction factors.
Nu = 0.183\,Re^{0.7}\left(\frac{\text{bare length}}{\text{fin height}}\right)^{0.36}\left(\frac{p_1}{D_o}\right)^{0.06}\left(\frac{\text{fin height}}{D_o}\right)^{0.11}Pr^{0.36}F_1F_2
The reported value is expressed on a bare-tube basis after applying fin/area transformations.
Excel Usage
=H_ESDU_LOW_FIN(m, A, A_min, A_increase, A_fin, A_tube_showing, tube_diameter, fin_diameter, fin_thickness, bare_length, pitch_parallel, pitch_normal, tube_rows, rho, Cp, mu, k, k_fin, Pr_wall)
m(float, required): Mass flow rate across the tube bank (kg/s).A(float, required): Total exposed surface area (m^2).A_min(float, required): Minimum flow area (m^2).A_increase(float, required): Surface area ratio relative to bare tube (-).A_fin(float, required): Total fin surface area (m^2).A_tube_showing(float, required): Exposed bare tube area (m^2).tube_diameter(float, required): Bare tube diameter (m).fin_diameter(float, required): Finned tube outer diameter (m).fin_thickness(float, required): Fin thickness (m).bare_length(float, required): Bare tube length between fins (m).pitch_parallel(float, required): Tube pitch parallel to flow (m).pitch_normal(float, required): Tube pitch normal to flow (m).tube_rows(int, required): Number of tube rows (-).rho(float, required): Air density (kg/m^3).Cp(float, required): Air heat capacity (J/kg/K).mu(float, required): Air viscosity (Pa*s).k(float, required): Air thermal conductivity (W/m/K).k_fin(float, required): Fin thermal conductivity (W/m/K).Pr_wall(float, optional, default: null): Prandtl number at wall temperature (-).
Returns (float): Heat transfer coefficient on a bare-tube basis (W/m^2/K), or an error message if invalid.
Example 1: Baseline low-fin bundle
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.1 | 36 | 3.8 | 11.5 | 30 | 6 | 0.02 | 0.048 | 0.001 | 0.003 | 0.05 | 0.06 | 4 | 1.2 | 1005 | 0.000018 | 0.026 | 200 |
Excel formula:
=H_ESDU_LOW_FIN(1.1, 36, 3.8, 11.5, 30, 6, 0.02, 0.048, 0.001, 0.003, 0.05, 0.06, 4, 1.2, 1005, 0.000018, 0.026, 200)
Expected output:
62.1053
Example 2: Higher flow rate and larger pitch
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.9 | 50 | 4.8 | 9.8 | 41 | 9 | 0.025 | 0.058 | 0.0012 | 0.0035 | 0.06 | 0.07 | 6 | 1.1 | 1010 | 0.000019 | 0.027 | 210 |
Excel formula:
=H_ESDU_LOW_FIN(1.9, 50, 4.8, 9.8, 41, 9, 0.025, 0.058, 0.0012, 0.0035, 0.06, 0.07, 6, 1.1, 1010, 0.000019, 0.027, 210)
Expected output:
64.8819
Example 3: Compact geometry with lower flow
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.9 | 30 | 3.4 | 13.5 | 25 | 5 | 0.016 | 0.043 | 0.0009 | 0.0025 | 0.045 | 0.055 | 3 | 1.25 | 1000 | 0.000017 | 0.025 | 180 |
Excel formula:
=H_ESDU_LOW_FIN(0.9, 30, 3.4, 13.5, 25, 5, 0.016, 0.043, 0.0009, 0.0025, 0.045, 0.055, 3, 1.25, 1000, 0.000017, 0.025, 180)
Expected output:
66.5522
Example 4: Wall Prandtl correction applied
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin | Pr_wall |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.4 | 42 | 4.2 | 10.8 | 35 | 7 | 0.018 | 0.052 | 0.0011 | 0.0032 | 0.052 | 0.062 | 5 | 1.18 | 1008 | 0.0000185 | 0.0265 | 240 | 0.75 |
Excel formula:
=H_ESDU_LOW_FIN(1.4, 42, 4.2, 10.8, 35, 7, 0.018, 0.052, 0.0011, 0.0032, 0.052, 0.062, 5, 1.18, 1008, 0.0000185, 0.0265, 240, 0.75)
Expected output:
65.1229
Python Code
Show Code
from ht.air_cooler import h_ESDU_low_fin as ht_h_ESDU_low_fin
def h_ESDU_low_fin(m, A, A_min, A_increase, A_fin, A_tube_showing, tube_diameter, fin_diameter, fin_thickness, bare_length, pitch_parallel, pitch_normal, tube_rows, rho, Cp, mu, k, k_fin, Pr_wall=None):
"""
Compute air-side heat transfer coefficient for low-fin tube banks.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
m (float): Mass flow rate across the tube bank (kg/s).
A (float): Total exposed surface area (m^2).
A_min (float): Minimum flow area (m^2).
A_increase (float): Surface area ratio relative to bare tube (-).
A_fin (float): Total fin surface area (m^2).
A_tube_showing (float): Exposed bare tube area (m^2).
tube_diameter (float): Bare tube diameter (m).
fin_diameter (float): Finned tube outer diameter (m).
fin_thickness (float): Fin thickness (m).
bare_length (float): Bare tube length between fins (m).
pitch_parallel (float): Tube pitch parallel to flow (m).
pitch_normal (float): Tube pitch normal to flow (m).
tube_rows (int): Number of tube rows (-).
rho (float): Air density (kg/m^3).
Cp (float): Air heat capacity (J/kg/K).
mu (float): Air viscosity (Pa*s).
k (float): Air thermal conductivity (W/m/K).
k_fin (float): Fin thermal conductivity (W/m/K).
Pr_wall (float, optional): Prandtl number at wall temperature (-). Default is None.
Returns:
float: Heat transfer coefficient on a bare-tube basis (W/m^2/K), or an error message if invalid.
"""
try:
return ht_h_ESDU_low_fin(
m=m,
A=A,
A_min=A_min,
A_increase=A_increase,
A_fin=A_fin,
A_tube_showing=A_tube_showing,
tube_diameter=tube_diameter,
fin_diameter=fin_diameter,
fin_thickness=fin_thickness,
bare_length=bare_length,
pitch_parallel=pitch_parallel,
pitch_normal=pitch_normal,
tube_rows=tube_rows,
rho=rho,
Cp=Cp,
mu=mu,
k=k,
k_fin=k_fin,
Pr_wall=Pr_wall,
)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
H_GANGULI_VDI
This function predicts air-side heat-transfer coefficient for finned tube bundles using Ganguli correlations with VDI-style modifications. It applies a Reynolds-based Nusselt model scaled by area ratio and Prandtl number, with different coefficients for inline and staggered arrangements.
Nu_d = C\,Re_d^{0.6}\left(\frac{A}{A_{\text{tube,only}}}\right)^{-0.15}Pr^{1/3}
The result is returned as a bare-tube-basis coefficient for use in exchanger design calculations.
Excel Usage
=H_GANGULI_VDI(m, A, A_min, A_increase, A_fin, A_tube_showing, tube_diameter, fin_diameter, fin_thickness, bare_length, pitch_parallel, pitch_normal, tube_rows, rho, Cp, mu, k, k_fin)
m(float, required): Mass flow rate across the tube bank (kg/s).A(float, required): Total exposed surface area (m^2).A_min(float, required): Minimum flow area (m^2).A_increase(float, required): Surface area ratio relative to bare tube (-).A_fin(float, required): Total fin surface area (m^2).A_tube_showing(float, required): Exposed bare tube area (m^2).tube_diameter(float, required): Bare tube diameter (m).fin_diameter(float, required): Finned tube outer diameter (m).fin_thickness(float, required): Fin thickness (m).bare_length(float, required): Bare tube length between fins (m).pitch_parallel(float, required): Tube pitch parallel to flow (m).pitch_normal(float, required): Tube pitch normal to flow (m).tube_rows(int, required): Number of tube rows (-).rho(float, required): Air density (kg/m^3).Cp(float, required): Air heat capacity (J/kg/K).mu(float, required): Air viscosity (Pa*s).k(float, required): Air thermal conductivity (W/m/K).k_fin(float, required): Fin thermal conductivity (W/m/K).
Returns (float): Heat transfer coefficient on a bare-tube basis (W/m^2/K), or an error message if invalid.
Example 1: Baseline VDI case
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.2 | 40 | 4 | 12 | 35 | 5 | 0.02 | 0.05 | 0.001 | 0.003 | 0.05 | 0.06 | 4 | 1.2 | 1005 | 0.000018 | 0.026 | 200 |
Excel formula:
=H_GANGULI_VDI(1.2, 40, 4, 12, 35, 5, 0.02, 0.05, 0.001, 0.003, 0.05, 0.06, 4, 1.2, 1005, 0.000018, 0.026, 200)
Expected output:
116.904
Example 2: Higher flow rate and larger pitch
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 55 | 5 | 10 | 48 | 7 | 0.025 | 0.06 | 0.0012 | 0.0035 | 0.06 | 0.07 | 6 | 1.1 | 1010 | 0.000019 | 0.027 | 210 |
Excel formula:
=H_GANGULI_VDI(2, 55, 5, 10, 48, 7, 0.025, 0.06, 0.0012, 0.0035, 0.06, 0.07, 6, 1.1, 1010, 0.000019, 0.027, 210)
Expected output:
109.966
Example 3: Compact geometry with lower flow
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.9 | 32 | 3.5 | 13 | 28 | 4 | 0.016 | 0.045 | 0.0009 | 0.0025 | 0.045 | 0.055 | 3 | 1.25 | 1000 | 0.000017 | 0.025 | 180 |
Excel formula:
=H_GANGULI_VDI(0.9, 32, 3.5, 13, 28, 4, 0.016, 0.045, 0.0009, 0.0025, 0.045, 0.055, 3, 1.25, 1000, 0.000017, 0.025, 180)
Expected output:
116.542
Example 4: Many rows with moderate flow
Inputs:
| m | A | A_min | A_increase | A_fin | A_tube_showing | tube_diameter | fin_diameter | fin_thickness | bare_length | pitch_parallel | pitch_normal | tube_rows | rho | Cp | mu | k | k_fin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.5 | 45 | 4.5 | 11 | 38 | 7 | 0.018 | 0.055 | 0.0011 | 0.0032 | 0.052 | 0.062 | 8 | 1.18 | 1008 | 0.0000185 | 0.0265 | 240 |
Excel formula:
=H_GANGULI_VDI(1.5, 45, 4.5, 11, 38, 7, 0.018, 0.055, 0.0011, 0.0032, 0.052, 0.062, 8, 1.18, 1008, 0.0000185, 0.0265, 240)
Expected output:
120.933
Python Code
Show Code
from ht.air_cooler import h_Ganguli_VDI as ht_h_Ganguli_VDI
def h_Ganguli_VDI(m, A, A_min, A_increase, A_fin, A_tube_showing, tube_diameter, fin_diameter, fin_thickness, bare_length, pitch_parallel, pitch_normal, tube_rows, rho, Cp, mu, k, k_fin):
"""
Compute air-side heat transfer coefficient using the Ganguli VDI method.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
m (float): Mass flow rate across the tube bank (kg/s).
A (float): Total exposed surface area (m^2).
A_min (float): Minimum flow area (m^2).
A_increase (float): Surface area ratio relative to bare tube (-).
A_fin (float): Total fin surface area (m^2).
A_tube_showing (float): Exposed bare tube area (m^2).
tube_diameter (float): Bare tube diameter (m).
fin_diameter (float): Finned tube outer diameter (m).
fin_thickness (float): Fin thickness (m).
bare_length (float): Bare tube length between fins (m).
pitch_parallel (float): Tube pitch parallel to flow (m).
pitch_normal (float): Tube pitch normal to flow (m).
tube_rows (int): Number of tube rows (-).
rho (float): Air density (kg/m^3).
Cp (float): Air heat capacity (J/kg/K).
mu (float): Air viscosity (Pa*s).
k (float): Air thermal conductivity (W/m/K).
k_fin (float): Fin thermal conductivity (W/m/K).
Returns:
float: Heat transfer coefficient on a bare-tube basis (W/m^2/K), or an error message if invalid.
"""
try:
return ht_h_Ganguli_VDI(
m=m,
A=A,
A_min=A_min,
A_increase=A_increase,
A_fin=A_fin,
A_tube_showing=A_tube_showing,
tube_diameter=tube_diameter,
fin_diameter=fin_diameter,
fin_thickness=fin_thickness,
bare_length=bare_length,
pitch_parallel=pitch_parallel,
pitch_normal=pitch_normal,
tube_rows=tube_rows,
rho=rho,
Cp=Cp,
mu=mu,
k=k,
k_fin=k_fin,
)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
LMTD
This function computes the log-mean temperature difference (LMTD) for ideal counterflow or co-current heat exchangers from inlet and outlet temperatures. LMTD is the effective driving force used in exchanger design equations.
\Delta T_{\mathrm{LMTD}}=\frac{\Delta T_1-\Delta T_2}{\ln(\Delta T_1/\Delta T_2)}
It correctly handles limiting cases where the terminal temperature differences become equal.
Excel Usage
=LMTD(Thi, Tho, Tci, Tco, counterflow)
Thi(float, required): Hot fluid inlet temperature (K).Tho(float, required): Hot fluid outlet temperature (K).Tci(float, required): Cold fluid inlet temperature (K).Tco(float, required): Cold fluid outlet temperature (K).counterflow(bool, optional, default: true): Whether the exchanger is counterflow (true) or co-current (false).
Returns (float): Log-mean temperature difference (K), or an error message if invalid.
Example 1: Counterflow temperature difference
Inputs:
| Thi | Tho | Tci | Tco | counterflow |
|---|---|---|---|---|
| 100 | 60 | 30 | 40.2 | true |
Excel formula:
=LMTD(100, 60, 30, 40.2, TRUE)
Expected output:
43.2004
Example 2: Co-current temperature difference
Inputs:
| Thi | Tho | Tci | Tco | counterflow |
|---|---|---|---|---|
| 100 | 60 | 30 | 40.2 | false |
Excel formula:
=LMTD(100, 60, 30, 40.2, FALSE)
Expected output:
39.7525
Example 3: Counterflow with equal temperature difference
Inputs:
| Thi | Tho | Tci | Tco | counterflow |
|---|---|---|---|---|
| 100 | 60 | 20 | 60 | true |
Excel formula:
=LMTD(100, 60, 20, 60, TRUE)
Expected output:
40
Example 4: Co-current with equal temperature difference
Inputs:
| Thi | Tho | Tci | Tco | counterflow |
|---|---|---|---|---|
| 100 | 60 | 20 | 60 | false |
Excel formula:
=LMTD(100, 60, 20, 60, FALSE)
Expected output:
0
Python Code
Show Code
from ht.air_cooler import LMTD as ht_LMTD
def LMTD(Thi, Tho, Tci, Tco, counterflow=True):
"""
Compute the log-mean temperature difference for a heat exchanger.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
Thi (float): Hot fluid inlet temperature (K).
Tho (float): Hot fluid outlet temperature (K).
Tci (float): Cold fluid inlet temperature (K).
Tco (float): Cold fluid outlet temperature (K).
counterflow (bool, optional): Whether the exchanger is counterflow (true) or co-current (false). Default is True.
Returns:
float: Log-mean temperature difference (K), or an error message if invalid.
"""
try:
return ht_LMTD(Thi=Thi, Tho=Tho, Tci=Tci, Tco=Tco, counterflow=counterflow)
except Exception as e:
return f"Error: {str(e)}"Online Calculator
WALL_FACTOR
This function calculates a wall-property correction factor used to adjust ideal heat-transfer or momentum-transfer correlations for property variation between bulk fluid and wall conditions. It supports viscosity, Prandtl-number, or temperature-based ratios with separate exponents for heating and cooling.
The generic structure is:
ext{factor} = \left(\frac{\phi_{\text{bulk}}}{\phi_{\text{wall}}}\right)^n
where \phi is the selected property and n is chosen from the corresponding heating/cooling coefficient.
Excel Usage
=WALL_FACTOR(mu, mu_wall, Pr, Pr_wall, T, T_wall, mu_heating_coeff, mu_cooling_coeff, Pr_heating_coeff, Pr_cooling_coeff, T_heating_coeff, T_cooling_coeff, property_option)
mu(float, optional, default: null): Bulk fluid viscosity (Pa*s).mu_wall(float, optional, default: null): Wall fluid viscosity (Pa*s).Pr(float, optional, default: null): Bulk fluid Prandtl number (-).Pr_wall(float, optional, default: null): Wall fluid Prandtl number (-).T(float, optional, default: null): Bulk fluid temperature (K).T_wall(float, optional, default: null): Wall fluid temperature (K).mu_heating_coeff(float, optional, default: 0.11): Viscosity heating coefficient (-).mu_cooling_coeff(float, optional, default: 0.25): Viscosity cooling coefficient (-).Pr_heating_coeff(float, optional, default: 0.11): Prandtl heating coefficient (-).Pr_cooling_coeff(float, optional, default: 0.25): Prandtl cooling coefficient (-).T_heating_coeff(float, optional, default: 0.11): Temperature heating coefficient (-).T_cooling_coeff(float, optional, default: 0.25): Temperature cooling coefficient (-).property_option(str, optional, default: “Prandtl”): Property basis for correction factor (-).
Returns (float): Wall correction factor, or an error message if invalid.
Example 1: Prandtl correction with default option
Inputs:
| mu | mu_wall | Pr | Pr_wall | T | T_wall |
|---|---|---|---|---|---|
| 0.0008 | 0.0003 | 1.2 | 1.1 | 300 | 350 |
Excel formula:
=WALL_FACTOR(0.0008, 0.0003, 1.2, 1.1, 300, 350)
Expected output:
1.00962
Example 2: Viscosity correction option
Inputs:
| mu | mu_wall | Pr | Pr_wall | T | T_wall | property_option |
|---|---|---|---|---|---|---|
| 0.0009 | 0.0004 | 1.5 | 1.3 | 310 | 360 | Viscosity |
Excel formula:
=WALL_FACTOR(0.0009, 0.0004, 1.5, 1.3, 310, 360, "Viscosity")
Expected output:
1.0933
Example 3: Temperature correction option
Inputs:
| mu | mu_wall | Pr | Pr_wall | T | T_wall | property_option |
|---|---|---|---|---|---|---|
| 0.00075 | 0.00035 | 1.1 | 1 | 290 | 330 | Temperature |
Excel formula:
=WALL_FACTOR(0.00075, 0.00035, 1.1, 1, 290, 330, "Temperature")
Expected output:
0.985887
Example 4: Explicit Prandtl correction option
Inputs:
| mu | mu_wall | Pr | Pr_wall | T | T_wall | property_option |
|---|---|---|---|---|---|---|
| 0.001 | 0.00045 | 1.4 | 1.2 | 320 | 370 | Prandtl |
Excel formula:
=WALL_FACTOR(0.001, 0.00045, 1.4, 1.2, 320, 370, "Prandtl")
Expected output:
1.0171
Python Code
Show Code
from ht.air_cooler import wall_factor as ht_wall_factor
def wall_factor(mu=None, mu_wall=None, Pr=None, Pr_wall=None, T=None, T_wall=None, mu_heating_coeff=0.11, mu_cooling_coeff=0.25, Pr_heating_coeff=0.11, Pr_cooling_coeff=0.25, T_heating_coeff=0.11, T_cooling_coeff=0.25, property_option='Prandtl'):
"""
Compute wall property correction factors for heat transfer correlations.
See: https://ht.readthedocs.io/en/latest/ht.air_cooler.html
This example function is provided as-is without any representation of accuracy.
Args:
mu (float, optional): Bulk fluid viscosity (Pa*s). Default is None.
mu_wall (float, optional): Wall fluid viscosity (Pa*s). Default is None.
Pr (float, optional): Bulk fluid Prandtl number (-). Default is None.
Pr_wall (float, optional): Wall fluid Prandtl number (-). Default is None.
T (float, optional): Bulk fluid temperature (K). Default is None.
T_wall (float, optional): Wall fluid temperature (K). Default is None.
mu_heating_coeff (float, optional): Viscosity heating coefficient (-). Default is 0.11.
mu_cooling_coeff (float, optional): Viscosity cooling coefficient (-). Default is 0.25.
Pr_heating_coeff (float, optional): Prandtl heating coefficient (-). Default is 0.11.
Pr_cooling_coeff (float, optional): Prandtl cooling coefficient (-). Default is 0.25.
T_heating_coeff (float, optional): Temperature heating coefficient (-). Default is 0.11.
T_cooling_coeff (float, optional): Temperature cooling coefficient (-). Default is 0.25.
property_option (str, optional): Property basis for correction factor (-). Valid options: Viscosity, Prandtl, Temperature. Default is 'Prandtl'.
Returns:
float: Wall correction factor, or an error message if invalid.
"""
try:
return ht_wall_factor(
mu=mu,
mu_wall=mu_wall,
Pr=Pr,
Pr_wall=Pr_wall,
T=T,
T_wall=T_wall,
mu_heating_coeff=mu_heating_coeff,
mu_cooling_coeff=mu_cooling_coeff,
Pr_heating_coeff=Pr_heating_coeff,
Pr_cooling_coeff=Pr_cooling_coeff,
T_heating_coeff=T_heating_coeff,
T_cooling_coeff=T_cooling_coeff,
property_option=property_option,
)
except Exception as e:
return f"Error: {str(e)}"Online Calculator