Risk Models

Flash Fire

Technical documentation for the Flash Fire (SLAB) consequence model — dense gas atmospheric dispersion, concentration field, flammability zones, and LFL/UFL distance estimation

1. Introduction and Physical Phenomenon

1.1 Flash Fire and SLAB

A Flash Fire occurs when a flammable gas cloud disperses in the atmosphere, reaches a flammable concentration (between LFL and UFL), and ignites without producing significant overpressure. The result is a rapidly propagating flame that sweeps through the cloud, causing lethal burns in the engulfed zone.

The SLAB (Simulating Large Atmospheric Body) engine is a direct JavaScript translation of the original Fortran code developed by Donald L. Ermak at Lawrence Livermore National Laboratory (1990). It preserves the physics, constants, and subroutine structure of the original model.

SLAB predicts the spatio-temporal evolution of a dense gas cloud along 61 downwind grid points, computing:

  • Substance concentration (mass fraction and volume fraction)
  • Cloud geometry (height, crosswind half-width, alongwind half-width)
  • Mixture temperature and density
  • Downwind, crosswind, and vertical velocities

1.2 Industrial Context

Dense gas behavior

SLAB was designed for gases denser than air (cryogenic LNG, LPG, chlorine). Dense gas clouds hug the ground and spread laterally under gravity, creating large flammable zones at low wind speeds.

Evaporating Pool (idspl=1)

Ground-level spill evaporating at steady state — LNG, LPG, or cryogenic liquid spills

Horizontal Jet (idspl=2)

Pressurized horizontal release at height hs>0h_s > 0 — pipeline or vessel failures

Vertical Jet (idspl=3)

Pressurized vertical release with plume rise — pressure relief vents, blowouts

Instantaneous (idspl=4)

Total mass released at once; transient puff mode — catastrophic vessel rupture

1.3 Scope of This Model

Results are used to determine:

  1. Distance to LFL (Lower Flammable Limit) — inner boundary of flash fire zone
  2. Distance to 50% LFL — precautionary planning distance
  3. Distance to UFL (Upper Flammable Limit) — outer boundary of over-rich zone
  4. IDLH, ERPG, and AEGL toxic thresholds (when applicable)
  5. Cloud geometry (height, width) at each downwind distance
  6. GeoJSON isopleths for GIS visualization

2. Calculation Sequence

Cargando diagrama...

Chemical Property MappingmapChemicalToSlabInput() retrieves gas/liquid heat capacities, liquid density, and heat of vaporization from the YAWS database, converting units for the SLAB engine.

Validation — Zod schema validates types and ranges; coherence checks ensure qs > 0 for continuous sources (idspl 1–3) and qtis > 0 for instantaneous release (idspl=4).

Initialization — Computes the Monin-Obukhov wind profile, estimates the mixing layer height hmxh_{mx}, and sets initial cloud state variables for the chosen source type.

Integration Loop — Advances the 11-ODE system along 61 grid points from x=0x=0 to xffm using 4th-order Runge-Kutta, calling slope(), solve(), eval(), thermo(), and entran() at each step.

Concentration Field — Computes the crosswind concentration profile at 6 lateral positions, cloud duration tcldt_{cld}, and effective dispersion width incorporating wind meander.

Post-processing — Identifies LFL/UFL concentration zones by linear interpolation, computes cloud mass per isopleth, and generates GeoJSON polygons for visualization.


3. Input Parameters

ParameterSymbolUnitSource
wmsMsM_skg/kmolChemical DB (mw)
cpscp,sc_{p,s}J/(kg·K)YAWS gas polynomial
tbpTbpT_{bp}KChemical DB (boilingPoint)
dheΔHvap\Delta H_{vap}J/kgChemical DB (hvaptb)
cpslcp,slc_{p,sl}J/(kg·K)YAWS liquid polynomial
rhoslρsl\rho_{sl}kg/m³YAWS density correlation
cmed0cmed,0c_{med,0}Initial liquid mass fraction (0 = all vapor)
spb, spcKClausius-Clapeyron constants

4. Chemical Properties — YAWS Mapping

Before running the SLAB engine, mapChemicalToSlabInput() computes thermodynamic properties from YAWS regression coefficients.

4.1 Ideal Gas Heat Capacity

cp,gas(T)=cpga+cpgbT+cpgcT2+cpgdT3+cpgeT4Mw×103[J/(kg\cdotpK)]c_{p,gas}(T) = \frac{c_{pga} + c_{pgb} T + c_{pgc} T^2 + c_{pgd} T^3 + c_{pge} T^4}{M_w} \times 10^3 \quad [\text{J/(kg·K)}]

Evaluated at T=TbpT = T_{bp}. Code: slabHelpers.tscalculateGasHeatCapacity().


5. Wind Profile — Monin-Obukhov Similarity Theory

SLAB models the vertical wind speed profile using Monin-Obukhov Similarity Theory within the atmospheric surface layer:

u(z)=uκ[ln ⁣(zz0)ΨM ⁣(zL)]u(z) = \frac{u_*}{\kappa} \left[\ln\!\left(\frac{z}{z_0}\right) - \Psi_M\!\left(\frac{z}{L}\right)\right]
SymbolDescription
uu_*Friction velocity [m/s]
κ=0.41\kappa = 0.41von Kármán constant
z0z_0Surface roughness length [m]
LLMonin-Obukhov length [m]; Λ=1/L\Lambda = 1/L = ala
ΨM\Psi_MMomentum stability correction function
ΨM=2ln ⁣(1+ϕM12)+ln ⁣(1+ϕM22)2arctan(ϕM1)+π2\Psi_M = 2\ln\!\left(\frac{1+\phi_M^{-1}}{2}\right) + \ln\!\left(\frac{1+\phi_M^{-2}}{2}\right) - 2\arctan(\phi_M^{-1}) + \frac{\pi}{2}

Code: slab-js/utils/uafn.js (function uafn). Reference: Ermak (1990), §2.1; Monin & Obukhov (1954).

5.1 Pasquill-Gifford Stability Classes

PG ClassstabΛ=1/L\Lambda = 1/L [1/m]Condition
A1−0.10 to −0.05Very unstable
B2−0.05 to −0.02Unstable
C3−0.02 to −0.005Slightly unstable
D4≈ 0Neutral
E5+0.005 to +0.02Slightly stable
F6+0.02 to +0.10Stable

6. Conservation Equations (11-ODE System)

The engine solves 11 ordinary differential equations along the downwind direction xx. The most important equations are:


7. Velocities and Cloud Height — eval()

At each step, eval() iteratively solves (max. 11 iterations, tolerance Δu/u<0.001\Delta u/u < 0.001) the coupled system:

Cloud height (from mass conservation):

h=rρubbh = \frac{r}{\rho \cdot u \cdot b_b}

Downwind velocity (cubic equation, Ermak 1990 §3.2):

u3u0u2+ug3=0u^3 - u_0 \, u^2 + u_{g}^3 = 0

solved analytically using the trigonometric form of Cardano's formula.

Boundary layer mean velocity (Simpson's rule integration):

uˉau1+4u1/2+u26\bar{u}_a \approx \frac{u_1 + 4u_{1/2} + u_2}{6}

Code: slab-js/core/eval.js.


8. Entrainment Rates — entran()

Entrainment is the primary cloud dilution mechanism — the process by which ambient air mixes into the cloud and reduces concentration.

8.1 Vertical Entrainment Velocity

w=urefua(htp)αeκu(fprϕm(htp)+fpr,bϕm(hb))w = \frac{u_{ref}}{u_a(h_{tp})} \cdot \alpha_e \cdot \kappa \cdot u_* \cdot \left(\frac{f_{pr}}{\phi_m(h_{tp})} + \frac{f_{pr,b}}{\phi_m(h_b)}\right)
SymbolValueDescription
αe\alpha_e1.50Entrainment coefficient
κ\kappa0.41von Kármán constant
fprf_{pr}1htp/hmx1 - h_{tp}/h_{mx}Profile factor (vanishes at mixing layer top)

Code: entran.js, lines 251–272.


9. Thermodynamics — thermo()

The subroutine solves the thermodynamic equilibrium of the cloud + air mixture at each step.


10. Concentration Field

10.1 Crosswind Concentration Profile

SLAB computes concentration at 6 lateral positions y/bbc={0, 0.5, 1.0, 1.5, 2.0, 2.5}y/b_{bc} = \{0,\ 0.5,\ 1.0,\ 1.5,\ 2.0,\ 2.5\}:

c(x,y,z)=cmax(x,z)Fc ⁣(ybbc)c(x, y, z) = c_{max}(x, z) \cdot F_c\!\left(\frac{y}{b_{bc}}\right)

with uniform distribution for ybbc|y| \leq b_{bc} and Gaussian decay outside.


11. Numerical Integration — Runge-Kutta 4

The 11-ODE system is integrated along xx using the 4th-order Runge-Kutta method:

yn+1=yn+Δx6(k1+2k2+2k3+k4)y_{n+1} = y_n + \frac{\Delta x}{6}(k_1 + 2k_2 + 2k_3 + k_4)

The integration step Δx\Delta x is automatically adjusted by the ncalc sub-step multiplier. The output grid has 61 points distributed logarithmically from x=0x = 0 to xffm.

Code: slab-js/core/rungeKutta.js.


12. Post-processing and Outputs

12.1 Flammability and Hazard Zones

ZoneConcentrationCriterion
LFLlel % volLower Flammable Limit — inner flash fire boundary
50% LFL0.5 × lel %Precautionary planning zone
UFLuel % volUpper Flammable Limit — over-rich zone boundary

Distances are obtained by linear interpolation on the 61-point output grid.

Code: slabAction.ts, function findDistanceForConcentration().


13. Physical Constants


14. Model Limitations


15. Bibliographic References