Egress & life safety (NFPA 101/72)
NFPA 101 Life Safety Code & NFPA 72 — occupant load, egress capacity, RSET/ASET margin, travel distance, and fire alarm circuit checks, in one reference.
Relation sets with a natural input-output curve include 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 input marked as a red point.
1.12 · Occupant load estimator
$$\text{Occupants} = \left\lceil \frac{\text{Floor Area}}{\text{Occupant Load Factor}} \right\rceil$$
Occupant load factors per NFPA 101 Table 7.3.1.2 (representative values shown; verify against the current edition for your occupancy). Source: NFPA 101 Table 7.3.1.2, IBC Ch. 10.
1.13 · Egress width capacity
$$W_{\text{stair}} = N \times 0.3\ \text{in/person},\quad W_{\text{level}} = N \times 0.2\ \text{in/person}$$
$N$ occupant load served by the component. Source: NFPA 101 §7.3.3.
import numpy as np, matplotlib.pyplot as plt N = np.linspace(0, 1000, 200) W = N*factor plt.plot(N, W); plt.scatter([N_input],[W_input], color='red', zorder=3)
1.14 · RSET vs. ASET evacuation margin
$$\text{RSET} = t_d + t_a + t_o + t_{\text{egress}},\quad \text{Margin} = \text{ASET} - \text{RSET} \ge 0$$
$t_d$ detection, $t_a$ alarm, $t_o$ pre-evacuation delay, $t_{egress}$ movement time. Source: SFPE Engineering Guide, ISO 13571.
1.15 · Travel distance limit modification
$$D_{\text{max}} = D_{\text{base}} + \Delta D_{\text{sprinkler}}$$
Base travel distance limits are extended when the building is fully sprinklered per NFPA 13 (representative values shown; verify against the current NFPA 101 edition and occupancy chapter). Source: NFPA 101 Ch. 7.
1.16 · Fire alarm battery capacity
$$C_{\text{battery}} = 1.25 \times \left(I_{\text{standby}} \times 24\ \text{hrs} + I_{\text{alarm}} \times \frac{t_{\text{alarm}}}{60}\ \text{hrs}\right)$$
1.25 factor covers battery aging/derating. Source: NFPA 72 §10.6.
import numpy as np, matplotlib.pyplot as plt talarm = np.linspace(1, 15, 200) C = 1.25*(Istandby*24 + Ialarm*(talarm/60)) plt.plot(talarm, C); plt.scatter([talarm_input],[C_input], color='red', zorder=3)
1.17 · NAC voltage drop
$$V_{\text{drop}} = 2\cdot I_{\text{total}}\cdot R_{\text{wire}}\cdot L,\quad V_{\text{EOL}} = V_{\text{source}} - V_{\text{drop}}$$
Notification appliances typically require ≥16 VDC at end-of-line. $R_{wire}$ in Ω/ft (copper). Source: NFPA 72, NEC (NFPA 70) Ch. 9.
import numpy as np, matplotlib.pyplot as plt L = np.linspace(10, 500, 200) Veol = Vsource - 2*I*R*L plt.plot(L, Veol); plt.axhline(16, ls='--'); plt.scatter([L_input],[Veol_input], color='red', zorder=3)
1.18 · Ceiling height detector spacing reduction
$$S = S_0 \times f_{\text{height}}$$
$f_{height}$ is a de-rating factor applied above ~10 ft ceiling height (approximated here as a smooth linear reduction; consult NFPA 72 Table 17.6.3.1.1 for exact heat/smoke detector values). Source: NFPA 72 §17.6.
import numpy as np, matplotlib.pyplot as plt H = np.linspace(8, 50, 200) S = S0 * f_height(H) plt.plot(H, S); plt.scatter([H_input],[S_input], color='red', zorder=3)