SFPE Handbook of Fire Protection Engineering

Society of Fire Protection Engineers Handbook calculations.

SFPE Handbook of Fire Protection Engineering - Fire engineering correlations and calculations.

This module contains correlations, equations, and calculation methods from the Society of Fire Protection Engineers (SFPE) Handbook of Fire Protection Engineering. The handbook serves as a reference for fire protection engineering calculations and methodologies.

Chapter 14

Chapter 14 - Fire Detection correlations and calculations.

This chapter contains correlations and methods for fire detection systems, including ceiling jet correlations and related fire property calculations.

Alpert Correlations

Alpert Correlations - Ceiling jet correlations for fire properties.

This module contains correlations developed by Alpert for ceiling jet flows beneath unconfined ceilings. These correlations relate fire properties to measurements taken in the ceiling jet.

Heat Release Rate Correlations

Heat Release Rate Correlations - Alpert correlations for estimating heat release rates.

This module contains the Alpert correlations for calculating heat release rates from ceiling jet temperature measurements. The correlations distinguish between two regions based on the normalized radial distance (r/H).

ofire.sfpe_handbook.chapter_14.alpert.heat_release.from_temperature_and_position(temp, temp_amb, height, radial_position)

Calculate heat release rate from temperature and position using Alpert correlations.

This function implements the Alpert correlations for estimating heat release rate from ceiling jet temperature measurements at different radial positions beneath an unconfined ceiling. These correlations are fundamental for fire detection and suppression system design.

\begin{align} \text{For } \frac{r}{H} \leq 0.18: \quad &\dot{Q} = \left(\frac{(T - T_{\infty}) \cdot H^{5/3}}{16.9}\right)^{3/2} \\ \text{For } \frac{r}{H} > 0.18: \quad &\dot{Q} = \left(\frac{(T - T_{\infty}) \cdot \left(\frac{r}{H}\right)^{2/3} \cdot H^{5/3}}{5.38}\right)^{3/2} \end{align}

where:

  • \(\dot{Q}\) is the heat release rate (kW)

  • \(T\) is the ceiling jet temperature (K)

  • \(T_{\infty}\) is the ambient temperature (K)

  • \(H\) is the height of the ceiling above the fire (m)

  • \(r\) is the radial distance from the fire centerline (m)

Parameters:
  • temp (float) – Ceiling jet temperature (K)

  • temp_amb (float) – Ambient temperature (K)

  • height (float) – Height of ceiling above fire (m)

  • radial_position (float) – Radial distance from fire centerline (m)

Returns:

Heat release rate (kW)

Return type:

float

Assumptions:

To be completed

Limitations:

To be completed

Example

>>> import ofire
>>> # Calculate heat release rate for ceiling jet at 500K, 5m high, 2m from center
>>> q = ofire.sfpe_handbook.chapter_14.alpert.heat_release.from_temperature_and_position(
...     temp=500.0,
...     temp_amb=293.15,
...     height=5.0,
...     radial_position=2.0
... )
>>> print(f"Heat release rate: {q:.1f} kW")

Chapter 50 - Smoke Control

This chapter contains equations for smoke control applications.

Equation 50.1 - Pressure Difference Due to Stack Effect

This equation calculates the pressure difference due to stack effect.

ofire.sfpe_handbook.chapter_50.equation_50_1.pressure_difference(t_0, t_s, z)

Pressure difference due to stack effect.

This function calculates the pressure difference between indoor and outdoor environments due to stack effect.

\[\Delta P_{so} = 3460 \cdot \left(\frac{1}{T_0 + 273} - \frac{1}{T_s + 273}\right) \cdot z\]

where:

  • \(\Delta P_{so}\) is the pressure difference due to stack effect (Pa)

  • \(T_0\) is the outdoor temperature (°C)

  • \(T_s\) is the shaft temperature (°C)

  • \(z\) is the height above the neutral pressure level (m)

Parameters:
  • t_0 (float) – Outdoor temperature (°C)

  • t_s (float) – Shaft temperature (°C)

  • z (float) – Height above neutral pressure level (m)

Returns:

Pressure difference due to stack effect (Pa)

Return type:

float

Assumptions:

To be completed.

Limitations:

Not applicable for complicated buildings, with shafts of various heights and different shafts temperatures.

Example

>>> import ofire
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_1.pressure_difference(-18.0, 21.0, 30.0)
>>> print(f"{result:.2f} Pa")

Equation 50.2 - Pressure Difference between a Fire Compartment and its Surroundings

This equation calculates the pressure difference due to stack effect between a fire compartment and its surroundings.

ofire.sfpe_handbook.chapter_50.equation_50_2.pressure_difference(t_0, t_f, z)

This function calculates the pressure difference between a fire compartment and its surroundings.

\[\Delta P_{so} = 3460 \cdot \left(\frac{1}{T_0 + 273} - \frac{1}{T_f + 273}\right) \cdot z\]

where:

  • \(\Delta P_{so}\) is the pressure difference due to stack effect (Pa)

  • \(T_0\) is the temperature of the surroundings (°C)

  • \(T_f\) is the fire compartment temperature (°C)

  • \(z\) is the height above the neutral plane (m)

Parameters:
  • t_0 (float) – Temperature of the surroundings (°C)

  • t_f (float) – Temperature of the fire compartment (°C)

  • z (float) – Height above neutral plane (m)

Returns:

Pressure difference due to stack effect (Pa)

Return type:

float

Assumptions:

To be completed.

Limitations:

None stated.

Example

>>> import ofire
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_2.pressure_difference(20.0, 800.0, 1.52)
>>> print(f"{result:.2f} Pa")

Equation 50.4 - Pressure Exerted by Wind on a Wall

ofire.sfpe_handbook.chapter_50.equation_50_4.wind_pressure(c_w, rho_0, u_h)

This function calculates the pressure exerted by wind on a building’s wall surface.

\[P_w = 0.5 \cdot C_w \cdot \rho_0 \cdot u_h^2\]

where:

  • \(P_w\) is the pressure exerted by wind (Pa)

  • \(C_w\) is the wind pressure coefficient (dimensionless)

  • \(\rho_0\) is the air density at ambient conditions (kg/m³)

  • \(u_h\) is the wind speed at height h (m/s)

Parameters:
  • c_w (float) – Wind pressure coefficient (dimensionless)

  • rho_0 (float) – Air density at ambient conditions (kg/m³)

  • u_h (float) – Wind speed at height h (m/s)

Returns:

Pressure exerted by wind (Pa)

Return type:

float

Assumptions:

The pressure coefficient C_w depends on wind direction, building geometry and local obstructions.

Limitations:

None stated.

Example

>>> import ofire
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_4.pressure_exerted_wind(0.8, 1.2, 15.0)
>>> print(f"{result:.2f} Pa")

Equation 50.6 - Upper Limit Pressure Difference for Piston Effect

ofire.sfpe_handbook.chapter_50.equation_50_6.pressure_difference(rho, a_s, a_e, u, a_a, a_ir, c_c)

This function calculates upper limit pressure difference due to piston effect from the shaft to the building

\[\Delta P_{usi} = \frac{\rho}{2} \cdot \left(\frac{A_s \cdot A_e \cdot u}{A_a \cdot A_{ir} \cdot C_c}\right)^2\]

where:

  • \(\Delta P_{usi}\) is the upper limit pressure difference (Pa)

  • \(\rho\) is the air density in hoistway (kg/m³)

  • \(A_s\) is the cross-sectional area of the shaft (m²)

  • \(A_e\) is the effective area (m²)

  • \(U\) is the elevator car velocity (m/s)

  • \(A_a\) is the free area around the elevator car (m²)

  • \(A_{ir}\) is the leakage area between building and lobby (m²)

  • \(C_c\) is the flow coefficient for flow around car (dimensionless)

Parameters:
  • rho (float) – Air density in hoistway (kg/m³)

  • a_s (float) – Cross-sectional area of the shaft (m²)

  • a_e (float) – Effective area (m²)

  • U (float) – Elevator car velocity (m/s)

  • a_a (float) – Free area around the elevator car (m²)

  • a_ir (float) – Leakage area between building and lobby (m²)

  • c_c (float) – Flow coefficient for flow around car (dimensionless)

Returns:

Pressure difference (Pa)

Return type:

float

Assumptions:

None stated.

Limitations:

The flow coefficient was determined experimentally at 0.94 for multiple cars and 0.83 for a single car.

Example

>>> import ofire
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_6.pressure_difference(0.8, 6.0, 5.0, 2.5, 1.0, 1.0, 0.84)
>>> print(f"{result:.2f} Pa")

Equation 50.7 - Effective Area for Elevator with Enclosed Lobbies

ofire.sfpe_handbook.chapter_50.equation_50_7.effective_area(a_sr, a_ir, a_io)

This function calculates the effective area for an elevator with enclosed lobbies.

\[A_{e} = \left(\frac{1}{A_{sr}^2} + \frac{1}{A_{ir}^2} + \frac{1}{A_{io}^2}\right)^{-0.5}\]

where:

  • \(A_{e}\) is the effective area (m²)

  • \(A_{sr}\) is the leakage area between shaft and lobby (m²)

  • \(A_{ir}\) is the leakage area between building and lobby (m²)

  • \(A_{io}\) is the leakage area between the building and outside (m²)

Parameters:
  • a_sr (float) – Leakage area between shaft and lobby (m²)

  • a_ir (float) – Leakage area between building and lobby (m²)

  • a_io (float) – Leakage area between building and outside (m²)

Returns:

Effective area (m²)

Return type:

float

Assumptions:

None stated.

Limitations:

None stated.

Example

>>> import ofire
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_7.effective_area(0.5, 0.75, 2.5)
>>> print(f"{result:.6f} m²")

Equation 50.14 - Door Opening Force Resulting from Pressure Differences

ofire.sfpe_handbook.chapter_50.equation_50_14.door_opening_force(f_dc, w, a, delta_p, d)

This function calculates the door opening force resulting from the pressure differences produced by smoke control systems.

\[F = F_{dc} + \frac{W \cdot A \cdot \Delta p}{2 (W - d)}\]

where:

  • \(F\) is the total door opening force (N)

  • \(F_{dc}\) is the door closer force (N)

  • \(W\) is the door width (m)

  • \(A\) is the door area (m^2)

  • \(\Delta p\) is the pressure difference across the door (Pa)

  • \(d\) is the distance from door knob to knob side of the door (m)

Parameters:
  • f_dc (float) – Door closer force (N)

  • W (float) – Door width (m)

  • A (float) – Door area (m^2)

  • delta_p (float) – Pressure difference across the door (Pa)

  • d (float) – Distance from door knob to knob side of the door (m)

Returns:

Door opening force (N)

Return type:

float

Assumptions:

None stated.

Limitations:

None stated.

Example

>>> import ofire
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_14.door_opening_force(40.0, 0.9, 1.9, 25.0, 0.05)
>>> print(f"{result:.6f} N")

Equation 50.15 - Height Limit for Pressurization Systems

ofire.sfpe_handbook.chapter_50.equation_50_15.height_limit(f_r, delta_p_max, delta_p_min, t_0, t_s)

Height limit above which acceptable pressurization is not possible for an idealized building.

\[H_m = 0.000289 \times \frac{F_R \times (\Delta p_{max} - \Delta p_{min})}{\left|\frac{1}{T_0 + 273} - \frac{1}{T_s + 273}\right|}\]

where:

  • \(H_m\) is the height limit (m)

  • \(F_R\) is the flow area factor (dimensionless)

  • \(\Delta p_{max}\) is the maximum design pressure difference (Pa)

  • \(\Delta p_{min}\) is the minimum design pressure difference (Pa)

  • \(T_0\) is the ambient temperature (°C)

  • \(T_s\) is the stairwell temperature (°C)

Parameters:
  • f_r (float) – Flow area factor (dimensionless)

  • delta_p_max (float) – Maximum design pressure difference (Pa)

  • delta_p_min (float) – Minimum design pressure difference (Pa)

  • t_0 (float) – Ambient temperature (°C)

  • t_s (float) – Stairwell temperature (°C)

Returns:

Height limit (m)

Return type:

float

Assumptions:

Standard atmospheric pressure at sea level is assumed.

Limitations:

This equation has been derived for idealised buildings. More likely to apply with systems with treated supply air.

Example

>>> import ofire
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_15.height_limit(2.0, 75.0, 25.0, 0.0, 25.0)
>>> print(f"{result:.6f}")

Equation 50.16 - Flow Area Factor for Pressurization Systems

ofire.sfpe_handbook.chapter_50.equation_50_16.factor(a_sb, a_bo, t_b, t_s)

Flow area factor for pressurization systems, relevant for the calculation of the maximum height limit.

\[F_r = 1 + \frac{A_{SB}^2 \times (T_b + 273)}{A_{BO}^2 \times (T_s + 273)}\]

where:

  • \(F_r\) is the flow area factor (dimensionless)

  • \(A_{SB}\) is the stairwell bottom opening area (m²)

  • \(T_b\) is the building interior temperature (°C)

  • \(A_{BO}\) is the building outside opening area (m²)

  • \(T_s\) is the stairwell temperature (°C)

Parameters:
  • a_sb (float) – Stairwell bottom opening area (m²)

  • a_bo (float) – Building outside opening area (m²)

  • t_b (float) – Building interior temperature (°C)

  • t_s (float) – Stairwell temperature (°C)

Returns:

Flow area factor (dimensionless)

Return type:

float

Assumptions:

None stated.

Limitations:

Refer to the SFPE Handbook for details. To determine \(A_{SB}\) and \(A_{BO}\), the specifc layout of the lobbies and stairwells as well as the leakage paths must be understood.

Example

>>> import ofire
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_16.factor(0.005, 0.005, 15.0, 5.0)
>>> print(f"{result:.6f}")

Equation 50.17 - Stairwell Temperature for Untreated Pressurization Air

ofire.sfpe_handbook.chapter_50.equation_50_17.stairwell_temperature(t_0, eta, t_b)

Stairwell temperature calculation for untreated pressurization air.

\[T_S = T_0 + \eta (T_B - T_0)\]

where:

  • \(T_S\) is the stairwell temperature (°C)

  • \(T_0\) is the outdoors temperature (°C)

  • \(\eta\) is the heat transfer factor (dimensionless)

  • \(T_B\) is the building temperature (°C)

Parameters:
  • t_0 (float) – Outdoors temperature (°C)

  • eta (float) – Heat transfer factor (dimensionless)

  • t_b (float) – Building temperature (°C)

Returns:

Stairwell temperature (°C)

Return type:

float

Assumptions:

None stated.

Limitations:

This equation applies to untreated pressurization air. A heat transfer factor of \(\eta = 0.15\) is suggested in the absence of better data.

Example

>>> import ofire
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_17.stairwell_temperature(-10.0, 0.15, 15.0)
>>> print(f"{result:.2f}")

Equation 50.18 - Fractional Effective Dose

ofire.sfpe_handbook.chapter_50.equation_50_18.fed(c_i, delta_t_i, lc_t50)

Fractional Effective Dose (FED) calculation for evaluation of exposure to smoke.

\[FED = \frac{\sum (C_i \Delta t_i)}{LCt_{50}}\]

where:

  • \(FED\) is the fractional effective dose (dimensionless)

  • \(C_i\) is the mass concentration of material burned at the end of time interval i (g/m³)

  • \(\Delta t_i\) is the time interval i (s)

  • \(LC_{t50}\) is the lethal exposure dose from test data (g/m³)

Parameters:
  • c_i (list[float]) – Concentration values at each time interval (g/m³)

  • delta_t_i (float) – Time intervals (s)

  • lc_t50 (float) – Lethal exposure dose from test data (g/m³)

Returns:

Fractional effective dose (dimensionless)

Return type:

float

Assumptions:

Uniform time intervals.

Limitations:

Simplest model for evaluating exposure to smoke.

Example

>>> import ofire
>>> c_i = [0.001, 0.002, 0.003]
>>> delta_t_i = 1.0
>>> lc_t50 = 10.0
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_18.fed(c_i, delta_t_i, lc_t50)
>>> print(f"{result:.2f}")

Equation 50.19 - Visibility Through Uniform Smoke

ofire.sfpe_handbook.chapter_50.equation_50_19.visibility(k, delta_m, c_i)

Visibility in smoke at a point where mass concentration of fuel burned is known.

\[S_i = \frac{K}{2.303 {\delta}_m C_i}\]

where:

  • \(S_i\) is the visibility through smoke (m)

  • \(K\) is the proportionality constant (dimensionless)

  • \({\delta}_m\) is the mass optical density (m²/g)

  • \(C_i\) is the mass concentration of fuel burned (g/m³)

Parameters:
  • k (float) – Proportionality constant (dimensionless)

  • delta_m (float) – Mass optical density (m²/g)

  • c_i (float) – Mass concentration of fuel burned (g/m³)

Returns:

Visibility through smoke (m)

Return type:

float

Assumptions:

The calculated visibility can be thought of as visibility if smoke is uniform.

Limitations:

See assumptions above. Assumes uniform smoke and, utilises the proportionality constant K, commonly taken as 8 for illuminated signs and 3 for non-illuminated.

Example

>>> import ofire
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_19.visibility(8.0, 0.22, 1.0)
>>> print(f"{result:.2f}")

Equation 50.20 - Visibility Through Smoke (Percent Obscuration)

ofire.sfpe_handbook.chapter_50.equation_50_20.visibility()

Visibility calculation through smoke from percent obscuration.

\[S_i = -\frac{K L}{\ln(1 - \frac{\lambda}{100})}\]

where:

  • \(S_i\) is the visibility through smoke (m)

  • \(K\) is proportionality constant (dimensionless)

  • \(L\) is the path length (m)

  • \(\lambda\) is the percent obscuration (dimensionless)

Parameters:
  • k (float) – Proportionality constant (dimensionless)

  • l (float) – Path length (m)

  • lambda (float) – Percent obscuration (dimensionless)

Returns:

Visibility through smoke (m)

Return type:

float

Assumptions:

An object can be seen for S > L.

Limitations:

None stated.

Example

>>> import ofire
>>> result = ofire.sfpe_handbook.chapter_50.equation_50_20.visibility(8.0, 10.0, 95.0)
>>> print(f"{result:.2f}")