Balancing the dimensionless values and keeping the LBM stable

This is the practical centrepiece of the chapter. The previous page showed that a buoyant flow is governed by \(\mathrm{Pr}\), the geometry, and a driving group (\(\mathrm{Ra}\) or \(Q^*_H\)), with the temperature ratio absorbed into the buoyancy velocity. This page turns that into the lattice knobs you actually set, and into the single constraint that decides whether a thermal run is stable: the buoyancy force per step must stay small. It mirrors the units-page recipe for the isothermal case, adapted for the extra freedom buoyancy brings.

The binding constraint: the force Mach number

An isothermal run is bounded by the velocity Mach number, \(\mathrm{Ma} = U/c_s < 0.1\). A buoyant run inherits that bound, but the velocity is now emergent: the flow accelerates itself to the buoyancy velocity \(U_b = \sqrt{G\,\beta\,\Delta T\, L}\) (1). So the real constraint is on the buoyancy force per step, which must be small enough that the velocity it produces stays subsonic.

One knob too hard and the lattice goes supersonic

The peak lattice velocity in a buoyant flow scales as \(U_b \sim \sqrt{G_{\text{lat}}\,\beta\,\phi\,H_{\text{lat}}}\), where \(G_{\text{lat}}\) is the lattice gravity, \(\beta\) the expansion coefficient, \(\phi\) the scalar amplitude and \(H_{\text{lat}}\) the reference height in nodes. Demanding a physically large temperature ratio (\(\beta\,\phi \sim 0.3\)) at full lattice gravity (\(G_{\text{lat}} = 1\)) drives \(U_b\) well above \(c_s = 1/\sqrt{3}\): the run goes supersonic and the weakly-compressible approximation collapses. Keep \(U_b\) in the same band as the isothermal lattice velocity, roughly \(0.05\) to \(0.15\).

The lattice-gravity lever

The way out is the freedom the densimetric scaling hands you. Because the temperature ratio is absorbed into \(U_b\), you do not have to shrink \(\beta\,\phi\) to keep \(U_b\) subsonic - you can instead lower the lattice gravity \(G_{\text{lat}}\). The product \(G_{\text{lat}}\,\beta\,\phi\) is what sets \(U_b\), and matching the physical driving group (\(Q^*_H\) or \(\mathrm{Ra}\)) fixes that product, not its individual factors. So:

  • Set \(\beta\) and the scalar amplitude \(\phi\) to represent the physical temperature ratio (\(\theta = \beta\,\phi \approx 0.3\) for a real fire), so the temperature field reconstructs correctly.

  • Lower \(G_{\text{lat}}\) (for example to \(10^{-3}\)) so that \(U_b = \sqrt{G_{\text{lat}}\,\beta\,\phi\,H_{\text{lat}}}\) lands in the safe \(0.05\)-\(0.15\) band.

  • Check that the driving group still matches: \(Q^*_H\) and \(\mathrm{Ra}\) depend on \(G\,\beta\,\Delta T\) together, and lowering \(G_{\text{lat}}\) is compensated by the longer time the flow has (in lattice steps) to develop, so the matched non-dimensional flow is preserved.

Lattice gravity is a similarity lever, not a physical change

Lowering \(G_{\text{lat}}\) does not make the simulated fire weaker. It rescales the lattice time step relative to the buoyant time scale so the same non-dimensional flow unfolds at a subsonic lattice velocity. It is the thermal analogue of choosing a small lattice velocity \(U\) in the isothermal recipe: a unit choice that buys stability, undone exactly by the conversion factors when results are read back.

The temperature ratio is emergent, not dialed

A recurring setup mistake is to treat the hot-layer temperature ratio as an input to be tuned to a target. It is not. With a heat source (rather than a fixed wall temperature), the steady temperature ratio emerges from the balance between the source and the buoyant venting; the knob you actually hold is the source strength.

Tune the source, read the emergent ratio

The GPU knob is the volumetric source rate (or the wall temperature, for fixed-temperature problems). Run the case, then measure the emergent effective ratio \(\theta_{\text{eff}} = \beta\,(\phi_{\text{hot}} - \phi_{\text{amb}})\) off the field, and adjust the source until \(\theta_{\text{eff}}\) reaches the physical target (for a compartment fire, \(\theta_{\text{eff}} \approx 0.3\)). You set \(\beta\) and \(G_{\text{lat}}\) once for the similarity match; the source rate is what you iterate, and \(\theta_{\text{eff}}\) is an output you check, never a value you write directly.

Dimensional reconstruction by similarity

Once a matched run has reached steady state, its dimensionless profiles (velocity normalised by \(U_b\), temperature by \(\Delta T\)) are the physical profiles. Reconstruct dimensional fields from the run’s own emergent ratio:

(1)\[ \Delta T_{\text{phys}} = \theta_{\text{eff}}\, T_0, \qquad U_{b,\text{phys}} = \sqrt{G_{\text{phys}}\, H_{\text{phys}}\, \theta_{\text{eff}}} \]

so a probed lattice velocity \(u_{\text{norm}}\) (normalised by the lattice \(U_b\)) maps to \(u_{\text{phys}} = u_{\text{norm}}\, U_{b,\text{phys}}\), and a normalised temperature \(T_{\text{norm}} \in [0,1]\) maps to \(T_{\text{phys}} = T_0 + \Delta T_{\text{phys}}\, T_{\text{norm}}\).

Temperature scales as the ratio, velocity as its square root

Reconstruction respects the \(\lambda\) versus \(\sqrt{\lambda}\) split noted on the dimensionless page: the temperature scale is \(\theta_{\text{eff}}\,T_0\) (linear in the ratio) but the velocity scale is \(\sqrt{G H\,\theta_{\text{eff}}}\) (square-root in the ratio). Multiplying every field by one common factor to “boost” a reduced-ratio run to the physical ratio is therefore incorrect - it would over-scale the velocity. Use (1) with the two different exponents.

The Boussinesq ceiling

Reconstruction is only as good as the Boussinesq approximation underneath it. At \(\theta_{\text{eff}} \approx 0.3\) the real density varies by tens of percent, which is the edge of the constant-density assumption (4). The reconstructed fields inherit that modelling error; it is the intrinsic ceiling of a Boussinesq surrogate for a strongly heated flow, not a tuning artefact. A flow that needs more than this must move to the variable-density low-Mach route, where the density is slaved to temperature through the equation of state rather than frozen.

The balancing recipe

For a buoyant, heat-source-driven thermal run the workflow is:

  1. Match \(\mathrm{Pr}\) (set \(\kappa = \nu/\mathrm{Pr}\)) and the geometry; identify the physical driving group (\(Q^*_H\) for a fire, \(\mathrm{Ra}\) for fixed-temperature convection).

  2. Set \(\beta\) and the scalar amplitude to represent the physical temperature ratio \(\theta \approx \beta\,\phi\).

  3. Choose the lattice gravity \(G_{\text{lat}}\) so the buoyancy velocity \(U_b = \sqrt{G_{\text{lat}}\,\beta\,\phi\,H_{\text{lat}}}\) falls in the \(0.05\)-\(0.15\) band (subsonic, weakly compressible).

  4. Confirm the driving group matches the physical value at these choices (compute \(Q^*_H\) or \(\mathrm{Ra}\) in lattice units and compare).

  5. Decide which groups to leave unmatched - typically the Reynolds/Grashof number, relying on Reynolds-independence of the gross exchange - and note it.

  6. Run, measure the emergent \(\theta_{\text{eff}}\), and iterate the source rate until it hits the physical target.

  7. Reconstruct dimensional fields with (1), respecting the \(\lambda\) / \(\sqrt{\lambda}\) split.

The balance in one sentence

Set \(\beta\) to the physical temperature ratio, lower the lattice gravity until the buoyancy velocity is subsonic, match the driving group (\(Q^*\) or \(\mathrm{Ra}\)) rather than the temperature ratio, tune the source so the emergent ratio is physical, and reconstruct with temperature linear and velocity square-root in that ratio.

This recipe is exactly what the Steckler room-fire validation case follows: it matches \(Q^*_H\) and \(\mathrm{Pr}\), lowers the lattice gravity to keep the doorway jet subsonic, leaves the Reynolds number reduced, and reconstructs dimensional doorway profiles from the run’s own emergent ratio.

The reduced-pressure mode in the variable-density closure

The variable-density low-Mach route adds a stability concern the Boussinesq route does not have, because it changes what the fluid zeroth moment means. In that closure the streamed populations no longer carry density; they carry the reduced hydrodynamic pressure \(\theta^h = p^h/(\rho c_s^2)\) (Taha et al. 2024, Eq. 33), and the density is closed separately from temperature through the equation of state \(\rho = P/(rT)\). Temperature changes therefore drive a dilatation \(\partial_\alpha u_\alpha = -\tfrac{1}{\rho}\,\mathrm{D}\rho/\mathrm{D}t\) that feeds the pressure field every step.

At the level of the continuous equations this coupling is benign. With gravity switched off it is the classical zero-Mach (Majda-Sethian) system: the temperature is parabolic and strictly dissipative, and the pressure acts as an elliptic Lagrange multiplier that enforces the divergence constraint instantaneously. That system has no growing high-wavenumber mode. The instability is introduced by the discretisation, not the model.

Why the bare scheme admits a checkerboard mode

The LBM does not solve an elliptic pressure projection. It carries \(\theta^h\) in the zeroth moment and relaxes it acoustically, at the finite lattice speed \(c_s\). The explicit, one-step-lagged dilatation source is therefore injected into a finite-speed, un-projected pressure variable that has no damping at the grid scale. The result is an under-damped, highest-wavenumber (\(k = \pi\), odd-even / checkerboard) acoustic mode: a smooth temperature bump seeds a smooth dilatation, the centred pressure-velocity coupling fails to damp the \(k = \pi\) component, and it grows geometrically while the physical buoyant signal evolves underneath it. Shear viscosity does not reach this mode (it is a pressure checkerboard, not a shear mode), which is why raising \(\tau\) does not cure it, and a continuous volumetric heat source makes it worse (more sustained dilatation pumps more acoustic energy, and \(\mathrm{Ma}\) climbs).

The bulk-viscosity stabiliser

The stabiliser damps exactly the mode the bare scheme fails to damp, and nothing else: it supplies the bulk (volume) viscosity the weakly-compressible lattice leaves out, applied inside the collision through models.LBM.bulk_viscosity. This is an independent relaxation rate \(\omega_{\text{bulk}} \in (0,2)\) acting on the trace of the non-equilibrium stress, off by default so the isothermal and Boussinesq paths, and any low-Mach run that does not need it, are bit-identical. It reaches the \(k = \pi\) reduced-pressure mode through the collision - the second-moment (stress) channel, which is non-zero at Nyquist.

The physical effect this realises is most transparent in its continuum analogue: a light Laplacian low-pass of the reduced pressure applied after its update,

(2)\[ \theta^h \;\leftarrow\; \theta^h + \sigma\,\nabla^2\theta^h , \qquad 0 \le \sigma \le \frac{1}{2d}, \]

for spatial dimension \(d\). In Fourier space such a filter multiplies a mode of wavenumber \(k\) by \(1 - 2\sigma\,(1 - \cos k)\) per axis: it is the identity at \(k \to 0\) (the smooth buoyant signal passes through untouched) and it is most aggressive at \(k = \pi\), where it scales the offending checkerboard component by \(1 - 4\sigma\) per axis. The upper bound \(\sigma \le 1/(2d)\) is the explicit-diffusion stability limit, the same constraint the energy Laplacian obeys; at \(\sigma = 1/(2d)\) the \(k = \pi\) mode is annihilated in one pass. The in-collision bulk viscosity delivers the same selective high-wavenumber absorption without that explicit-diffusion cap, because it is a relaxation with \(\omega_{\text{bulk}} \in (0,2)\) rather than an explicit Laplacian step.

What the stabiliser means physically

The low-pass model (2) makes the continuum meaning explicit. Adding \(\sigma\,\nabla^2\theta^h\) to the pressure update is, term by term, a diffusion of the hydrodynamic pressure: over a step the reduced pressure evolves as \(\partial_t \theta^h = \cdots + \sigma\,\nabla^2\theta^h\), a Laplacian relaxation with diffusivity \(\sigma\).

A diffusion of pressure is precisely what bulk (volume) viscosity contributes to a real gas. The attenuation of a sound wave scales as \(\delta\,k^2\), where the sound diffusivity \(\delta = \tfrac{1}{\rho}\big(\tfrac{4}{3}\mu + \zeta\big)\) collects the shear and bulk viscosities \(\mu\), \(\zeta\). The weakly-compressible LBM is built with a near-zero bulk viscosity (the trace of the stress relaxes at the same rate as the shear), so it damps compression and dilatation waves far too weakly. The variable-density coupling then pours dilatation into that under-damped acoustic field every step, and the grid-scale sound has nowhere to go. The bulk-viscosity stabiliser restores the missing acoustic absorption: it raises the sound diffusivity at high wavenumber so the spurious compression mode is absorbed - the physical role \(\zeta\) plays, supplied where the lattice left it out. The pressure low-pass (2) is the same effective bulk viscosity seen as a selective diffusion of the pressure field; the in-collision relaxation is the realisation that supplies it through the physical stress channel.

Seen another way, the effective bulk viscosity nudges the pressure toward its local neighbourhood mean, i.e. partially back toward the elliptic (instantaneous) pressure of the true low-Mach limit. The continuum low-Mach pressure communicates across the domain infinitely fast (the divergence constraint is global); the LBM replaces that with finite-speed acoustics; the absorption returns a little of that instantaneous, smoothed-out character to the field.

A pressure-side cousin of the regularized (RR/HRR) collision

This places the bulk-viscosity stabiliser in the same family as the regularized collision operators that stabilise LBM more generally. Recursive-regularised (RR) and hybrid (HRR) kernels cure spurious high-frequency and acoustic behaviour by projecting out, or selectively dissipating, the non-hydrodynamic ghost moments carried by the non-equilibrium populations - removing energy from modes that are numerical artefacts while leaving the resolved hydrodynamics untouched. The bulk viscosity does the same kind of thing, targeting the trace of the non-equilibrium stress, the channel that couples to the reduced pressure at high wavenumber. That is why it reaches the mode the shear-relaxation does not: the standard collision damps spurious content in the deviatoric stress, whereas the variable-density instability lives in the pressure field, so it needs a selective dissipation of the same spirit applied through the trace.

The stabiliser treats the symptom; the lattice corrections matter too

The bulk viscosity is a robust, route-agnostic stabiliser, but it is not the only lever. A pressure-carrying low-Mach LBM also relies on the lattice correction tensors of its reference scheme for isotropy and, in some formulations, for grid-scale dissipation. On the complete D3Q27 Hermite basis the D3Q19 isotropy patches are unnecessary and are dropped; on a reduced lattice (D3Q19) that shows the same mode, the first check is whether a dropped correction carried the missing dissipation, before reaching for a larger bulk viscosity. The dilatation per step \((\rho^{n} - \rho^{n-1})/\rho\) should also be kept well below the acoustic CFL: when a continuous heat source drives it too hard the velocity leaves the weakly-compressible band regardless of the stabiliser.