Saltar al contenido

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#

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#

flowchart TD
  A["Datos de entrada<br/>(30+ parámetros)"] --> B["Paso 1: Propiedades químicas<br/>slabHelpers.ts — mapeo YAWS<br/>cps, cpsl, rhosl, dhe"]
  B --> C["Paso 2: Validación<br/>Esquema Zod + verificaciones de coherencia<br/>qs>0 para idspl 1-3; qtis>0 para idspl=4"]
  C --> D["Paso 3: Inicialización<br/>Perfil de viento Monin-Obukhov<br/>Capa de mezcla hmx, condiciones de fuente"]
  D --> E["Paso 4: Lazo de integración<br/>61 puntos: x=0 → xffm<br/>slope() → RK4 → solve() → eval() → thermo() → entran()"]
  E --> F["Paso 5: Campo de concentración<br/>Perfil transversal (6 posiciones)<br/>Duración de nube tcld, ancho efectivo con meandro"]
  F --> G["Paso 6: Post-proceso<br/>Zonas LFL/UFL, masa de nube por isopleta, GeoJSON"]

  style A fill:#e1f5fe
  style G fill:#c8e6c9
  style E fill:#fff3e0
Cargando diagrama…
  1. 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.

  2. 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).

  3. 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.

  4. 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.

  5. 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.

  6. 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⋅K)]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#