(vc_turb_channel_passive_scalar)= # Turbulent Channel Flow with Passive Scalar Validates the scalar advection-diffusion module under fully-developed wall-bounded turbulence. The fluid is the same turbulent plane channel as {ref}`vc_turb_channel_flow` at $\mathrm{Re}_\tau \approx 180$; a passive scalar $\phi$ is added on top, with Dirichlet walls at $y = 0$ ($\phi_w = 0$) and $y = L_y$ ($\phi_w = 1$). The case is the canonical heated-channel benchmark and the first exercise of the scalar regularised wall BCs in a turbulent regime. The fluid setup follows the case 04 multilevel configuration (same physics, BC topology, hot-start artefact and near-wall refinement strategy) at a reduced box: $\delta = 40$ lattice units and a $6\delta \times 2\delta \times 3\delta$ domain matching Kawamura's own $6.4 \times 2 \times 3.2$ aspect ratio. This keeps the total cost in the same budget class as the Taylor-Green 3-D case while leaving the box dimensions ($L_x^+ = 1080$, $L_z^+ = 540$) well above the minimal-flow-unit thresholds, so the buffer-layer streak dynamics and the scalar statistics are unconstrained. The fluid component of the exact case-04 configuration has been validated against {footcite:t}`KimMoinMoiser1987-177`; the channel here re-validates at the smaller box as part of this case. (vc_turb_channel_passive_scalar_setup)= ## Setup - **Geometry.** Plane channel of size $L_x \times L_y \times L_z = 240 \times 80 \times 120$ in lattice units. Wall normal is $y$; periodic in $x, z$. - **Fluid.** D3Q27 RR-BGK with $\tau = 0.503333$ ($u^* = 0.005$, $\nu = u^* \delta / \mathrm{Re}_\tau$), body force $F_x = u^{*2}/\delta = 6.25 \times 10^{-7}$. Two static refinement slabs at level 1 cover the near-wall regions $0 \le y < 8$ and $72 \le y < 80$, giving $\Delta y^+ \approx 2.25$ at the finest level (covering $y^+ \le 36$). Walls at $y = 0$ and $y = L_y$ use `RegularizedHWBB`. Hot-started from the same artefact `turbulent_channel.vtm` as case 04, so the case begins in a statistically stationary state. - **Scalar.** D3Q7 RR-BGK with molecular diffusivity $D = 1.565 \times 10^{-3}$ in lattice units, giving a molecular Prandtl number $\mathrm{Pr} = \nu / D = 0.71$ (air; the most-cited Kawamura curve). The case runs without LES (quasi-DNS, matching the case 04 channel family), so the $\mathrm{Sc}_t$ subgrid coupling is inactive. Walls at $y = 0$ and $y = L_y$ use `ScalarRegularizedDirichlet` at $\phi_w = 0$ and $\phi_w = 1$ respectively. Initial scalar field is the laminar steady-state linear ramp $\phi(y) = y / L_y$, which puts the initial condition close to the eventual time-averaged mean so the statistics window can stay short. (vc_turb_channel_passive_scalar_governing)= ## Governing equation The passive scalar field $\phi(\mathbf{x}, t)$ satisfies the advection-diffusion equation ```{math} --- label: vc_turb_chan_phi_pde --- \frac{\partial \phi}{\partial t} + u_\alpha \frac{\partial \phi}{\partial x_\alpha} = D\, \frac{\partial^2 \phi}{\partial x_\alpha \partial x_\alpha} ``` with no source term. Under LES the molecular diffusivity is augmented by a subgrid contribution $\nu_\mathrm{SGS} / \mathrm{Sc}_t$, so the effective diffusivity used by the lattice Boltzmann scalar operator is ```{math} --- label: vc_turb_chan_phi_Deff --- D_\mathrm{eff} = D + \frac{\nu_\mathrm{SGS}}{\mathrm{Sc}_t}. ``` Reynolds-averaging {eq}`vc_turb_chan_phi_pde` in the streamwise and spanwise directions gives the statistically stationary balance between molecular diffusion and the turbulent scalar flux: ```{math} --- label: vc_turb_chan_phi_RANS --- 0 = D\, \frac{d^2 \langle \phi \rangle}{dy^2} - \frac{d \langle v' \phi' \rangle}{dy}. ``` Integrating {eq}`vc_turb_chan_phi_RANS` once gives the total scalar flux (molecular plus turbulent) $$q_\mathrm{tot}(y) = -D\, \frac{d \langle \phi \rangle}{dy} + \langle v' \phi' \rangle = \mathrm{const.}$$ which is the canonical Kawamura balance. In wall units $y^+ = y u^* / \nu$ with friction scalar $\phi^* = q_w / (\rho c_p u^*)$, the mean profile follows the usual three-layer structure (viscous sublayer linear, log layer with Karman constant $\kappa_\phi$, and a wake correction at the core). (vc_turb_channel_passive_scalar_reference)= ## Reference The reference data is the {footcite:t}`Kawamura1998-196` {footcite:p}`Kawamura1999-115` DNS database for the heated turbulent plane channel, which provides: - the mean scalar profile $\langle \phi \rangle^+(y^+)$; - the scalar fluctuation RMS $\langle \phi'^2 \rangle^{+}(y^+)$; - the turbulent scalar flux $\langle u' \phi' \rangle^{+}(y^+)$ and $\langle v' \phi' \rangle^{+}(y^+)$; at multiple $\mathrm{Re}_\tau$ and $\mathrm{Pr}$ values. For $\mathrm{Re}_\tau = 180,\ \mathrm{Pr} = 0.71$ (the configuration of this case) the Kawamura database remains the canonical validation target in the LBM and LES literature. (vc_turb_channel_passive_scalar_params)= ## Simulation parameters | Parameter | Value | | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | Friction Reynolds number $\mathrm{Re}_\tau$ | $\approx 180$ | | Molecular Prandtl number $\mathrm{Pr}$ | 0.71 (air) | | LES / $\mathrm{Sc}_t$ | none (quasi-DNS; the `Sc_t` subgrid coupling is inactive) | | Domain $L_x \times L_y \times L_z$ (lattice units) | 240 x 80 x 120 ($6\delta \times 2\delta \times 3\delta$, $\delta = 40$) | | Refinement | Two static slabs at level 1 in $0 \le y < 8$ and $72 \le y < 80$ | | $\Delta y^+$ (finest level) | $\approx 2.25$ | | Fluid velocity set | D3Q27 | | Fluid collision operator | RRBGK | | Fluid relaxation time $\tau$ | 0.503333 | | Streamwise body force $F_x$ (lattice units) | 6.25e-7 | | Scalar velocity set | D3Q7 | | Scalar collision operator | RRBGK | | Scalar diffusivity $D$ (lattice units) | 1.565e-3 (= $\nu / \mathrm{Pr}$) | | Scalar boundary conditions | South wall ($y = 0$): `ScalarRegularizedDirichlet` $\phi_w = 0$. North wall ($y = L_y$): `ScalarRegularizedDirichlet` $\phi_w = 1$. $x, z$ periodic. | | Initial scalar field | $\phi(y) = y / L_y$ (laminar steady-state ramp) | | Fluid initialisation | `turbulent_channel.vtm` (hot-start from case 04) | | Number of steps | 150000 (statistics from step 50000 onwards, $\approx 12.5$ eddy turnovers at $\mathrm{ETT} = \delta / u^* = 8000$ steps) | (vc_turb_channel_passive_scalar_metrics)= ## Validation metrics All Reynolds-averaged scalar quantities are reconstructed in the notebook from a single source: the `channel_profile.mid_channel` plane time series. The plane is normal to the spanwise axis $z$ and spans the full streamwise / wall-normal $(x, y)$ domain, sampled every 100 steps from step 50000 to 150000. Because the flow is homogeneous in $x$, each wall-normal node averages over every $(x, t)$ sample (1000 snapshots x 240 streamwise nodes), and the two walls are folded onto the half-channel by parity under the reflection $y \to L_y - y$ combined with $\phi \to 1 - \phi$: 1. **Mean scalar profile** $\langle \phi \rangle^+(y^+)$, the sample mean of `scalar_phi`. 1. **Scalar RMS profile** $\langle \phi'^2 \rangle^{+}(y^+)$, from $\langle \phi^2 \rangle - \langle \phi \rangle^2$. 1. **Turbulent scalar fluxes** $\langle u' \phi' \rangle^{+}(y^+)$ and $\langle v' \phi' \rangle^{+}(y^+)$, formed as the covariances $\overline{u_\alpha \phi} - \overline{u_\alpha}\,\overline{\phi}$ over the same samples. A single plane therefore yields the cross-correlation fluxes that an auto-variance statistics kernel cannot. Wall units are computed from the friction velocity $u^*$ (fixed analytically by the driving body force, $u^* = \sqrt{F_x \delta}$) and the friction scalar $\phi^* = q_w / (\rho c_p u^*)$, where the wall flux $q_w$ is read off the near-wall gradient of $\langle \phi \rangle$. A passing result reproduces the linear viscous sublayer $\langle \phi \rangle^+ = \mathrm{Pr}\, y^+$ close to the wall, matches the slope of the log layer and the position / amplitude of the scalar RMS peak, and stays within $\sim 5\%$ of the Kawamura $\langle v' \phi' \rangle^{+}$ profile across the channel core. ```{note} The notebook runs end to end today but skips the scalar panels until the scalar BC reconstruction kernels move past the TODO stubs: the configuration parses and dispatches through the BC pipeline, but the per-BC `g_i` reconstruction is currently a no-op, so the scalar field is non-finite and only the flow field is valid. Once the kernels produce a finite scalar and the case is re-run, the scalar profiles populate automatically. ``` ```{toctree} --- hidden: --- 02_turb_channel_passive_scalar.ipynb ``` ```{footbibliography} ```