FP_MARTIN
Overview
The FP_MARTIN function calculates the Darcy friction factor for single-phase flow in Chevron-style plate heat exchangers using the Martin (1999) correlation. This correlation is widely used for predicting pressure drop in compact heat exchangers with corrugated plates arranged in a chevron (herringbone) pattern.
Plate heat exchangers consist of a series of thin, corrugated metal plates that create channels for fluid flow. The chevron angle—the angle of the plate corrugations with respect to the vertical flow axis—significantly influences both heat transfer and pressure drop characteristics. Higher chevron angles generally increase turbulence and heat transfer but also increase pressure drop.
The Martin correlation calculates the Fanning friction factor using the following equation:
\frac{1}{\sqrt{f_f}} = \frac{\cos\phi}{\sqrt{0.045\tan\phi + 0.09\sin\phi + f_0/\cos\phi}} + \frac{1-\cos\phi}{\sqrt{3.8 f_1}}
where \phi is the chevron angle, and f_0 and f_1 are Reynolds number-dependent functions:
- For laminar flow (Re < 2000): f_0 = 16/Re and f_1 = 149/Re + 0.9625
- For turbulent flow (Re \geq 2000): f_0 = (1.56\ln Re - 3)^{-2} and f_1 = 9.75/Re^{0.289}
This implementation uses the fluids library, an open-source Python package for fluid dynamics calculations. The correlation is based on Martin’s theoretical approach developed in 1996 and refined in 1999 for economic optimization of compact heat exchangers. For detailed documentation, see the fluids friction module.
The correlation is valid for Reynolds numbers from approximately 200 to 10,000 and chevron angles from 0 to 80 degrees. It is also recommended in Shah and Sekulic’s Fundamentals of Heat Exchanger Design (Wiley, 2002).
This example function is provided as-is without any representation of accuracy.
Excel Usage
=FP_MARTIN(Re, chevron_angle)
Re(float, required): Reynolds number with respect to the hydraulic diameter of the channels, [-]chevron_angle(float, required): Angle of the plate corrugations with respect to the vertical axis (0-90 degrees)
Returns (float): Darcy friction factor, [-], or error message (str) if input is invalid.
Examples
Example 1: Laminar flow with low chevron angle
Inputs:
| Re | chevron_angle |
|---|---|
| 500 | 30 |
Excel formula:
=FP_MARTIN(500, 30)
Expected output:
0.5498
Example 2: Laminar flow with high chevron angle
Inputs:
| Re | chevron_angle |
|---|---|
| 1000 | 60 |
Excel formula:
=FP_MARTIN(1000, 60)
Expected output:
2.0502
Example 3: Turbulent flow with moderate chevron angle
Inputs:
| Re | chevron_angle |
|---|---|
| 5000 | 45 |
Excel formula:
=FP_MARTIN(5000, 45)
Expected output:
0.8347
Example 4: Turbulent flow with high Reynolds number
Inputs:
| Re | chevron_angle |
|---|---|
| 20000 | 45 |
Excel formula:
=FP_MARTIN(20000, 45)
Expected output:
0.7819
Python Code
import micropip
await micropip.install(["fluids"])
from fluids.friction import friction_plate_Martin_1999 as fluids_fp_martin
def fp_martin(Re, chevron_angle):
"""
Calculate Darcy friction factor for single-phase flow in Chevron-style plate heat exchangers using Martin (1999) correlation.
See: https://fluids.readthedocs.io/fluids.friction.html#fluids.friction.friction_plate_Martin_1999
This example function is provided as-is without any representation of accuracy.
Args:
Re (float): Reynolds number with respect to the hydraulic diameter of the channels, [-]
chevron_angle (float): Angle of the plate corrugations with respect to the vertical axis (0-90 degrees)
Returns:
float: Darcy friction factor, [-], or error message (str) if input is invalid.
"""
try:
Re = float(Re)
chevron_angle = float(chevron_angle)
except (ValueError, TypeError):
return "Error: Could not convert parameters to required types."
# Validate Reynolds number
if Re <= 0:
return "Error: Reynolds number must be positive."
# Validate chevron angle range
if chevron_angle < 0 or chevron_angle > 90:
return "Error: Chevron angle must be between 0 and 90 degrees."
try:
result = fluids_fp_martin(Re=Re, chevron_angle=chevron_angle)
# Handle special float values
if result != result: # NaN check
return "nan"
if result == float('inf'):
return "inf"
if result == float('-inf'):
return "-inf"
return float(result)
except Exception as e:
return f"Error computing fp_martin: {str(e)}"