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 — 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:
- Distancia al LFL (Límite Inferior de Inflamabilidad) — límite interior de la zona Flash Fire
- Distancia al 50% LFL — distancia de planificación preventiva
- Distancia al UFL (Límite Superior de Inflamabilidad) — zona sobre-rica
- Umbrales tóxicos IDLH, ERPG y AEGL (cuando aplique)
- Geometría de la nube (altura, ancho) a cada distancia barlovento
- 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
Mapeo de propiedades químicas —
mapChemicalToSlabInput()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 > 0para fuentes continuas (idspl1–3) yqtis > 0para liberación instantánea (idspl=4).Inicialización — Calcula el perfil de viento Monin-Obukhov, estima la altura de la capa de mezcla 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 hasta
xffmusando Runge-Kutta de 4.° orden, llamandoslope(),solve(),eval(),thermo()yentran()en cada paso.Campo de concentración — Calcula el perfil de concentración transversal en 6 posiciones laterales, la duración de nube 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ámetro | Símbolo | Unidad | Fuente |
|---|---|---|---|
wms | kg/kmol | BD química (mw) | |
cps | J/(kg·K) | YAWS polinomio gas | |
tbp | K | BD química (boilingPoint) | |
dhe | J/kg | BD química (hvaptb) | |
cpsl | J/(kg·K) | YAWS polinomio líquido | |
rhosl | kg/m³ | YAWS correlación densidad | |
cmed0 | — | Fracción másica inicial de líquido (0 = todo vapor) | |
spb, spc | — | K | Constantes 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#
Evaluada a . Código: slabHelpers.ts → calculateGasHeatCapacity().
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):
| Símbolo | Descripción |
|---|---|
| Velocidad de fricción [m/s] | |
| Constante de von Kármán | |
| Longitud de rugosidad superficial [m] | |
Longitud de Monin-Obukhov [m]; = ala | |
| Función de corrección de estabilidad de momentum |
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 PG | stab | [1/m] | Condición |
|---|---|---|---|
| A | 1 | −0.10 a −0.05 | Muy inestable |
| B | 2 | −0.05 a −0.02 | Inestable |
| C | 3 | −0.02 a −0.005 | Ligeramente inestable |
| D | 4 | ≈ 0 | Neutral |
| E | 5 | +0.005 a +0.02 | Ligeramente estable |
| F | 6 | +0.02 a +0.10 | Estable |
6. Ecuaciones de Conservación (Sistema de 11 EDOs)#
El motor resuelve 11 ecuaciones diferenciales ordinarias a lo largo de la dirección barlovento. Las más importantes son:
7. Velocidades y Altura de Nube — eval()#
En cada paso, eval() resuelve iterativamente (máx. 11 iteraciones, tolerancia ) el sistema acoplado:
Altura de la nube (conservación de masa):
Velocidad barlovento (ecuación cúbica, Ermak 1990 §3.2):
resuelta analíticamente con la fórmula trigonométrica de Cardano.
Velocidad media de la capa límite (integración por regla de Simpson):
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#
| Símbolo | Valor | Descripción |
|---|---|---|
| 1.50 | Coeficiente de arrastre | |
| 0.41 | Constante de von Kármán | |
| 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 :
con distribución uniforme para 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 con el método de Runge-Kutta de 4.° orden:
El paso de integración se ajusta automáticamente según el multiplicador ncalc. La grilla de salida tiene 61 puntos distribuidos logarítmicamente de a xffm.
Código: slab-js/core/rungeKutta.js.
12. Post-proceso y Salidas#
12.1 Zonas de Inflamabilidad y Peligro#
| Zona | Concentración | Criterio |
|---|---|---|
| LFL | lel % vol | Límite Inferior de Inflamabilidad — límite interior del Flash Fire |
| 50% LFL | 0.5 × lel % | Zona de precaución |
| UFL | uel % vol | Lí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().