Smoke control systems (NFPA 92)
NFPA 92 Standard for Smoke Control Systems §4.4 & §5.5 — atrium plume mass flow, exhaust sizing, and stairwell/door pressurization checks, 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.1 · Axisymmetric plume mass flow
$$\dot{m}_p = 0.071\,\dot{Q}_c^{1/3} z^{5/3} + 0.0018\,\dot{Q}_c \quad (z \ge z_l)$$
$$z_l = 0.166\,\dot{Q}_c^{2/5}$$
$\dot{m}_p$ smoke mass flow (kg/s), $\dot{Q}_c$ convective HRR (kW), $z$ clear layer height (m). Source: NFPA 92 §5.5, SFPE Handbook.
import numpy as np, matplotlib.pyplot as plt z = np.linspace(0.5, 20, 200) mp = 0.071*Qc**(1/3)*z**(5/3) + 0.0018*Qc plt.plot(z, mp); plt.scatter([z_input],[mp_input], color='red', zorder=3)
1.2 · Balcony spill & window plume
$$\dot{m}_p = 0.36\left(z+z_b\right)^{1/3} W \dot{Q}_c^{1/3}$$
$W$ balcony width (m), $z$ height above balcony (m), $z_b$ balcony height above fire source (m). Source: NFPA 92 §5.5.
import numpy as np, matplotlib.pyplot as plt z = np.linspace(0.2, 10, 200) mp = 0.36*(z+zb)**(1/3)*W*Qc**(1/3) plt.plot(z, mp); plt.scatter([z_input],[mp_input], color='red', zorder=3)
1.3 · Volumetric smoke exhaust & density correction
$$T_s = T_0 + \frac{\dot{Q}_c}{\dot{m}_p c_p},\quad \rho_s = \rho_0\frac{T_0}{T_s},\quad V_e = \frac{\dot{m}_p}{\rho_s}$$
$c_p \approx 1.0\ \text{kJ/kg·K}$. Converts smoke mass flow to fan volumetric duty. Source: NFPA 92 §5.5.
| Smoke temp Ts | — | |
| Smoke density ρs | — | |
| Volumetric rate Ve | — |
1.4 · Plugholing limit
$$V_{\text{max}} = 3.3\,\gamma\, d^{5/2}\left(\frac{T_s-T_0}{T_0}\right)^{1/2}$$
$\gamma$ location factor (1.0 center of layer, 0.5 near a wall/perimeter). Prevents clean air pull-through at a single exhaust inlet. Source: NFPA 92 §5.5, NFPA 204.
import numpy as np, matplotlib.pyplot as plt d = np.linspace(0.1, 3, 200) Vmax = 3.3*gamma*d**(5/2)*np.sqrt((Ts-T0)/T0) plt.plot(d, Vmax); plt.scatter([d_input],[Vmax_input], color='red', zorder=3)
1.5 · Stairwell pressurization airflow
$$Q = C\,A_e\sqrt{\frac{2\Delta P}{\rho}}$$
Target overpressure 0.05–0.10 in. w.g. (12–25 Pa) per NFPA 92 §4.4. $A_e$ total leakage area, $C$ flow/discharge coefficient (~0.6 for cracks). Source: NFPA 92 §4.4.
import numpy as np, matplotlib.pyplot as plt dP = np.linspace(5, 75, 200) Q = C*Ae*np.sqrt(2*dP/rho) plt.plot(dP, Q); plt.scatter([dP_input],[Q_input], color='red', zorder=3)
1.6 · Door opening force
$$F = F_{dc} + \frac{W\cdot A\cdot\Delta P}{2(W-d)}$$
Egress doors must open at $F \le 133\,\text{N}$ (30 lbf) per NFPA 101. $F_{dc}$ closer force, $W$ door width, $A$ door area, $d$ knob offset from hinge edge. Source: NFPA 92 §4.4, NFPA 101.
import numpy as np, matplotlib.pyplot as plt dP = np.linspace(1, 75, 200) F = Fdc + (W*A*dP)/(2*(W-d)) plt.plot(dP, F); plt.axhline(133, ls='--'); plt.scatter([dP_input],[F_input], color='red', zorder=3)