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#
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#
flowchart TD A["Input Data<br/>(30+ parameters)"] --> B["Step 1: Chemical Properties<br/>slabHelpers.ts — YAWS mapping<br/>cps, cpsl, rhosl, dhe"] B --> C["Step 2: Validation<br/>Zod schema + coherence checks<br/>qs>0 for idspl 1-3; qtis>0 for idspl=4"] C --> D["Step 3: Initialization<br/>Monin-Obukhov wind profile<br/>Mixing layer hmx, source conditions"] D --> E["Step 4: Integration Loop<br/>61 grid points: x=0 → xffm<br/>slope() → RK4 → solve() → eval() → thermo() → entran()"] E --> F["Step 5: Concentration Field<br/>Crosswind profile (6 positions)<br/>Cloud duration tcld, effective width with meander"] F --> G["Step 6: Post-processing<br/>LFL/UFL concentration zones<br/>Cloud mass per isopleth, GeoJSON output"] style A fill:#e1f5fe style G fill:#c8e6c9 style E fill:#fff3e0
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 > 0for continuous sources (idspl1–3) andqtis > 0for 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
xffmusing 4th-order Runge-Kutta, callingslope(),solve(),eval(),thermo(), andentran()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().