Sprinkler & fire pump hydraulics (NFPA 13/20)
NFPA 13/20 water-based fire suppression hydraulics — sprinkler discharge, pipe friction loss, fitting equivalents, hazard demand, and fire pump NPSH, in one reference.
Each relation set below includes a Voici11Voici compiles a notebook to a static, serverless dashboard — mocked here as a static page, since this pipeline has no Jupyter kernel to run against. dashboard: a matplotlib-styled chart with the live calculator input marked as a red point on the curve.
1.7 · Sprinkler discharge & K-factor
$$Q = K\sqrt{P}$$
$K$ orifice discharge coefficient (gpm/psi^0.5), $P$ pressure at the sprinkler (psi). Source: NFPA 13 §27.2.
import numpy as np, matplotlib.pyplot as plt P = np.linspace(1, 100, 200) Q = K*np.sqrt(P) plt.plot(P, Q); plt.scatter([P_input],[Q_input], color='red', zorder=3)
1.8 · Hazen-Williams friction loss
$$p_m = 4.52\,\frac{Q^{1.85}}{C^{1.85}\,d^{4.87}}$$
$Q$ flow (gpm), $C$ pipe roughness factor (120 black steel typical), $d$ internal diameter (in). Source: NFPA 13 §27.2, NFPA 14.
import numpy as np, matplotlib.pyplot as plt Q = np.linspace(5, 300, 200) pm = 4.52*Q**1.85/(C**1.85*d**4.87) plt.plot(Q, pm); plt.scatter([Q_input],[pm_input], color='red', zorder=3)
1.9 · Equivalent pipe length
$$L_{eq} = \sum n_i L_{i,\text{table}}$$
Converts fittings to equivalent straight pipe length (Schedule 40 steel, typical NFPA 13 Table 27.2.3.1.1 values). Source: NFPA 13 Table 27.2.3.1.1.
1.10 · Sprinkler density/area demand
$$Q_{\text{demand}} = \left(\text{Density}\times\text{Design Area}\right) + Q_{\text{hose}}$$
Baseline water supply demand by hazard classification. Source: NFPA 13 §19.3.
import numpy as np, matplotlib.pyplot as plt area = np.linspace(500, 5000, 200) Q = density*area + Qhose plt.plot(area, Q); plt.scatter([area_input],[Q_input], color='red', zorder=3)
1.11 · Fire pump net head & NPSH
$$\text{NPSHA} = h_{sa} + h_s - h_{fs} - h_{vp}$$
$h_{sa}$ atmospheric pressure head (33.9 ft at sea level), $h_s$ static suction head (negative if a lift), $h_{fs}$ suction friction loss, $h_{vp}$ vapor pressure head. Source: NFPA 20 §4.15.
import numpy as np, matplotlib.pyplot as plt hs = np.linspace(-20, 20, 200) NPSHA = hsa + hs - hfs - hvp plt.plot(hs, NPSHA); plt.axhline(NPSHR, ls='--'); plt.scatter([hs_input],[NPSHA_input], color='red', zorder=3)