Modelos de Riesgo

Flash Fire

Documentación técnica del modelo de consecuencias Flash Fire (SLAB) — dispersión atmosférica de gas denso, campo de concentraciones, zonas de inflamabilidad y distancias LFL/UFL

1. Introducción y Fenómeno Físico

1.1 Flash Fire y SLAB

Un Flash Fire (Incendio Repentino) ocurre cuando una nube de gas inflamable se dispersa en la atmósfera, alcanza una concentración inflamable (entre LFL y UFL) y se enciende sin producir una sobrepresión significativa. El resultado es una llama que se propaga rápidamente a través de la nube, causando quemaduras letales en la zona envuelta.

El motor SLAB (Simulating Large Atmospheric Body) es una traducción directa a JavaScript del código Fortran original desarrollado por Donald L. Ermak en el Lawrence Livermore National Laboratory (1990). Preserva la física, las constantes y la estructura de subrutinas del modelo original.

SLAB predice la evolución espacio-temporal de una nube de gas denso a lo largo de 61 puntos de grilla en la dirección del viento, calculando:

  • Concentración de la sustancia (fracción en masa y fracción volumétrica)
  • Geometría de la nube (altura, semiancho transversal, semiancho longitudinal)
  • Temperatura y densidad de la mezcla
  • Velocidades barlovento, transversal y vertical

1.2 Contexto Industrial

Comportamiento de gas denso

SLAB fue diseñado para gases más densos que el aire (GNL criogénico, GLP, cloro). Las nubes de gas denso se adhieren al suelo y se expanden lateralmente bajo la gravedad, creando grandes zonas inflamables con vientos bajos.

Charco Evaporativo (idspl=1)

Derrame a nivel del suelo que se evapora en régimen permanente — derrames de GNL, GLP o crio-líquidos

Chorro Horizontal (idspl=2)

Liberación presurizada horizontal a altura hs>0h_s > 0 — fallas de tuberías o recipientes

Chorro Vertical (idspl=3)

Liberación presurizada vertical con elevación de pluma — venteos de alivio, blowouts

Derrame Instantáneo (idspl=4)

Masa total liberada de golpe; modo puff transitorio — ruptura catastrófica de recipiente

1.3 Alcance del Modelo

Los resultados se usan para determinar:

  1. Distancia al LFL (Límite Inferior de Inflamabilidad) — límite interior de la zona Flash Fire
  2. Distancia al 50% LFL — distancia de planificación preventiva
  3. Distancia al UFL (Límite Superior de Inflamabilidad) — zona sobre-rica
  4. Umbrales tóxicos IDLH, ERPG y AEGL (cuando aplique)
  5. Geometría de la nube (altura, ancho) a cada distancia barlovento
  6. Isopleths GeoJSON para visualización en SIG

2. Secuencia de Cálculo

Cargando diagrama...

Mapeo de propiedades químicasmapChemicalToSlabInput() obtiene capacidades caloríficas gas/líquido, densidad líquida y entalpía de vaporización de la base de datos YAWS, convirtiendo unidades para el motor SLAB.

Validación — El esquema Zod valida tipos y rangos; las verificaciones de coherencia aseguran qs > 0 para fuentes continuas (idspl 1–3) y qtis > 0 para liberación instantánea (idspl=4).

Inicialización — Calcula el perfil de viento Monin-Obukhov, estima la altura de la capa de mezcla hmxh_{mx} y establece las variables de estado iniciales de la nube según el tipo de fuente.

Lazo de integración — Avanza el sistema de 11 EDOs a lo largo de 61 puntos de grilla desde x=0x=0 hasta xffm usando Runge-Kutta de 4.° orden, llamando slope(), solve(), eval(), thermo() y entran() en cada paso.

Campo de concentración — Calcula el perfil de concentración transversal en 6 posiciones laterales, la duración de nube tcldt_{cld} y el ancho de dispersión efectivo incorporando el meandro del viento.

Post-proceso — Identifica las zonas de concentración LFL/UFL por interpolación lineal, calcula la masa de nube por isopleta y genera polígonos GeoJSON para visualización.


3. Parámetros de Entrada

ParámetroSímboloUnidadFuente
wmsMsM_skg/kmolBD química (mw)
cpscp,sc_{p,s}J/(kg·K)YAWS polinomio gas
tbpTbpT_{bp}KBD química (boilingPoint)
dheΔHvap\Delta H_{vap}J/kgBD química (hvaptb)
cpslcp,slc_{p,sl}J/(kg·K)YAWS polinomio líquido
rhoslρsl\rho_{sl}kg/m³YAWS correlación densidad
cmed0cmed,0c_{med,0}Fracción másica inicial de líquido (0 = todo vapor)
spb, spcKConstantes Clausius-Clapeyron

4. Propiedades Físico-Químicas — Mapeo YAWS

Antes de ejecutar el motor SLAB, mapChemicalToSlabInput() calcula las propiedades termodinámicas desde los coeficientes de regresión YAWS.

4.1 Capacidad Calorífica del Gas Ideal

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)}]

Evaluada a T=TbpT = T_{bp}. Código: slabHelpers.tscalculateGasHeatCapacity().


5. Perfil de Viento — Teoría de Similitud de Monin-Obukhov

SLAB modela el perfil vertical de velocidad del viento con la Teoría de Similitud de Monin-Obukhov (capa superficial):

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]
SímboloDescripción
uu_*Velocidad de fricción [m/s]
κ=0.41\kappa = 0.41Constante de von Kármán
z0z_0Longitud de rugosidad superficial [m]
LLLongitud de Monin-Obukhov [m]; Λ=1/L\Lambda = 1/L = ala
ΨM\Psi_MFunción de corrección de estabilidad de momentum
Ψ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}

Código: slab-js/utils/uafn.js (función uafn). Referencia: Ermak (1990), §2.1; Monin & Obukhov (1954).

5.1 Clases de Estabilidad Pasquill-Gifford

Clase PGstabΛ=1/L\Lambda = 1/L [1/m]Condición
A1−0.10 a −0.05Muy inestable
B2−0.05 a −0.02Inestable
C3−0.02 a −0.005Ligeramente inestable
D4≈ 0Neutral
E5+0.005 a +0.02Ligeramente estable
F6+0.02 a +0.10Estable

6. Ecuaciones de Conservación (Sistema de 11 EDOs)

El motor resuelve 11 ecuaciones diferenciales ordinarias a lo largo de la dirección xx barlovento. Las más importantes son:


7. Velocidades y Altura de Nube — eval()

En cada paso, eval() resuelve iterativamente (máx. 11 iteraciones, tolerancia Δu/u<0.001\Delta u/u < 0.001) el sistema acoplado:

Altura de la nube (conservación de masa):

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

Velocidad barlovento (ecuación cúbica, Ermak 1990 §3.2):

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

resuelta analíticamente con la fórmula trigonométrica de Cardano.

Velocidad media de la capa límite (integración por regla de Simpson):

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

Código: slab-js/core/eval.js.


8. Tasas de Arrastre — entran()

El arrastre (entrainment) es el mecanismo principal de dilución de la nube — el proceso por el cual el aire ambiente se mezcla en la nube y reduce la concentración.

8.1 Velocidad de Arrastre Vertical

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)
SímboloValorDescripción
αe\alpha_e1.50Coeficiente de arrastre
κ\kappa0.41Constante de von Kármán
fprf_{pr}1htp/hmx1 - h_{tp}/h_{mx}Factor de perfil (se anula en la cima de la capa de mezcla)

Código: entran.js, líneas 251–272.


9. Termodinámica — thermo()

La subrutina resuelve el equilibrio termodinámico de la mezcla nube + aire a cada paso.


10. Campo de Concentración

10.1 Perfil de Concentración Transversal

SLAB calcula la concentración en 6 posiciones laterales 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)

con distribución uniforme para ybbc|y| \leq b_{bc} y caída gaussiana fuera del semiancho.


11. Integración Numérica — Runge-Kutta 4

El sistema de 11 EDOs se integra a lo largo de xx con el método de Runge-Kutta de 4.° orden:

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)

El paso de integración Δx\Delta x se ajusta automáticamente según el multiplicador ncalc. La grilla de salida tiene 61 puntos distribuidos logarítmicamente de x=0x = 0 a xffm.

Código: slab-js/core/rungeKutta.js.


12. Post-proceso y Salidas

12.1 Zonas de Inflamabilidad y Peligro

ZonaConcentraciónCriterio
LFLlel % volLímite Inferior de Inflamabilidad — límite interior del Flash Fire
50% LFL0.5 × lel %Zona de precaución
UFLuel % volLímite Superior de Inflamabilidad — zona sobre-rica

Las distancias se obtienen por interpolación lineal en la grilla de 61 puntos.

Código: slabAction.ts, función findDistanceForConcentration().


13. Constantes Físicas del Modelo


14. Limitaciones del Modelo


15. Referencias Bibliográficas