(vc_steckler_room_fire)= # Steckler Room Fire ## Why this case matters The closed-cavity thermal cases ({ref}`differentially heated cavity ` and the heated cylinder) prove the buoyancy coupling where the only motion is buoyancy and the walls are fixed-temperature. Real thermal wind engineering is rarely closed: a sun-heated atrium, a naturally-ventilated room, a buoyant exhaust venting through an opening all set up a stratified flow that exchanges mass with the outside through a vent. The next rung on the thermal ladder is therefore an **open, internally-heated compartment**, where the buoyant layer must organise itself and drive a self-selecting exchange through a doorway. The Steckler room-fire experiment of {footcite:t}`steckler1982flow` is the canonical benchmark for that flow. A single compartment with one doorway and a steady floor-centred heat release develops a two-layer structure: a hot buoyant layer fills the upper room and spills out the top of the doorway, while ambient air is drawn in through the bottom, with a **neutral plane** in between where the through-door velocity reverses. The experiment measured the steady doorway velocity and temperature profiles and the resulting neutral-plane height, and these have become a de-facto standard for compartment-fire CFD. Reproducing the doorway exchange confirms that the variable-density buoyancy, a volumetric heat source and open boundaries act correctly together - the foundation for buoyant-plume and natural-ventilation CWE applications. This case is posed as a **real fire** on the variable-density low-Mach closure: a several-hundred-kelvin hot layer with a temperature ratio `T_hot/T_inf ~ 2`, far outside the Boussinesq regime. The full nonlinear density variation is retained, rather than a linearized Boussinesq force at a reduced temperature ratio. ```{important} **Status: planned - not yet validated against reference data.** The setup, dimensionless matching and reference data are documented below. The case depends on the variable-density low-Mach closure ({ref}`Tier 3 `, {footcite:t}`taha2024fire`) plus the additional capabilities listed under the Prerequisites subsection; the comparison notebook is added once those are met and a GPU validation run is committed. ``` ## Physical description A compartment of 2.8 m x 2.8 m floor and 2.18 m height has a single doorway, 0.74 m wide and 1.83 m tall, centred in one wall (the full-width-door reference configuration, test 16). A heat source sits at the centre of the floor. The released heat warms the air, which rises in a plume, spreads under the ceiling and forms a hot upper layer; the layer drives an outflow through the upper part of the doorway, balanced by an ambient inflow through the lower part. The dividing streamline is the neutral plane. In nassu the room shell (back wall, two side walls, the front wall with its doorway gap and the ceiling) is a voxelized no-slip surface imported directly from the CAD geometry in real metres (`geometry/steckler_room.stl`); the floor is the no-slip ground domain face. The doorway faces `-y` and an ambient plenum (about 2 m deep) extends in front of it, with open (Neumann-outlet) domain faces, so the buoyant exchange develops freely before reaching the domain boundary. The heat release is a volumetric source region on the burner-stand footprint (`geometry/stand.stl`), feeding the finite-difference energy equation; the temperature field closes the equation of state `rho = P / (r T)`, and the resulting density variation drives the fluid through the exact buoyancy term. ## Governing equations ```{seealso} The modeling rationale for this case - why a compartment fire needs the variable-density low-Mach closure rather than a Boussinesq surrogate, what the open doorway implies for the thermodynamic pressure, and how the dimensionless balancing carries over - is set out in the {ref}`What the Steckler room fire needs ` section of the thermodynamics theory chapter. The equations below state the closure as instantiated by this case. ``` The case uses the variable-density low-Mach closure of {footcite:t}`taha2024fire` (Tier 3 of the thermal hierarchy). The density is **slaved to the ideal-gas equation of state** ```{math} --- label: vc_steckler_eos --- \rho = \frac{P}{r\,T} ``` rather than read from the population sum, with `P` the (spatially uniform, ambient-pinned) thermodynamic pressure, `r` the specific gas constant and `T` the temperature. The LBM zeroth moment is reinterpreted as the **reduced hydrodynamic pressure** `p^h / (rho cs^2)`, and buoyancy enters the fluid as the **exact** body force ```{math} --- label: vc_steckler_buoyancy --- F_\alpha = (\rho - \rho_\infty)\, g_\alpha ``` with gravity along `-z` (z up), so a hot, density-thinned parcel (`rho < rho_inf`) feels an upward force. The Boussinesq force is the linearized small-`dT` limit of {eq}`vc_steckler_buoyancy`; here the full nonlinear density variation is retained, which is what makes this a real fire. The temperature is advanced each fluid step by an explicit finite-difference energy equation ```{math} --- label: vc_steckler_energy --- \frac{\partial T}{\partial t} + u_\alpha \frac{\partial T}{\partial x_\alpha} = \alpha\, \nabla^2 T + S, \qquad \alpha = \frac{\nu}{\mathrm{Pr}} ``` with a constant volumetric heat-release source `S` on the burner region and a thermal diffusivity `alpha = nu / Pr`. The reference's convective wall heat loss enters through a Robin (`TempRobin`) wall condition on the room shell, which requires the energy-field wall BC on voxelized bodies listed under Prerequisites; absent that, the shell is treated as adiabatic. The flow organises around a buoyancy-driven doorway exchange. The validation quantities are the steady doorway profiles and the neutral-plane height `z_n`, the height in the opening where the through-door velocity changes sign. Non-dimensionalised by the door height `H_door`, the neutral-plane fraction `z_n / H_door` and the profile shapes are the comparison targets. ## Dimensionless numbers The case is set up for **dynamic similarity** with the reference: the groups that govern the doorway exchange - the geometric length-ratios, the Prandtl number, the dimensionless heat-release rate `Q*_H` and the resulting **real** temperature ratio - are all matched. There is no lowered-gravity trick and no reduced temperature ratio: the hot layer carries its real `T_hot / T_inf ~ 2`. The single group that is *not* matched is the Reynolds (Grashof) number, which is reduced; the gross door exchange is approximately Reynolds-independent, so the neutral-plane fraction and the profile shapes carry over. | Dimensionless group | NIST test 16 | This case | Matched | | ---------------------------------------------------------------------- | ------------ | ---------------------- | ------------------------------ | | Door / room height `H_door / H_room` | 0.84 | 0.84 | yes | | Door / room width `W_door / W_room` | 0.26 | 0.26 | yes | | Prandtl number `Pr = nu / alpha` | 0.71 | 0.71 | yes | | Dimensionless HRR `Q*_H = Q / (rho_inf cp T_inf sqrt(g) H_door^(5/2))` | `~ 1.2e-2` | `~ 1.2e-2` (target) | target | | Temperature ratio `T_hot / T_inf` | `~ 2` | `~ 2` (real, emergent) | yes | | Reynolds number `Re = U_b H_door / nu` | `~ 3e5` | `~ 5e2` | no (reduced; `Re`-independent) | The geometric ratios come straight from the documented setup (`reference/steckler_test16_setup.csv`) through the `dx` lattice mapping, and the Prandtl number is reproduced exactly by `alpha = nu / Pr` with `Pr = 0.71`. The temperature ratio is **real**: the burner source heats the energy field, the EOS {eq}`vc_steckler_eos` thins the hot-layer density (a `T_hot / T_inf ~ 2` layer at `rho_hot ~ rho_inf / 2`), and the exact buoyancy {eq}`vc_steckler_buoyancy` drives the door jet directly. The dimensionless heat-release rate `Q*_H ~ 0.012` is the target the burner `rate` and the lattice gravity reproduce together at `Ma < 0.1`. The experimental neutral plane sits at `z_n / H_door = 0.56`. The dimensionless fields match the experiment, so the analysis notebook reconstructs the dimensional doorway profiles (temperature in deg C and velocity in m/s) from the converged dimensionless profiles and the experimental scales. With a real temperature ratio the reconstruction carries no Boussinesq linearization error; the residual modelling limit is the reduced Reynolds number. ## Simulation setup The geometry is kept in **real metres** (the committed binary STLs) and the grid is driven by a single knob, `dx`, the level-0 lattice spacing in metres. The domain size, the STL placement (`transformation` scale and translation), the burner source region and every probe plane are all derived from `dx` and the fixed physical box with `!math`, so changing `dx` once (e.g. 0.04 m -> 0.03 m) rescales the whole case. `geometry/lattice_mapping.py` is the readable source of truth for the physical-to-lattice mapping (run it with `--dx` to print the resolved numbers). Resolution is layered with static multiblock refinement: the level-0 grid is coarse (`dx`), the room interior is refined to **level 1** (`dx/2`) and the room-shell walls to **level 2** (`dx/4`). At the default `dx = 0.04` m that is a 4 cm / 2 cm / 1 cm ladder. The run is a single statistically-steady simulation with the plume turbulence carried by an LES Smagorinsky model. | Parameter | Value | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Resolution knob | `dx` = 0.04 m (level 0); room interior -> level 1 (2 cm), walls -> level 2 (1 cm) | | Compartment | room `2.8 x 2.8 x 2.18` m; domain `112 x 144 x 72` at `dx = 0.04` m (about 2 m ambient plenum in `-y`) | | Doorway | `0.74 x 1.83` m, centred in the front wall (faces `-y`); opening `x in [-0.37, 0.37]` m, `z in [0, 1.83]` m | | Burner footprint | burner-stand footprint `0.42 x 0.48` m at the floor centre, volumetric energy source | | Velocity set / operator | D3Q27 / RRBGK (D3Q27 is required by `models.low_mach`) | | Relaxation time `tau` | 0.53 (`nu = 0.01` lattice) | | Turbulence model | LES Smagorinsky, `Cs = 0.1` | | Thermal closure | variable-density low-Mach (`models.low_mach`): EOS `rho = P / (r T)`, `r = 1`, `P_thermo = 1`, `T_ref = 1`, `rho_inf = 1` (EOS-consistent) | | Thermal diffusivity `alpha` | 0.01408 (`= nu / Pr`, `Pr = 0.71`) | | Buoyancy | exact `(rho - rho_inf) * g`, gravity `[0, 0, -1.0e-4]` (sized for `Q*_H ~ 0.012` at `Ma < 0.1`) | | Heat source | volumetric region on the burner-stand footprint, floor cell layer only, constant `energy.source_regions` rate mapped from the 62.9 kW heat release | | Reduced-pressure stabilization | `pressure_filter = 0.1` (3-D stable range `[0, 0.1667]`) | | Fluid boundary conditions | floor (B) no-slip ground; top / plenum end / sides / back (F, S, W, E, N) Neumann outlet; room walls voxelized `RegularizedHWBB` | | Energy wall BCs | floor (B) `TempDirichlet` `T_w = 1` (cold ground sink); open faces (F/S/N/W/E) adiabatic ghost fallback; room shell convective heat loss (`TempRobin`, see Prerequisites) | | Initial fields | quiescent, ambient `T = T_ref = 1` everywhere | The burner `rate` and the lattice gravity are the calibration knobs: they are set together so the dimensionless heat-release rate matches `Q*_H ~ 0.012` and the emergent hot-layer ratio reaches the experimental `T_hot / T_inf ~ 2`, read off the centreline / doorway `plane_series`, with the door jet kept at `Ma < 0.1`. At the default `dx = 0.04` m the case is about 10.2 M lattice nodes (around 0.8 GB GPU, single precision); the level-2 near-wall shell dominates the cost, so coarsening it (or raising `dx`) is the main lever for a lighter run. ## Reference and acceptance The reference is the full-width-door, centred-fire reference burn (test 16, 62.9 kW) of {footcite:t}`steckler1982flow`. The documented experimental setup is tabulated in `reference/steckler_test16_setup.csv`; the doorway profiles and neutral-plane height are digitised into `reference/doorway_profiles.csv` (see `reference/REFERENCES.md` for provenance and the digitisation status). A passing result reproduces, at steady state: - the **doorway through-door velocity profile** shape (inflow low, outflow high, single sign change), - the **doorway temperature profile** shape (cold lower layer, warm upper layer with a stratified interface), - the **neutral-plane height fraction** `z_n / H_door` within tolerance of the experimental value, with the through-door mass balance closing (inflow `~` outflow) at steady state. All comparisons are non-dimensional, per the scope note above. ## Prerequisites Beyond the variable-density low-Mach closure, the case depends on: - **A temperature wall BC on voxelized solid bodies.** The convective wall heat loss on the room shell is a Robin (`TempRobin`) energy-field condition. The energy-field wall BCs apply to the six cardinal domain faces; the room shell is a voxelized STL body, so the case needs a temperature wall BC attachable to a voxelized body. Without it the shell is treated as adiabatic. - **An EOS-consistent open boundary.** The doorway and plenum use open Neumann-outlet faces. Under the closure the density is slaved to the EOS `rho = P / (r T)`, so the open faces need a pressure boundary consistent with that identity rather than a fixed-density outlet. - **A calibrated heat-release source.** The 62.9 kW burner heat release maps to the finite-difference energy-equation source `rate` in lattice units, set together with the lattice gravity to reach `Q*_H ~ 0.012` at `Ma < 0.1`. ## Results ```{note} The quantitative comparison notebook (doorway velocity / temperature profiles and the neutral-plane height against {footcite:t}`steckler1982flow`) is added once the Prerequisites are met and a GPU validation run is committed. ``` ```{toctree} --- hidden: --- 03_steckler_room_fire.ipynb ``` ```{footbibliography} ```