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 — 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:
- Distance to LFL (Lower Flammable Limit) — inner boundary of flash fire zone
- Distance to 50% LFL — precautionary planning distance
- Distance to UFL (Upper Flammable Limit) — outer boundary of over-rich zone
- IDLH, ERPG, and AEGL toxic thresholds (when applicable)
- Cloud geometry (height, width) at each downwind distance
- GeoJSON isopleths for GIS visualization
2. Calculation Sequence
Chemical Property Mapping — mapChemicalToSlabInput() 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 , and sets initial cloud state variables for the chosen source type.
Integration Loop — Advances the 11-ODE system along 61 grid points from 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 , 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
| Parameter | Symbol | Unit | Source |
|---|---|---|---|
wms | kg/kmol | Chemical DB (mw) | |
cps | J/(kg·K) | YAWS gas polynomial | |
tbp | K | Chemical DB (boilingPoint) | |
dhe | J/kg | Chemical DB (hvaptb) | |
cpsl | J/(kg·K) | YAWS liquid polynomial | |
rhosl | kg/m³ | YAWS density correlation | |
cmed0 | — | Initial liquid mass fraction (0 = all vapor) | |
spb, spc | — | K | Clausius-Clapeyron constants |
4. Chemical Properties — YAWS Mapping
Before running the SLAB engine, mapChemicalToSlabInput() computes thermodynamic properties from YAWS regression coefficients.
5. Wind Profile — Monin-Obukhov Similarity Theory
SLAB models the vertical wind speed profile using Monin-Obukhov Similarity Theory within the atmospheric surface layer:
| Symbol | Description |
|---|---|
| Friction velocity [m/s] | |
| von Kármán constant | |
| Surface roughness length [m] | |
Monin-Obukhov length [m]; = ala | |
| Momentum stability correction function |
Code: slab-js/utils/uafn.js (function uafn). Reference: Ermak (1990), §2.1; Monin & Obukhov (1954).
5.1 Pasquill-Gifford Stability Classes
| PG Class | stab | [1/m] | Condition |
|---|---|---|---|
| A | 1 | −0.10 to −0.05 | Very unstable |
| B | 2 | −0.05 to −0.02 | Unstable |
| C | 3 | −0.02 to −0.005 | Slightly unstable |
| D | 4 | ≈ 0 | Neutral |
| E | 5 | +0.005 to +0.02 | Slightly stable |
| F | 6 | +0.02 to +0.10 | Stable |
6. Conservation Equations (11-ODE System)
The engine solves 11 ordinary differential equations along the downwind direction . The most important equations are:
7. Velocities and Cloud Height — eval()
At each step, eval() iteratively solves (max. 11 iterations, tolerance ) the coupled system:
Cloud height (from mass conservation):
Downwind velocity (cubic equation, Ermak 1990 §3.2):
solved analytically using the trigonometric form of Cardano's formula.
Boundary layer mean velocity (Simpson's rule integration):
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
| Symbol | Value | Description |
|---|---|---|
| 1.50 | Entrainment coefficient | |
| 0.41 | von Kármán constant | |
| 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 :
with uniform distribution for and Gaussian decay outside.
11. Numerical Integration — Runge-Kutta 4
The 11-ODE system is integrated along using the 4th-order Runge-Kutta method:
The integration step is automatically adjusted by the ncalc sub-step multiplier. The output grid has 61 points distributed logarithmically from to xffm.
Code: slab-js/core/rungeKutta.js.
12. Post-processing and Outputs
12.1 Flammability and Hazard Zones
| Zone | Concentration | Criterion |
|---|---|---|
| LFL | lel % vol | Lower Flammable Limit — inner flash fire boundary |
| 50% LFL | 0.5 × lel % | Precautionary planning zone |
| UFL | uel % vol | Upper Flammable Limit — over-rich zone boundary |
Distances are obtained by linear interpolation on the 61-point output grid.
Code: slabAction.ts, function findDistanceForConcentration().