Help

Centrifugal Pump System

Jump to section

Overview

Performs hydraulic analysis for centrifugal pump system selection per Hydraulic Institute and ASHRAE guidelines. Calculates Total Dynamic Head (TDH), Net Positive Suction Head Available (NPSHa), Durand settling velocity for slurry transport, and cavitation risk assessment. Supports gauge or absolute pressure inputs and optional manufacturer NPSH data.

Input Parameters

Fluid Properties

Parameter Type Default Range Description
temperature Number 20.0 -50 – 200 °C Fluid temperature (informational)
density Number 1035.33 500 – 3000 kg/m³ Mass per unit volume of the fluid being pumped
viscosity Number 1.0 0.1 – 10000 cP Fluid resistance to flow (informational; warning issued above 10 cP)
vapor_pressure Number 9.573 0 – 200 kPa Absolute pressure at which the fluid vaporizes

System & Flow Conditions

Parameter Type Default Range Description
flow_rate Number 6.988 0.1 – 10000 m³/h Required volumetric flow rate
pipe_diameter Number 35 10 – 2000 mm Internal diameter of suction pipe

Pressures

Parameter Type Default Range Description
pressure_is_gauge Boolean True — When True, inlet/discharge pressures are gauge; when False, absolute
atmospheric_pressure Number 101.325 50 – 110 kPa Local atmospheric pressure (hidden when pressures are absolute)
inlet_pressure Number 97.5 0 – 1000 kPa Pressure at suction vessel or liquid surface
discharge_pressure Number 110.0 0 – 5000 kPa Pressure at discharge vessel or destination

Elevation

Parameter Type Default Range Description
static_head Number 15.0 -100 – 500 m Vertical elevation between discharge and suction surfaces
suction_static_head Number 1.1 -50 – 100 m Elevation of liquid surface above pump centerline (+ flooded, - lift)

Friction Losses

Parameter Type Default Range Description
suction_friction_loss Number 12.7 0 – 500 kPa Total pressure lost in suction piping
discharge_friction_loss Number 176.6 0 – 2000 kPa Total pressure lost in discharge piping

Slurry / Particulate (optional)

Parameter Type Default Range Description
is_slurry Boolean True — Enable slurry settling analysis
d50 Number 100 0.1 – 10000 μm Median particle size (informational; hidden if not slurry)
fl_factor Number 0.71 0.1 – 2.0 Durand settling coefficient (hidden if not slurry)
solid_sg Number 3.20 1.0 – 20.0 Specific gravity of solid particles (hidden if not slurry)

NPSH Settings

Parameter Type Default Range Description
use_manufacturer_npsh Boolean False — Provide manufacturer NPSH required value instead of estimate
manufacturer_npsh_r Number 3.0 0 – 50 m NPSH required from pump manufacturer curve (hidden if toggle off)

Output Results

Output Unit Description
tdh m Total Dynamic Head
differential_pressure kPa Differential pressure across the pump
pressure_head m Head equivalent of discharge–inlet pressure difference
friction_head_suction m Suction friction loss converted to head
friction_head_discharge m Discharge friction loss converted to head
friction_head_total m Total friction head loss (suction + discharge)
npsh_available m Net Positive Suction Head Available
npsh_required m NPSH Required (manufacturer or estimated)
npsh_margin m NPSH margin \((\text{NPSHa} - \text{NPSHr})\)
npsh_source text "Manufacturer Data" or "Estimated"
npsh_status text Cavitation risk: Safe / Acceptable / Risky
flow_velocity m/s Fluid velocity in the suction pipe
settling_velocity m/s Durand critical settling velocity (slurry only)
settling_status text Settling risk: No Settling / Risk / High Risk / N/A
liquid_sg — Liquid specific gravity \((\rho / 1000)\)

Formulas

Pressure–Head Conversion

\[ H = \frac{P \times 1000}{\rho \times g} \]

Converts pressure \(P\) (kPa) to equivalent head \(H\) (m), where \(\rho\) is fluid density (kg/m³) and \(g = 9.81\) m/s².

\[ P = \frac{H \times \rho \times g}{1000} \]

Inverse conversion from head (m) back to pressure (kPa).

Total Dynamic Head (TDH)

\[ \text{TDH} = H_{\text{static}} + H_{\text{pressure}} + H_{\text{friction,total}} \]

Where:

  • \(H_{\text{static}}\) — vertical elevation between discharge and suction surfaces (m)
  • \(H_{\text{pressure}} = \dfrac{(P_{\text{discharge}} - P_{\text{inlet}}) \times 1000}{\rho \times g}\) — pressure head (m)
  • \(H_{\text{friction,total}} = H_{f,\text{suction}} + H_{f,\text{discharge}}\) — total friction head (m), each term converted from kPa input

Differential Pressure

\[ \Delta P = \frac{\text{TDH} \times \rho \times g}{1000} \quad (\text{kPa}) \]

Converts the calculated TDH back to a differential pressure for pump specification.

Flow Velocity

\[ v = \frac{Q / 3600}{\pi \left(\dfrac{D}{2000}\right)^2} \]

Where \(Q\) is flow rate (m³/h) and \(D\) is pipe internal diameter (mm). Division by 3600 converts m³/h to m³/s; division by 2000 converts mm diameter to metres radius.

NPSH Available

Gauge pressure mode:

\[ \text{NPSHa} = \frac{(P_{\text{atm}} + P_{\text{inlet,gauge}} - P_{\text{vapor}}) \times 1000}{\rho \times g} + Z_s - H_{f,s} \]

Absolute pressure mode:

\[ \text{NPSHa} = \frac{(P_{\text{inlet,abs}} - P_{\text{vapor}}) \times 1000}{\rho \times g} + Z_s - H_{f,s} \]

Where:

  • \(P_{\text{atm}}\) — atmospheric pressure (kPa), default 101.325
  • \(P_{\text{vapor}}\) — fluid vapor pressure (kPa abs)
  • \(Z_s\) — suction static head (m, positive if flooded, negative if lift)
  • \(H_{f,s}\) — suction friction head loss (m), converted from the suction friction loss kPa input

NPSH Required (Estimate)

\[ \text{NPSHr} \approx 2.5 + 0.05 \times Q^2 \quad (Q \text{ in m}^3\text{/s}) \]

Rough empirical estimate only. Always use manufacturer pump curves for actual pump selection. Toggle use_manufacturer_npsh to supply the real value.

NPSH Status Assessment

Margin (\(\text{NPSHa} - \text{NPSHr}\)) Status Risk
\(\geq 2.0\) m Safe Low cavitation risk
\(1.0 \leq \text{margin} < 2.0\) m Acceptable Marginal — consider adding safety
\(< 1.0\) m Risky — Cavitation Likely Redesign suction conditions

Durand Settling Velocity (Slurry)

\[ V_L = F_L \times \sqrt{\frac{2 \times g \times D \times (S_s - S_L)}{S_L}} \]

Where:

  • \(F_L\) — Durand settling coefficient (0.5–1.2 typical)
  • \(D\) — pipe diameter (m)
  • \(S_s\) — solid specific gravity
  • \(S_L = \rho / 1000\) — liquid specific gravity

If \(|S_s - S_L| < 0.001\), settling velocity returns 0 (no settling concern).

Settling Status Assessment

Condition Status
\(v \geq 1.3 \times V_L\) No Settling — Good Margin
\(V_L < v < 1.3 \times V_L\) Risk of Settling
\(v \leq V_L\) High Risk of Settling

Worked Examples

The 12 examples below are the validation cases for this calculation. Each one was produced by the calculation engine from the inputs shown, every figure was checked against the independent reference quoted at the end of the example, and the same cases are run against every engine build (see validation scorecard, tool fe_calc_pump; worked examples for every calculation).

#CaseTDH (m)ΔP (kPa)NPSHa (m)NPSHr (m)Margin (m)v / VL (m/s)Result
17 m³/h mineral slurry, flooded suction (calculator defaults)34.87354.118.482.5015.982.02 / 0.85PASS
2Clean water transfer from an open tank17.64173.111.582.509.081.42 / –PASS
3Sand slurry in an 80 mm suction — deposition risk28.39334.212.082.509.581.10 / 1.24FAIL
4Slurry between V_L and 1.3 V_L16.34184.49.843.506.341.42 / 1.28PASS
5Water at 90 °C lifted 3 m — cavitation24.57232.7-0.563.00-3.561.10 / –FAIL
6Boiler feed from a deaerator at saturation156.311,463.95.363.202.161.06 / –PASS
7Closed vessel to closed vessel, absolute pressures53.24521.225.534.0021.531.36 / –PASS
8Suction lift at 1 500 m altitude24.19236.85.293.401.891.38 / –PASS
9NPSH margin just under 1 m25.41248.74.593.650.941.77 / –FAIL
10Light hydrocarbon from an atmospheric tank61.09431.58.853.005.851.59 / –PASS
11Discharge below suction into a pressurised header23.39229.114.802.0012.801.26 / –PASS
123 600 m³/h intake with the placeholder NPSHr22.89224.511.392.558.843.54 / –PASS

Example 1 — 7 m³/h mineral slurry, flooded suction (calculator defaults)

The calculator's default duty: a settling slurry with ample NPSH margin and a suction velocity well above the Durand deposition limit.

Given: Q = 6.988 m³/h through a 35 mm ID suction pipe; ρ = 1035.33 kg/m³, Pv = 9.573 kPa abs. Suction surface at 97.5 kPa, discharge at 110 kPa (gauge, Patm = 101.325 kPa). Static head Hstatic = 15 m, suction level Zs = 1.1 m (1.1 m above the pump centreline). Friction: suction 12.7 kPa, discharge 176.6 kPa. No NPSHr given (engine placeholder); settling slurry, solids Ss = 3.2, Durand FL = 0.71.

Head conversionH = P / (ρg): ρg = 1035.33 × 9.81 / 1000 = 10.1566 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (110 − 97.5) / 10.1566 = 1.231 m
Friction headshf,s = 12.7 / 10.1566 = 1.250 m; hf,d = 176.6 / 10.1566 = 17.388 m; total 18.638 m
Total dynamic headTDH = Hstatic + Hp + hf = 15 + 1.231 + 18.638 = 34.869 m
Differential pressureΔP = TDH × ρg = 34.869 × 10.1566 = 354.15 kPa
Suction pressurePs,abs = 97.5 + 101.325 = 198.825 kPa abs
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (198.825 − 9.573) / 10.1566 + 1.1 − 1.250 = 18.483 m
NPSH requiredNo pump curve given — engine placeholder NPSHr = 2.5 + 0.05 × Q² (Q in m³/s) = 2.5 + 0.05 × (6.988 / 3600)² = 2.500 m (not a pump property)
NPSH marginNPSHa − NPSHr = 18.483 − 2.500 = 15.983 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Safe') → 15.983 vs limit 1.000 m PASS
Suction velocityA = π × 0.035² / 4 = 0.000962 m²; v = (6.988 / 3600) / 0.000962 = 2.018 m/s
Durand deposition velocitySL = 1035.33 / 1000 = 1.0353; VL = FL √(2gD(Ss − SL) / SL) = 0.71 × √(2 × 9.81 × 0.035 × (3.2 − 1.0353) / 1.0353) = 0.851 m/s
Deposition checkv > VL: v / VL = 2.018 / 0.851 = 2.372 (engine: ≥ 1.3 good margin, 1–1.3 risk) → 'No Settling - Good Margin' → 2.018 vs limit 0.851 m/s PASS
Result2/2 checks pass → PASS; TDH 34.87 m, NPSHa 18.48 m vs NPSHr 2.50 m; v 2.02 vs VL 0.85 m/s; governing: npsh margin. NPSHr is a placeholder (≈ 2.5 m); use the selected pump's NPSH3 curve at the duty flow.
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 10.1566 kPa/m; TDH = 15 + (110 − 97.5)/10.1566 + (12.7 + 176.6)/10.1566 = 34.869 m; ΔP = 34.869 × 10.1566 = 354.15 kPa; P_s,abs = 97.5 + 101.325 = 198.825 kPa abs; NPSHa = (198.825 − 9.573)/10.1566 + 1.1 − 1.250 = 18.483 m; NPSHr placeholder = 2.5 + 0.05 × (6.988/3600)² = 2.500 m; margin = 15.983 m vs 1.0 m; v = (6.988/3600)/(π × 0.035²/4) = 2.018 m/s; Durand (1953) V_L = 0.71 × √(2 × 9.81 × 0.035 × (3.2 − 1.03533)/1.03533) = 0.851 m/s → v/V_L = 2.372 (No Settling - Good Margin) (validation case c0011-7m3h-slurry-npsh)

Example 2 — Clean water transfer from an open tank

Cold water from an open, flooded tank: the pressure, static and friction heads add to the TDH and the NPSH margin is large even with the placeholder NPSHr.

Given: Q = 10 m³/h through a 50 mm ID suction pipe; ρ = 1,000 kg/m³, Pv = 2.34 kPa abs. Suction surface at 0 kPa, discharge at 50 kPa (gauge, Patm = 101.325 kPa). Static head Hstatic = 10 m, suction level Zs = 2 m (2 m above the pump centreline). Friction: suction 5 kPa, discharge 20 kPa. No NPSHr given (engine placeholder); clear liquid (no slurry check).

Head conversionH = P / (ρg): ρg = 1,000 × 9.81 / 1000 = 9.8100 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (50 − 0) / 9.8100 = 5.097 m
Friction headshf,s = 5 / 9.8100 = 0.510 m; hf,d = 20 / 9.8100 = 2.039 m; total 2.548 m
Total dynamic headTDH = Hstatic + Hp + hf = 10 + 5.097 + 2.548 = 17.645 m
Differential pressureΔP = TDH × ρg = 17.645 × 9.8100 = 173.10 kPa
Suction pressurePs,abs = 0 + 101.325 = 101.325 kPa abs
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (101.325 − 2.34) / 9.8100 + 2 − 0.510 = 11.581 m
NPSH requiredNo pump curve given — engine placeholder NPSHr = 2.5 + 0.05 × Q² (Q in m³/s) = 2.5 + 0.05 × (10 / 3600)² = 2.500 m (not a pump property)
NPSH marginNPSHa − NPSHr = 11.581 − 2.500 = 9.081 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Safe') → 9.081 vs limit 1.000 m PASS
Suction velocityA = π × 0.05² / 4 = 0.001963 m²; v = (10 / 3600) / 0.001963 = 1.415 m/s
Result1/1 checks pass → PASS; TDH 17.64 m, NPSHa 11.58 m vs NPSHr 2.50 m; governing: npsh margin. NPSHr is a placeholder (≈ 2.5 m); use the selected pump's NPSH3 curve at the duty flow.
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 9.8100 kPa/m; TDH = 10 + (50 − 0)/9.8100 + (5 + 20)/9.8100 = 17.645 m; ΔP = 17.645 × 9.8100 = 173.10 kPa; P_s,abs = 0 + 101.325 = 101.325 kPa abs; NPSHa = (101.325 − 2.34)/9.8100 + 2 − 0.510 = 11.581 m; NPSHr placeholder = 2.5 + 0.05 × (10/3600)² = 2.500 m; margin = 9.081 m vs 1.0 m; v = (10/3600)/(π × 0.05²/4) = 1.415 m/s (validation case c0011-clean-water-flooded)

Example 3 — Sand slurry in an 80 mm suction — deposition risk

A sand slurry (Sₛ 2.65) at too low a velocity: the suction velocity is below the Durand limit, so the deposition check fails and governs although NPSH is fine.

Given: Q = 20 m³/h through a 80 mm ID suction pipe; ρ = 1,200 kg/m³, Pv = 5 kPa abs. Suction surface at 50 kPa, discharge at 200 kPa (gauge, Patm = 101.325 kPa). Static head Hstatic = 8 m, suction level Zs = 0.5 m (0.5 m above the pump centreline). Friction: suction 10 kPa, discharge 80 kPa. No NPSHr given (engine placeholder); settling slurry, solids Ss = 2.65, Durand FL = 0.9.

Head conversionH = P / (ρg): ρg = 1,200 × 9.81 / 1000 = 11.7720 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (200 − 50) / 11.7720 = 12.742 m
Friction headshf,s = 10 / 11.7720 = 0.849 m; hf,d = 80 / 11.7720 = 6.796 m; total 7.645 m
Total dynamic headTDH = Hstatic + Hp + hf = 8 + 12.742 + 7.645 = 28.387 m
Differential pressureΔP = TDH × ρg = 28.387 × 11.7720 = 334.18 kPa
Suction pressurePs,abs = 50 + 101.325 = 151.325 kPa abs
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (151.325 − 5) / 11.7720 + 0.5 − 0.849 = 12.080 m
NPSH requiredNo pump curve given — engine placeholder NPSHr = 2.5 + 0.05 × Q² (Q in m³/s) = 2.5 + 0.05 × (20 / 3600)² = 2.500 m (not a pump property)
NPSH marginNPSHa − NPSHr = 12.080 − 2.500 = 9.580 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Safe') → 9.580 vs limit 1.000 m PASS
Suction velocityA = π × 0.08² / 4 = 0.005027 m²; v = (20 / 3600) / 0.005027 = 1.105 m/s
Durand deposition velocitySL = 1,200 / 1000 = 1.2000; VL = FL √(2gD(Ss − SL) / SL) = 0.9 × √(2 × 9.81 × 0.08 × (2.65 − 1.2000) / 1.2000) = 1.239 m/s
Deposition checkv > VL: v / VL = 1.105 / 1.239 = 0.892 (engine: ≥ 1.3 good margin, 1–1.3 risk) → 'High Risk of Settling' → 1.105 vs limit 1.239 m/s FAIL
Result1/2 checks pass → FAIL; TDH 28.39 m, NPSHa 12.08 m vs NPSHr 2.50 m; v 1.10 vs VL 1.24 m/s; governing: slurry deposition. NPSHr is a placeholder (≈ 2.5 m); use the selected pump's NPSH3 curve at the duty flow.
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 11.7720 kPa/m; TDH = 8 + (200 − 50)/11.7720 + (10 + 80)/11.7720 = 28.387 m; ΔP = 28.387 × 11.7720 = 334.18 kPa; P_s,abs = 50 + 101.325 = 151.325 kPa abs; NPSHa = (151.325 − 5)/11.7720 + 0.5 − 0.849 = 12.080 m; NPSHr placeholder = 2.5 + 0.05 × (20/3600)² = 2.500 m; margin = 9.580 m vs 1.0 m; v = (20/3600)/(π × 0.08²/4) = 1.105 m/s; Durand (1953) V_L = 0.9 × √(2 × 9.81 × 0.08 × (2.65 − 1.2)/1.2) = 1.239 m/s → v/V_L = 0.892 (High Risk of Settling) (validation case c0011-slurry-settling-fail)

Example 4 — Slurry between V_L and 1.3 V_L

The suction velocity clears the Durand limit (check passes) but by less than 30 %, so the engine reports 'Risk of Settling'.

Given: Q = 40 m³/h through a 100 mm ID suction pipe; ρ = 1,150 kg/m³, Pv = 3.2 kPa abs. Suction surface at 0 kPa, discharge at 0 kPa (gauge, Patm = 101.325 kPa). Static head Hstatic = 12 m, suction level Zs = 1.5 m (1.5 m above the pump centreline). Friction: suction 4 kPa, discharge 45 kPa. NPSHr 3.5 m from the pump curve; settling slurry, solids Ss = 2.65, Durand FL = 0.8, d50 = 250 µm.

Head conversionH = P / (ρg): ρg = 1,150 × 9.81 / 1000 = 11.2815 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (0 − 0) / 11.2815 = 0.000 m
Friction headshf,s = 4 / 11.2815 = 0.355 m; hf,d = 45 / 11.2815 = 3.989 m; total 4.343 m
Total dynamic headTDH = Hstatic + Hp + hf = 12 + 0.000 + 4.343 = 16.343 m
Differential pressureΔP = TDH × ρg = 16.343 × 11.2815 = 184.38 kPa
Suction pressurePs,abs = 0 + 101.325 = 101.325 kPa abs
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (101.325 − 3.2) / 11.2815 + 1.5 − 0.355 = 9.843 m
NPSH requiredNPSHr = 3.500 m (pump curve, given)
NPSH marginNPSHa − NPSHr = 9.843 − 3.500 = 6.343 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Safe') → 6.343 vs limit 1.000 m PASS
Suction velocityA = π × 0.1² / 4 = 0.007854 m²; v = (40 / 3600) / 0.007854 = 1.415 m/s
Durand deposition velocitySL = 1,150 / 1000 = 1.1500; VL = FL √(2gD(Ss − SL) / SL) = 0.8 × √(2 × 9.81 × 0.1 × (2.65 − 1.1500) / 1.1500) = 1.280 m/s
Deposition checkv > VL: v / VL = 1.415 / 1.280 = 1.105 (engine: ≥ 1.3 good margin, 1–1.3 risk) → 'Risk of Settling' → 1.415 vs limit 1.280 m/s PASS
Result2/2 checks pass → PASS; TDH 16.34 m, NPSHa 9.84 m vs NPSHr 3.50 m; v 1.42 vs VL 1.28 m/s; governing: npsh margin
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 11.2815 kPa/m; TDH = 12 + (0 − 0)/11.2815 + (4 + 45)/11.2815 = 16.343 m; ΔP = 16.343 × 11.2815 = 184.38 kPa; P_s,abs = 0 + 101.325 = 101.325 kPa abs; NPSHa = (101.325 − 3.2)/11.2815 + 1.5 − 0.355 = 9.843 m; NPSHr = 3.500 m (pump curve); margin = 6.343 m vs 1.0 m; v = (40/3600)/(π × 0.1²/4) = 1.415 m/s; Durand (1953) V_L = 0.8 × √(2 × 9.81 × 0.1 × (2.65 − 1.15)/1.15) = 1.280 m/s → v/V_L = 1.105 (Risk of Settling) (validation case c0011-slurry-risk-band)

Example 5 — Water at 90 °C lifted 3 m — cavitation

Hot water near its boiling point combined with a suction lift leaves negative NPSHa: the margin check fails by a wide margin.

Given: Q = 5 m³/h through a 40 mm ID suction pipe; ρ = 965.3 kg/m³, Pv = 70.18 kPa abs. Suction surface at 0 kPa, discharge at 100 kPa (gauge, Patm = 101.325 kPa). Static head Hstatic = 10 m, suction level Zs = -3 m (3 m below the pump centreline). Friction: suction 8 kPa, discharge 30 kPa. NPSHr 3 m from the pump curve; clear liquid (no slurry check).

Head conversionH = P / (ρg): ρg = 965.3 × 9.81 / 1000 = 9.4696 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (100 − 0) / 9.4696 = 10.560 m
Friction headshf,s = 8 / 9.4696 = 0.845 m; hf,d = 30 / 9.4696 = 3.168 m; total 4.013 m
Total dynamic headTDH = Hstatic + Hp + hf = 10 + 10.560 + 4.013 = 24.573 m
Differential pressureΔP = TDH × ρg = 24.573 × 9.4696 = 232.70 kPa
Suction pressurePs,abs = 0 + 101.325 = 101.325 kPa abs
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (101.325 − 70.18) / 9.4696 − 3 − 0.845 = -0.556 m
NPSH requiredNPSHr = 3.000 m (pump curve, given)
NPSH marginNPSHa − NPSHr = -0.556 − 3.000 = -3.556 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Risky - Cavitation Likely') → -3.556 vs limit 1.000 m FAIL
Suction velocityA = π × 0.04² / 4 = 0.001257 m²; v = (5 / 3600) / 0.001257 = 1.105 m/s
Result0/1 checks pass → FAIL; TDH 24.57 m, NPSHa -0.56 m vs NPSHr 3.00 m; governing: npsh margin
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 9.4696 kPa/m; TDH = 10 + (100 − 0)/9.4696 + (8 + 30)/9.4696 = 24.573 m; ΔP = 24.573 × 9.4696 = 232.70 kPa; P_s,abs = 0 + 101.325 = 101.325 kPa abs; NPSHa = (101.325 − 70.18)/9.4696 − 3 − 0.845 = -0.556 m; NPSHr = 3.000 m (pump curve); margin = -3.556 m vs 1.0 m; v = (5/3600)/(π × 0.04²/4) = 1.105 m/s (validation case c0011-hot-water-suction-lift)

Example 6 — Boiler feed from a deaerator at saturation

A liquid stored at its own vapour pressure (deaerator at 105 °C): the pressure term cancels and NPSHa is just the static submergence minus suction friction.

Given: Q = 30 m³/h through a 100 mm ID suction pipe; ρ = 954.7 kg/m³, Pv = 120.8 kPa abs. Suction surface at 120.8 kPa, discharge at 1,500 kPa (absolute). Static head Hstatic = 2 m, suction level Zs = 6 m (6 m above the pump centreline). Friction: suction 6 kPa, discharge 60 kPa. NPSHr 3.2 m from the pump curve; clear liquid (no slurry check).

Head conversionH = P / (ρg): ρg = 954.7 × 9.81 / 1000 = 9.3656 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (1,500 − 120.8) / 9.3656 = 147.262 m
Friction headshf,s = 6 / 9.3656 = 0.641 m; hf,d = 60 / 9.3656 = 6.406 m; total 7.047 m
Total dynamic headTDH = Hstatic + Hp + hf = 2 + 147.262 + 7.047 = 156.309 m
Differential pressureΔP = TDH × ρg = 156.309 × 9.3656 = 1,463.93 kPa
Suction pressurePs,abs = 120.8 kPa abs (given as absolute)
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (120.800 − 120.8) / 9.3656 + 6 − 0.641 = 5.359 m
NPSH requiredNPSHr = 3.200 m (pump curve, given)
NPSH marginNPSHa − NPSHr = 5.359 − 3.200 = 2.159 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Safe') → 2.159 vs limit 1.000 m PASS
Suction velocityA = π × 0.1² / 4 = 0.007854 m²; v = (30 / 3600) / 0.007854 = 1.061 m/s
Result1/1 checks pass → PASS; TDH 156.31 m, NPSHa 5.36 m vs NPSHr 3.20 m; governing: npsh margin
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 9.3656 kPa/m; TDH = 2 + (1500 − 120.8)/9.3656 + (6 + 60)/9.3656 = 156.309 m; ΔP = 156.309 × 9.3656 = 1 463.93 kPa; P_s,abs = 120.800 kPa abs (given); NPSHa = (120.800 − 120.8)/9.3656 + 6 − 0.641 = 5.359 m; NPSHr = 3.200 m (pump curve); margin = 2.159 m vs 1.0 m; v = (30/3600)/(π × 0.1²/4) = 1.061 m/s (validation case c0011-deaerator-saturated)

Example 7 — Closed vessel to closed vessel, absolute pressures

Both vessel pressures given absolute: the pressure difference drives most of the head, and no atmospheric pressure is added to NPSHa.

Given: Q = 60 m³/h through a 125 mm ID suction pipe; ρ = 998 kg/m³, Pv = 2.339 kPa abs. Suction surface at 250 kPa, discharge at 650 kPa (absolute). Static head Hstatic = 6 m, suction level Zs = 1 m (1 m above the pump centreline). Friction: suction 7.5 kPa, discharge 55 kPa. NPSHr 4 m from the pump curve; clear liquid (no slurry check).

Head conversionH = P / (ρg): ρg = 998 × 9.81 / 1000 = 9.7904 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (650 − 250) / 9.7904 = 40.856 m
Friction headshf,s = 7.5 / 9.7904 = 0.766 m; hf,d = 55 / 9.7904 = 5.618 m; total 6.384 m
Total dynamic headTDH = Hstatic + Hp + hf = 6 + 40.856 + 6.384 = 53.240 m
Differential pressureΔP = TDH × ρg = 53.240 × 9.7904 = 521.24 kPa
Suction pressurePs,abs = 250 kPa abs (given as absolute)
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (250.000 − 2.339) / 9.7904 + 1 − 0.766 = 25.530 m
NPSH requiredNPSHr = 4.000 m (pump curve, given)
NPSH marginNPSHa − NPSHr = 25.530 − 4.000 = 21.530 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Safe') → 21.530 vs limit 1.000 m PASS
Suction velocityA = π × 0.125² / 4 = 0.012272 m²; v = (60 / 3600) / 0.012272 = 1.358 m/s
Result1/1 checks pass → PASS; TDH 53.24 m, NPSHa 25.53 m vs NPSHr 4.00 m; governing: npsh margin
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 9.7904 kPa/m; TDH = 6 + (650 − 250)/9.7904 + (7.5 + 55)/9.7904 = 53.240 m; ΔP = 53.240 × 9.7904 = 521.24 kPa; P_s,abs = 250.000 kPa abs (given); NPSHa = (250.000 − 2.339)/9.7904 + 1 − 0.766 = 25.530 m; NPSHr = 4.000 m (pump curve); margin = 21.530 m vs 1.0 m; v = (60/3600)/(π × 0.125²/4) = 1.358 m/s (validation case c0011-pressurised-vessel-absolute)

Example 8 — Suction lift at 1 500 m altitude

Reduced atmospheric pressure at altitude (84.56 kPa, standard atmosphere at 1 500 m) erodes NPSHa; with a 2.5 m lift the margin lands in the 1–2 m 'acceptable' band and still passes.

Given: Q = 25 m³/h through a 80 mm ID suction pipe; ρ = 998 kg/m³, Pv = 2.339 kPa abs. Suction surface at 0 kPa, discharge at 0 kPa (gauge, Patm = 84.56 kPa). Static head Hstatic = 20 m, suction level Zs = -2.5 m (2.5 m below the pump centreline). Friction: suction 6 kPa, discharge 35 kPa. NPSHr 3.4 m from the pump curve; clear liquid (no slurry check).

Head conversionH = P / (ρg): ρg = 998 × 9.81 / 1000 = 9.7904 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (0 − 0) / 9.7904 = 0.000 m
Friction headshf,s = 6 / 9.7904 = 0.613 m; hf,d = 35 / 9.7904 = 3.575 m; total 4.188 m
Total dynamic headTDH = Hstatic + Hp + hf = 20 + 0.000 + 4.188 = 24.188 m
Differential pressureΔP = TDH × ρg = 24.188 × 9.7904 = 236.81 kPa
Suction pressurePs,abs = 0 + 84.56 = 84.560 kPa abs
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (84.560 − 2.339) / 9.7904 − 2.5 − 0.613 = 5.285 m
NPSH requiredNPSHr = 3.400 m (pump curve, given)
NPSH marginNPSHa − NPSHr = 5.285 − 3.400 = 1.885 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Acceptable') → 1.885 vs limit 1.000 m PASS
Suction velocityA = π × 0.08² / 4 = 0.005027 m²; v = (25 / 3600) / 0.005027 = 1.382 m/s
Result1/1 checks pass → PASS; TDH 24.19 m, NPSHa 5.29 m vs NPSHr 3.40 m; governing: npsh margin
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 9.7904 kPa/m; TDH = 20 + (0 − 0)/9.7904 + (6 + 35)/9.7904 = 24.188 m; ΔP = 24.188 × 9.7904 = 236.81 kPa; P_s,abs = 0 + 84.56 = 84.560 kPa abs; NPSHa = (84.560 − 2.339)/9.7904 − 2.5 − 0.613 = 5.285 m; NPSHr = 3.400 m (pump curve); margin = 1.885 m vs 1.0 m; v = (25/3600)/(π × 0.08²/4) = 1.382 m/s (validation case c0011-altitude-1500m-lift)

Example 9 — NPSH margin just under 1 m

Boundary case: NPSHa exceeds NPSHr, but by only 0.945 m — under the 1 m margin the tool requires, so the check fails.

Given: Q = 50 m³/h through a 100 mm ID suction pipe; ρ = 998 kg/m³, Pv = 7.384 kPa abs. Suction surface at 0 kPa, discharge at 150 kPa (gauge, Patm = 101.325 kPa). Static head Hstatic = 5 m, suction level Zs = -4 m (4 m below the pump centreline). Friction: suction 9.79 kPa, discharge 40 kPa. NPSHr 3.65 m from the pump curve; clear liquid (no slurry check).

Head conversionH = P / (ρg): ρg = 998 × 9.81 / 1000 = 9.7904 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (150 − 0) / 9.7904 = 15.321 m
Friction headshf,s = 9.79 / 9.7904 = 1.000 m; hf,d = 40 / 9.7904 = 4.086 m; total 5.086 m
Total dynamic headTDH = Hstatic + Hp + hf = 5 + 15.321 + 5.086 = 25.407 m
Differential pressureΔP = TDH × ρg = 25.407 × 9.7904 = 248.74 kPa
Suction pressurePs,abs = 0 + 101.325 = 101.325 kPa abs
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (101.325 − 7.384) / 9.7904 − 4 − 1.000 = 4.595 m
NPSH requiredNPSHr = 3.650 m (pump curve, given)
NPSH marginNPSHa − NPSHr = 4.595 − 3.650 = 0.945 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Risky - Cavitation Likely') → 0.945 vs limit 1.000 m FAIL
Suction velocityA = π × 0.1² / 4 = 0.007854 m²; v = (50 / 3600) / 0.007854 = 1.768 m/s
Result0/1 checks pass → FAIL; TDH 25.41 m, NPSHa 4.59 m vs NPSHr 3.65 m; governing: npsh margin
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 9.7904 kPa/m; TDH = 5 + (150 − 0)/9.7904 + (9.79 + 40)/9.7904 = 25.407 m; ΔP = 25.407 × 9.7904 = 248.74 kPa; P_s,abs = 0 + 101.325 = 101.325 kPa abs; NPSHa = (101.325 − 7.384)/9.7904 − 4 − 1.000 = 4.595 m; NPSHr = 3.650 m (pump curve); margin = 0.945 m vs 1.0 m; v = (50/3600)/(π × 0.1²/4) = 1.768 m/s (validation case c0011-margin-just-under-1m)

Example 10 — Light hydrocarbon from an atmospheric tank

A volatile, light liquid (ρ 720 kg/m³, Pv 55 kPa): heads are larger per kPa than for water and the high vapour pressure takes most of the atmospheric head.

Given: Q = 45 m³/h through a 100 mm ID suction pipe; ρ = 720 kg/m³, Pv = 55 kPa abs. Suction surface at 0 kPa, discharge at 300 kPa (gauge, Patm = 101.325 kPa). Static head Hstatic = 8 m, suction level Zs = 3 m (3 m above the pump centreline). Friction: suction 5 kPa, discharge 70 kPa. NPSHr 3 m from the pump curve; clear liquid (no slurry check).

Head conversionH = P / (ρg): ρg = 720 × 9.81 / 1000 = 7.0632 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (300 − 0) / 7.0632 = 42.474 m
Friction headshf,s = 5 / 7.0632 = 0.708 m; hf,d = 70 / 7.0632 = 9.911 m; total 10.618 m
Total dynamic headTDH = Hstatic + Hp + hf = 8 + 42.474 + 10.618 = 61.092 m
Differential pressureΔP = TDH × ρg = 61.092 × 7.0632 = 431.51 kPa
Suction pressurePs,abs = 0 + 101.325 = 101.325 kPa abs
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (101.325 − 55) / 7.0632 + 3 − 0.708 = 8.851 m
NPSH requiredNPSHr = 3.000 m (pump curve, given)
NPSH marginNPSHa − NPSHr = 8.851 − 3.000 = 5.851 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Safe') → 5.851 vs limit 1.000 m PASS
Suction velocityA = π × 0.1² / 4 = 0.007854 m²; v = (45 / 3600) / 0.007854 = 1.592 m/s
Result1/1 checks pass → PASS; TDH 61.09 m, NPSHa 8.85 m vs NPSHr 3.00 m; governing: npsh margin
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 7.0632 kPa/m; TDH = 8 + (300 − 0)/7.0632 + (5 + 70)/7.0632 = 61.092 m; ΔP = 61.092 × 7.0632 = 431.51 kPa; P_s,abs = 0 + 101.325 = 101.325 kPa abs; NPSHa = (101.325 − 55)/7.0632 + 3 − 0.708 = 8.851 m; NPSHr = 3.000 m (pump curve); margin = 5.851 m vs 1.0 m; v = (45/3600)/(π × 0.1²/4) = 1.592 m/s (validation case c0011-light-hydrocarbon)

Example 11 — Discharge below suction into a pressurised header

A negative static head (discharge 5 m below the suction level) reduces the TDH; the pump must still overcome the header pressure and friction.

Given: Q = 15 m³/h through a 65 mm ID suction pipe; ρ = 998 kg/m³, Pv = 2.339 kPa abs. Suction surface at 0 kPa, discharge at 250 kPa (gauge, Patm = 101.325 kPa). Static head Hstatic = -5 m, suction level Zs = 5 m (5 m above the pump centreline). Friction: suction 3 kPa, discharge 25 kPa. NPSHr 2 m from the pump curve; clear liquid (no slurry check).

Head conversionH = P / (ρg): ρg = 998 × 9.81 / 1000 = 9.7904 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (250 − 0) / 9.7904 = 25.535 m
Friction headshf,s = 3 / 9.7904 = 0.306 m; hf,d = 25 / 9.7904 = 2.554 m; total 2.860 m
Total dynamic headTDH = Hstatic + Hp + hf = -5 + 25.535 + 2.860 = 23.395 m
Differential pressureΔP = TDH × ρg = 23.395 × 9.7904 = 229.05 kPa
Suction pressurePs,abs = 0 + 101.325 = 101.325 kPa abs
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (101.325 − 2.339) / 9.7904 + 5 − 0.306 = 14.804 m
NPSH requiredNPSHr = 2.000 m (pump curve, given)
NPSH marginNPSHa − NPSHr = 14.804 − 2.000 = 12.804 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Safe') → 12.804 vs limit 1.000 m PASS
Suction velocityA = π × 0.065² / 4 = 0.003318 m²; v = (15 / 3600) / 0.003318 = 1.256 m/s
Result1/1 checks pass → PASS; TDH 23.39 m, NPSHa 14.80 m vs NPSHr 2.00 m; governing: npsh margin
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 9.7904 kPa/m; TDH = -5 + (250 − 0)/9.7904 + (3 + 25)/9.7904 = 23.395 m; ΔP = 23.395 × 9.7904 = 229.05 kPa; P_s,abs = 0 + 101.325 = 101.325 kPa abs; NPSHa = (101.325 − 2.339)/9.7904 + 5 − 0.306 = 14.804 m; NPSHr = 2.000 m (pump curve); margin = 12.804 m vs 1.0 m; v = (15/3600)/(π × 0.065²/4) = 1.256 m/s (validation case c0011-negative-static-head)

Example 12 — 3 600 m³/h intake with the placeholder NPSHr

At Q = 1 m³/s the engine's placeholder NPSHr = 2.5 + 0.05 Q² reaches only 2.55 m — it is not a pump property, and the tool warns to use the real NPSH3 curve.

Given: Q = 3,600 m³/h through a 600 mm ID suction pipe; ρ = 999.7 kg/m³, Pv = 1.228 kPa abs. Suction surface at 0 kPa, discharge at 0 kPa (gauge, Patm = 101.325 kPa). Static head Hstatic = 18 m, suction level Zs = 2 m (2 m above the pump centreline). Friction: suction 8 kPa, discharge 40 kPa. No NPSHr given (engine placeholder); clear liquid (no slurry check).

Head conversionH = P / (ρg): ρg = 999.7 × 9.81 / 1000 = 9.8071 kPa/m
Pressure headHp = (Pd − Ps) / ρg = (0 − 0) / 9.8071 = 0.000 m
Friction headshf,s = 8 / 9.8071 = 0.816 m; hf,d = 40 / 9.8071 = 4.079 m; total 4.894 m
Total dynamic headTDH = Hstatic + Hp + hf = 18 + 0.000 + 4.894 = 22.894 m
Differential pressureΔP = TDH × ρg = 22.894 × 9.8071 = 224.53 kPa
Suction pressurePs,abs = 0 + 101.325 = 101.325 kPa abs
NPSH availableNPSHa = (Ps,abs − Pv) / ρg + Zs − hf,s = (101.325 − 1.228) / 9.8071 + 2 − 0.816 = 11.391 m
NPSH requiredNo pump curve given — engine placeholder NPSHr = 2.5 + 0.05 × Q² (Q in m³/s) = 2.5 + 0.05 × (3,600 / 3600)² = 2.550 m (not a pump property)
NPSH marginNPSHa − NPSHr = 11.391 − 2.550 = 8.841 m, required ≥ 1.0 m (ANSI/HI 9.6.1 margin; engine band 'Safe') → 8.841 vs limit 1.000 m PASS
Suction velocityA = π × 0.6² / 4 = 0.282743 m²; v = (3,600 / 3600) / 0.282743 = 3.537 m/s
Result1/1 checks pass → PASS; TDH 22.89 m, NPSHa 11.39 m vs NPSHr 2.55 m; governing: npsh margin. NPSHr is a placeholder (≈ 2.5 m); use the selected pump's NPSH3 curve at the duty flow.
ReferenceHand calculation (Karassik Pump Handbook system-head method; NPSH per ANSI/HI 9.6.1): ρg = 9.8071 kPa/m; TDH = 18 + (0 − 0)/9.8071 + (8 + 40)/9.8071 = 22.894 m; ΔP = 22.894 × 9.8071 = 224.53 kPa; P_s,abs = 0 + 101.325 = 101.325 kPa abs; NPSHa = (101.325 − 1.228)/9.8071 + 2 − 0.816 = 11.391 m; NPSHr placeholder = 2.5 + 0.05 × (3600/3600)² = 2.550 m; margin = 8.841 m vs 1.0 m; v = (3600/3600)/(π × 0.6²/4) = 3.537 m/s (validation case c0011-large-flow-placeholder)

Standards & References

  • Hydraulic Institute Standards — ANSI/HI 9.6.1 (NPSH margin ratios), ANSI/HI 14.3 (rotodynamic pump design), ANSI/HI 9.6.7 (effects of liquid viscosity on performance)
  • ASHRAE Handbook — HVAC Systems and Equipment — Pump selection and system curve methodology
  • Durand, R. (1953) — "Basic Relationships of the Transportation of Solids in Pipes" — Minnesota International Hydraulics Convention, settling velocity method
  • Karassik et al., Pump Handbook (McGraw-Hill) — Centrifugal pump system analysis and NPSH fundamentals

Tips & Limitations

Tips
  • Always use manufacturer NPSHr data for final pump selection — the built-in estimate is only for preliminary screening.
  • For gauge pressure inputs, adjust atmospheric pressure for altitude. At 1000 m elevation, Patm drops to approximately 89.9 kPa.
  • A positive suction static head (flooded suction) greatly improves NPSHa. Use flooded suction wherever possible for hot or volatile fluids.
  • The 1.3× safety factor on settling velocity is a minimum — for critical slurry pipelines, use 1.5× or higher.
  • Friction losses should include all fittings, valves, and accessories — not just straight pipe. Use a separate pipe friction calculator (Darcy-Weisbach or Hazen-Williams) to determine these values.
  • When viscosity exceeds 10 cP, apply Hydraulic Institute viscosity correction factors to the pump performance curves before using them.
Limitations
  • Steady-state only — does not model transient conditions such as water hammer, surge, or pump start-up.
  • Single pump — does not model series or parallel pump arrangements. TDH is for a single pump duty point.
  • No system curve — calculates TDH at the design flow rate only. Does not generate a full system H–Q curve for pump curve overlay.
  • Friction inputs are manual — the calculator does not compute pipe friction internally. Friction losses must be determined externally and entered in kPa.
  • NPSHr estimate is approximate — the empirical formula is not valid for all pump types and flow ranges. Always verify with manufacturer data.
  • Slurry analysis is simplified — uses the Durand method with a single FL factor. Does not account for particle size distribution, concentration effects, or non-Newtonian rheology.

Developer Guide

Architecture

File layout:

  • components/c0011_centrifugal_pump/component.py — Component registration, parameter schema, summary cards builder, QR code generator
  • components/c0011_centrifugal_pump/calculations.py — Pure math functions and physical constants (no Django dependencies)
  • components/c0011_centrifugal_pump/equations.py — Equation builder for report generation (MathJax articles)
  • components/c0011_centrifugal_pump/excel_generator.py — Excel report generator (openpyxl workbook with step-by-step working)

The calculator class is CentrifugalPumpCalculator, extending BaseCalculator. It delegates all math to the pure function calculate_centrifugal_pump_system().

Summary cards are built by get_summary_cards(result) and display four key outputs: TDH, Differential Pressure, NPSH Status, and Settling Status. Status card styling (success, warning, danger) is determined by the assessment functions.

Constants:

  • GRAVITY = 9.81 m/s²
  • ATMOSPHERIC_PRESSURE = 101.325 kPa (default, overridable)

Code Paths

Key functions in calculations.py:

Function Purpose
pressure_to_head(pressure_kpa, density) Convert kPa to metres of head
head_to_pressure(head_m, density) Convert metres of head to kPa
calculate_flow_area(diameter_mm) Pipe cross-sectional area (m²)
calculate_flow_velocity(flow_rate_m3h, diameter_mm) Fluid velocity in pipe (m/s)
calculate_liquid_specific_gravity(density) SG = ρ / 1000
calculate_durand_settling_velocity(...) Durand critical settling velocity (m/s)
estimate_npsh_required(flow_rate_m3h) Empirical NPSHr estimate
calculate_npsh_available(...) NPSHa with gauge/absolute pressure handling
assess_npsh_status(npsh_a, npsh_r) Returns (status_text, css_class) tuple
assess_settling_status(flow_v, settling_v) Returns (status_text, css_class) tuple
calculate_centrifugal_pump_system(data) Main orchestrator — calls all above functions

Key methods in component.py:

Method / Function Purpose
CentrifugalPumpCalculator.validate_parameters() Range checks and engineering warnings (viscosity, cavitation proximity, solid SG)
CentrifugalPumpCalculator.calculate() Prepares params, calls pure calc, adds result-based warnings
get_summary_cards(result) Builds dashboard summary card list
equation_builder(result) Delegates to equations.build_equations() for report
register_component(registry) Registers calc type c0011_centrifugal_pump

Key function in excel_generator.py:

Function Purpose
create_c0011_excel_report(calculation) Generates openpyxl Workbook with styled sections: initial values, step-by-step calculations, and final results

Validation flow:

  1. validate_parameters() checks density, flow rate, pipe diameter ranges
  2. Warns if inlet absolute pressure is within 10 kPa of vapor pressure
  3. Warns if viscosity exceeds 10 cP
  4. Warns if solid SG is less than liquid SG (buoyant particles)
  5. calculate() adds post-calculation warnings for NPSH margin and settling risk

Testing

Running tests:

pytest calcs/components/c0011_centrifugal_pump/ -v
pytest calcs/test_c0011* -v
pytest -m validation mcp_public/tests/test_validation_corpus.py -k c0011 -q
pytest calcs/test_help_examples.py -k pump -q

Worked examples: the examples above are generated from the validation corpus (mcp_public/validation/cases/fe_calc_pump/, ids c0011-*) by python manage.py generate_help_examples --tool fe_calc_pump, which writes _c0011_centrifugal_pump_examples.html. Add or change a case there, then regenerate; the fragment is never edited by hand.

How to extend:

  1. Add new friction calculation methods (e.g., built-in Darcy-Weisbach) by adding pure functions to calculations.py and wiring them via a new schema toggle in component.py.
  2. Add system curve generation by computing TDH at multiple flow rates and returning an array of (Q, H) points.
  3. For multi-pump arrangements, extend the orchestrator to sum/split heads and flows appropriately.
  4. Alternative settling models (e.g., Wilson-Addie-Sellgren) can be added alongside the Durand function with a method selection parameter.
  5. Write tests covering edge cases: zero flow, equal solid/liquid SG, negative suction head, vapor pressure exceeding inlet absolute pressure.