# Flash Fire
Source: https://tekrisk.com/es/docs/risk-models/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

<Callout type="warn" title="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.
</Callout>

<Cards>
  <Card title="Charco Evaporativo (idspl=1)">
    Derrame a nivel del suelo que se evapora en régimen permanente — derrames de GNL, GLP o crio-líquidos
  </Card>
  <Card title="Chorro Horizontal (idspl=2)">
    Liberación presurizada horizontal a altura $h_s > 0$ — fallas de tuberías o recipientes
  </Card>
  <Card title="Chorro Vertical (idspl=3)">
    Liberación presurizada vertical con elevación de pluma — venteos de alivio, blowouts
  </Card>
  <Card title="Derrame Instantáneo (idspl=4)">
    Masa total liberada de golpe; modo puff transitorio — ruptura catastrófica de recipiente
  </Card>
</Cards>

### 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

<Mermaid>
{`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`}
</Mermaid>

<Steps>
  <Step>
    **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.
  </Step>
  <Step>
    **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`).
  </Step>
  <Step>
    **Inicialización** — Calcula el perfil de viento Monin-Obukhov, estima la altura de la capa de mezcla $h_{mx}$ y establece las variables de estado iniciales de la nube según el tipo de fuente.
  </Step>
  <Step>
    **Lazo de integración** — Avanza el sistema de 11 EDOs a lo largo de 61 puntos de grilla desde $x=0$ hasta `xffm` usando Runge-Kutta de 4.° orden, llamando `slope()`, `solve()`, `eval()`, `thermo()` y `entran()` en cada paso.
  </Step>
  <Step>
    **Campo de concentración** — Calcula el perfil de concentración transversal en 6 posiciones laterales, la duración de nube $t_{cld}$ y el ancho de dispersión efectivo incorporando el meandro del viento.
  </Step>
  <Step>
    **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.
  </Step>
</Steps>

---

## 3. Parámetros de Entrada

<Tabs items={["Propiedades del Material", "Condiciones de la Fuente", "Meteorología", "Parámetros de Campo"]}>
  <Tab value="Propiedades del Material">

| Parámetro | Símbolo | Unidad | Fuente |
|-----------|---------|--------|--------|
| `wms` | $M_s$ | kg/kmol | BD química (`mw`) |
| `cps` | $c_{p,s}$ | J/(kg·K) | YAWS polinomio gas |
| `tbp` | $T_{bp}$ | K | BD química (`boilingPoint`) |
| `dhe` | $\Delta H_{vap}$ | J/kg | BD química (`hvaptb`) |
| `cpsl` | $c_{p,sl}$ | J/(kg·K) | YAWS polinomio líquido |
| `rhosl` | $\rho_{sl}$ | kg/m³ | YAWS correlación densidad |
| `cmed0` | $c_{med,0}$ | — | Fracción másica inicial de líquido (0 = todo vapor) |
| `spb`, `spc` | — | K | Constantes Clausius-Clapeyron |

  </Tab>
  <Tab value="Condiciones de la Fuente">

| Parámetro | Símbolo | Unidad | Descripción |
|-----------|---------|--------|-------------|
| `ts` | $T_s$ | K | Temperatura de la fuente |
| `qs` | $\dot{q}_s$ | kg/s | Tasa másica (fuentes continuas) |
| `as` | $A_s$ | m² | Área de la fuente |
| `tsd` | $t_{sd}$ | s | Duración de la liberación |
| `qtis` | $M_{inst}$ | kg | Masa total (solo `idspl=4`) |
| `hs` | $h_s$ | m | Altura de la fuente |

  </Tab>
  <Tab value="Meteorología">

| Parámetro | Símbolo | Unidad | Descripción |
|-----------|---------|--------|-------------|
| `ua` | $u_a$ | m/s | Velocidad del viento a altura `za` |
| `za` | $z_a$ | m | Altura de medición del viento |
| `ta` | $T_a$ | K | Temperatura ambiente |
| `rh` | $RH$ | % | Humedad relativa |
| `stab` | — | 0–6 | Clase de estabilidad Pasquill-Gifford (A=1 … F=6) |
| `ala` | $\Lambda = 1/L$ | 1/m | Inverso de longitud de Monin-Obukhov (solo si `stab=0`) |
| `z0` | $z_0$ | m | Longitud de rugosidad superficial |

  </Tab>
  <Tab value="Parámetros de Campo">

| Parámetro | Descripción |
|-----------|-------------|
| `tav` | Tiempo de promediado de concentración (s) |
| `xffm` | Distancia máxima barlovento calculada (m) |
| `zp[4]` | Alturas de medición de concentración (m) |
| `ncalc` | Multiplicador de sub-pasos numéricos (1–10) |

  </Tab>
</Tabs>

---

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

<Tabs items={["Capacidad Calorífica Gas", "Capacidad Calorífica Líquido", "Densidad Líquida", "Entalpía de Vaporización"]}>
  <Tab value="Capacidad Calorífica Gas">

### 4.1 Capacidad Calorífica del Gas Ideal

$$
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 = T_{bp}$. **Código:** `slabHelpers.ts` → `calculateGasHeatCapacity()`.

  </Tab>
  <Tab value="Capacidad Calorífica Líquido">

### 4.2 Capacidad Calorífica del Líquido

$$
c_{p,liq}(T) = \frac{c_{pla} + c_{plb} T + c_{plc} T^2 + c_{pld} T^3}{M_w} \times 10^3 \quad [\text{J/(kg·K)}]
$$

**Código:** `slabHelpers.ts` → `calculateLiquidHeatCapacity()`.

  </Tab>
  <Tab value="Densidad Líquida">

### 4.3 Densidad del Líquido (YAWS)

$$
\rho_L(T) = d_{lqa} \cdot d_{lqb}^{-(1 - T/T_c)^{d_{lqn}}} \times 10^3 \quad [\text{kg/m}^3]
$$

**Código:** `slabHelpers.ts` → `calculateLiquidDensity()`.

  </Tab>
  <Tab value="Entalpía de Vaporización">

### 4.4 Conversión de Entalpía de Vaporización

Convertida de kJ/mol a J/kg:

$$
\Delta H_{vap} \, [\text{J/kg}] = \frac{h_{vap,tb} \, [\text{kJ/mol}] \times 10^6}{M_w \, [\text{g/mol}]}
$$

**Código:** `slabHelpers.ts`, línea 469.

  </Tab>
</Tabs>

---

## 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) = \frac{u_*}{\kappa} \left[\ln\!\left(\frac{z}{z_0}\right) - \Psi_M\!\left(\frac{z}{L}\right)\right]
$$

| Símbolo | Descripción |
|---------|-------------|
| $u_*$ | Velocidad de fricción [m/s] |
| $\kappa = 0.41$ | Constante de von Kármán |
| $z_0$ | Longitud de rugosidad superficial [m] |
| $L$ | Longitud de Monin-Obukhov [m]; $\Lambda = 1/L$ = `ala` |
| $\Psi_M$ | Función de corrección de estabilidad de momentum |

<Tabs items={["Inestable (z/L < 0)", "Estable (z/L > 0)"]}>
  <Tab value="Inestable (z/L < 0)">

$$
\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}
$$

  </Tab>
  <Tab value="Estable (z/L > 0)">

$$
\Psi_M = -5 \cdot \frac{z}{L}
$$

  </Tab>
</Tabs>

**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` | $\Lambda = 1/L$ [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 $x$ barlovento. Las más importantes son:

<Accordions type="multiple">
  <Accordion title="Conservación de Masa — f[1]">

$$
\frac{d}{dx}(\rho u A) = \rho_a \sqrt{3}(v h + w b_b) + \dot{q}_s
$$

donde $v$ y $w$ son las velocidades de arrastre horizontal y vertical.

**Código:** `slope.js`, `f[1]` (línea 103).

  </Accordion>
  <Accordion title="Spreading Lateral — Semiancho bb — f[2]">

$$
\frac{d b_b}{dx} = \frac{\sqrt{3}(\rho_a/\rho) v + v_g}{u}
$$

La velocidad de spreading gravitacional para gases densos:

$$
v_g = \sqrt{\frac{d(\rho - \rho_a)}{dx} \cdot \alpha_g \cdot g \cdot h^2}, \quad \alpha_g = 0.25
$$

**Código:** `slope.js`, `f[2]` (línea 110).

  </Accordion>
  <Accordion title="Momentum Transversal (Spreading Gravitacional) — f[4]">

$$
\frac{d}{dx}\left[\rho u v_g b_b\right] = \alpha_{gv} \cdot g \cdot (\rho - \rho_a) \cdot h^2
$$

El coeficiente $\alpha_{gv} = 0.75$ es el factor de spreading gravitacional vertical.

**Código:** `slope.js`, `f[4]` (línea 125).

  </Accordion>
  <Accordion title="Momentum Vertical — Altura del Centro zc — f[7], f[8]">

$$
\frac{d z_c}{dx} = \frac{w_c}{u}, \quad 0 \leq z_c \leq h_{mx} - 0.5\, h
$$

$$
\frac{d}{dx}[\rho u w_c b_b h] = -g(\rho - \rho_a) b_b h
$$

Una nube más densa que el aire ($\rho > \rho_a$) experimenta aceleración descendente — el mecanismo que mantiene las nubes de gas denso cerca del suelo.

**Código:** `slope.js`, `f[7]` y `f[8]`; `solve.js`, líneas 123–136.

  </Accordion>
  <Accordion title="Conservación de Energía (Flujo de Temperatura) — f[5]">

$$
\frac{d}{dx}[c_p \rho u T \cdot A] = f_t
$$

donde $f_t$ incluye la transferencia de calor por fricción superficial y el intercambio con el suelo.

**Código:** `slope.js`, `f[5]`; `entran.js`, línea 366.

  </Accordion>
</Accordions>

---

## 7. Velocidades y Altura de Nube — `eval()`

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

**Altura de la nube** (conservación de masa):
$$
h = \frac{r}{\rho \cdot u \cdot b_b}
$$

**Velocidad barlovento** (ecuación cúbica, Ermak 1990 §3.2):
$$
u^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):
$$
\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.

<Tabs items={["Arrastre Vertical w", "Arrastre Horizontal v", "Velocidad de Fricción Total"]}>
  <Tab value="Arrastre Vertical w">

### 8.1 Velocidad de Arrastre Vertical

$$
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ímbolo | Valor | Descripción |
|---------|-------|-------------|
| $\alpha_e$ | 1.50 | Coeficiente de arrastre |
| $\kappa$ | 0.41 | Constante de von Kármán |
| $f_{pr}$ | $1 - 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.

  </Tab>
  <Tab value="Arrastre Horizontal v">

### 8.2 Velocidad de Arrastre Horizontal

$$
v = \sqrt{v_a^2 + c_{f1} \cdot v_{jet}^2}
$$

donde $v_a$ es el arrastre por turbulencia ambiental y $v_{jet}$ es el arrastre por cizalladura del chorro:

$$
v_a = \frac{\alpha_{fa} \cdot s_{tb} \cdot \bar{u}_a}{1 + (\sigma_b / 2\alpha_{fa} s_{tb}) \cdot b_b / \sqrt{3}}
$$

con $c_{f1} = 0.02$, $\sigma_b = 0.0004$.

**Código:** `entran.js`, líneas 281–293.

  </Tab>
  <Tab value="Velocidad de Fricción Total">

### 8.3 Velocidad de Fricción Total

$$
u_{*,total}^2 = u_{*,bulk}^2 + u_{*,shear}^2 + u_{*,convect}^2
$$

La contribución convectiva (condiciones inestables, $T_{suelo} > T_{nube}$):

$$
u_{*,convect}^2 = \left[c_{th} \cdot g \cdot \frac{(T_{suelo} - T_{nube})}{T_{medio}} \cdot v_h \cdot h\right]^{2/3}, \quad c_{th} = 0.14
$$

**Código:** `entran.js`, líneas 195–215.

  </Tab>
</Tabs>

---

## 9. Termodinámica — `thermo()`

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

<Accordions type="multiple">
  <Accordion title="Balance de Energía — Estimación inicial de temperatura">

La temperatura de la mezcla se estima inicialmente a partir del balance de entalpías:

$$
T = \frac{e_{trn}}{c_p}
$$

$$
e_{trn} = (1-c_m) c_{p,a} T_a + c_m c_{p,s} T_s + \frac{r_0}{r}\left[c_{p,0} T_0 - (1-c_{m,0})c_{p,a} T_a - c_{m,0} c_{p,s} T_s + e_{fr}\right]
$$

  </Accordion>
  <Accordion title="Equilibrio Vapor-Líquido (Clausius-Clapeyron)">

Para la sustancia fuente:

$$
P_{sat,s} = P_a \exp\!\left(A_s - \frac{B_s}{T + C_s}\right), \quad A_s = \ln(P_a) + \frac{B_s}{T_{bp} + C_s}
$$

Para el agua:

$$
P_{sat,w} = P_a \exp\!\left(15.08 - \frac{5514}{T}\right)
$$

Las constantes $B_s$ y $C_s$ provienen de los parámetros `spb` y `spc` del usuario.

  </Accordion>
  <Accordion title="Iteración Newton-Raphson para temperatura">

Itera hasta 15 veces (tolerancia $\Delta T < 0.001$ K) hasta que las fracciones de vapor $c_{m,ev}$ y $c_{m,wv}$ sean consistentes con las presiones de saturación y el balance de energía:

$$
T^{k+1} = T^k - \frac{T^k - T^k_a}{1 + \dfrac{\Delta H_w \cdot \partial c_{m,wv}/\partial T + \Delta H_s \cdot \partial c_{m,ev}/\partial T}{c_p}}
$$

  </Accordion>
  <Accordion title="Densidad de la Nube">

$$
\rho = \frac{\rho_a \, T_a}{\alpha_m \, T + \beta_m \, T_a}
$$

donde $\alpha_m$ es el factor de peso molecular efectivo y $\beta_m$ es la corrección volumétrica por fracción líquida.

**Código:** `thermo.js`, función `calculateDensity()`, líneas 451–473.

  </Accordion>
</Accordions>

---

## 10. Campo de Concentración

<Tabs items={["Pluma Estacionaria (idspl 1-3)", "Puff Transitorio (idspl=4)", "Corrección por Meandro"]}>
  <Tab value="Pluma Estacionaria (idspl 1-3)">

### 10.1 Perfil de Concentración Transversal

SLAB calcula la concentración en 6 posiciones laterales $y/b_{bc} = \{0,\ 0.5,\ 1.0,\ 1.5,\ 2.0,\ 2.5\}$:

$$
c(x, y, z) = c_{max}(x, z) \cdot F_c\!\left(\frac{y}{b_{bc}}\right)
$$

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

  </Tab>
  <Tab value="Puff Transitorio (idspl=4)">

### 10.2 Modo Puff Transitorio

Para liberaciones instantáneas, la concentración también varía en el tiempo. En cada punto barlovento se calcula:

- $t_{imp}$ — tiempo de llegada de la concentración máxima
- $t_{cld}$ — duración de la nube (tiempo por encima del umbral)

Ambos se usan para determinar la duración de exposición más desfavorable en la evaluación de riesgos.

  </Tab>
  <Tab value="Corrección por Meandro">

### 10.3 Ancho Efectivo con Meandro

Para tiempos de promediado $t_{av} > 0$, el semiancho efectivo incorpora la variabilidad direccional del viento:

$$
b_{bc} = b_b \sqrt{1 + \sigma_y^2 / b_b^2}
$$

donde $\sigma_y$ es la dispersión lateral adicional por meandro del viento.

  </Tab>
</Tabs>

---

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

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

$$
y_{n+1} = y_n + \frac{\Delta x}{6}(k_1 + 2k_2 + 2k_3 + k_4)
$$

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

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

---

## 12. Post-proceso y Salidas

<Tabs items={["Zonas de Concentración", "Masa de Nube por Isopleta"]}>
  <Tab value="Zonas de Concentración">

### 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()`.

  </Tab>
  <Tab value="Masa de Nube por Isopleta">

### 12.2 Masa de Nube por Isoconcentración

$$
M_{nube}(c_{target}) = \int_{V:\, c \geq c_{target}} \rho(x,y,z) \, dV
$$

Calculada numéricamente integrando en los 61 puntos de grilla.

**Código:** `analysis/isopleths.js`.

  </Tab>
</Tabs>

---

## 13. Constantes Físicas del Modelo

<Accordions type="single">
  <Accordion title="Ver constantes del modelo">

| Constante | Valor | Descripción |
|-----------|-------|-------------|
| $\kappa$ | 0.41 | Constante de von Kármán |
| $\alpha_e$ | 1.50 | Coeficiente de arrastre (entrainment) |
| $c_{f1}$ | 0.02 | Coeficiente de fricción 1 |
| $C_{RI}$ | 0.025 | Criterio de número de Richardson |
| $c_{th}$ | 0.14 | Coeficiente de transferencia de calor convectiva |
| $\alpha_g$ | 0.25 | Factor de spreading gravitacional horizontal |
| $\alpha_{gv}$ | 0.75 | Factor de spreading gravitacional vertical |
| $\sigma_b$ | 0.0004 | Coeficiente sigma de flotabilidad |
| $c_{ws}$ | 0.05 | Coeficiente de cizalladura de viento |
| $R$ | 8.31431 | Constante universal del gas [J/(mol·K)] |
| $g$ | 9.80665 | Aceleración gravitacional [m/s²] |
| $P_a$ | 101 325 | Presión atmosférica estándar [Pa] |

**Código:** `slab-js/state/constants.js`.

  </Accordion>
</Accordions>

---

## 14. Limitaciones del Modelo

<Accordions type="multiple">
  <Accordion title="Terreno plano y homogéneo">
    SLAB asume terreno horizontal sin obstáculos. No modela canalizaciones por valles, edificios ni accidentes topográficos.
  </Accordion>
  <Accordion title="Viento constante y unidireccional">
    La velocidad y dirección del viento se consideran fijas durante toda la simulación. No hay variabilidad temporal ni rotación/viraje del viento.
  </Accordion>
  <Accordion title="Una única nube simulada">
    El modelo simula una sola nube desde una fuente. No modela múltiples fuentes simultáneas ni interacción entre nubes.
  </Accordion>
  <Accordion title="Supuesto de gas denso">
    Diseñado para gases más densos que el aire (GNL, GLP, cloro). Para gases muy livianos ($\rho_s \ll \rho_a$) los resultados son conservadores — el modelo puede sobreestimar las concentraciones a nivel del suelo.
  </Accordion>
  <Accordion title="Sin química reactiva">
    No modela reacciones químicas entre el gas y el aire. La concentración se trata como un escalar conservado durante toda la simulación.
  </Accordion>
  <Accordion title="Validez de la capa límite superficial">
    La teoría de Monin-Obukhov es válida para la capa superficial ($z < h_{mx}$). El modelo limita el arrastre por encima de la capa de mezcla.
  </Accordion>
  <Accordion title="Resolución espacial de 61 puntos">
    La grilla de salida es fija. Regiones de cambio rápido de concentración cerca de la fuente pueden estar sub-muestreadas con `ncalc=1`.
  </Accordion>
  <Accordion title="Parámetros de Clausius-Clapeyron">
    Los parámetros `spb` y `spc` deben ser ingresados por el usuario. Si no están disponibles en la base de datos química, el equilibrio vapor-líquido se omite del cálculo.
  </Accordion>
  <Accordion title="Constantes empíricas fijas">
    Los coeficientes de arrastre ($\alpha_e$, $c_{f1}$) y spreading ($\alpha_{gv}$) son constantes calibradas para escenarios de laboratorio y campo. Su validez para condiciones extremas no está garantizada.
  </Accordion>
  <Accordion title="No válido a distancias muy cortas">
    En la zona fuente inmediata ($x < b_s$), el modelo usa aproximaciones. Los resultados dentro del área de la fuente tienen incertidumbre mayor.
  </Accordion>
</Accordions>

---

## 15. Referencias Bibliográficas

<Accordions type="single">
  <Accordion title="Ver lista completa de referencias">

| # | Referencia |
|---|-----------|
| 1 | **Ermak, D.L.** (1990). *SLAB: An Atmospheric Dispersion Model for Denser-than-Air Releases*. UCRL-MA-105607. Lawrence Livermore National Laboratory, Livermore, CA. — **Referencia principal del modelo** |
| 2 | **Monin, A.S. & Obukhov, A.M.** (1954). Basic laws of turbulent mixing in the ground layer of the atmosphere. *Tr. Geofiz. Inst. AN SSSR*, 151, 163–187. |
| 3 | **Pasquill, F.** (1961). The estimation of the dispersion of windborne material. *Meteorological Magazine*, 90, 33–49. |
| 4 | **YAWS, C.L.** (1999). *Chemical Properties Handbook*. McGraw-Hill, New York. |
| 5 | **Spicer, T.O. & Havens, J.A.** (1989). *User's Guide for the DEGADIS 2.1 Dense Gas Dispersion Model*. EPA/450/4-89/019. |
| 6 | **CCPS** (1999). *Guidelines for Chemical Process Quantitative Risk Analysis*, 2nd Ed. AIChE, New York. |
| 7 | **Briggs, G.A.** (1984). *Plume Rise and Buoyancy Effects*. In: Atmospheric Science and Power Production. DOE/TIC-27601. |
| 8 | **van Ulden, A.P.** (1974). On the spreading of a heavy gas released near the ground. *Proc. Loss Prevention and Safety Promotion*, Vol. 1, 221–226. |

  </Accordion>
</Accordions>
