(vc_tgv_3d)= # 3-D Taylor-Green Vortex The Taylor-Green vortex (TGV) is a canonical benchmark used to assess a solver's ability to reproduce unsteady, spatially periodic flows with known reference data. The initial conditions take the form of smooth trigonometric functions, making the TGV an ideal test for equation-based initialization: the solver must evaluate $\sin$ and $\cos$ expressions at every lattice node at startup and reproduce them to floating-point precision before the time-marching begins. Two complementary sub-cases are used here. Case 00a is a 2-D TGV, which admits a closed-form analytical solution valid for all time and therefore provides a stringent quantitative accuracy and convergence test. Case 00b is a 3-D TGV, for which no analytical solution exists once the flow has transitioned to turbulence; the dissipation rate is compared against the pseudo-spectral DNS of {footcite:t}`vanRees2011`. The 3-D TGV starts from a smooth, low-amplitude initial condition that is linearly unstable. At moderate Reynolds numbers the flow develops a cascade of smaller vortical structures and eventually reaches a regime of decaying turbulence. Because an exact solution does not exist for $t > 0$, validation is performed by comparing the kinetic energy dissipation rate $\varepsilon(t) = -\mathrm{d}E/\mathrm{d}t$ against the spectral DNS results of {footcite:t}`vanRees2011`. (vc_tgv_3d_ic)= ## Initial conditions The velocity and pressure fields at $t = 0$ are the standard TGV initial condition on the periodic cube $[0,\, 2\pi]^3$: ```{math} --- label: vc_tgv3d_ic --- \begin{aligned} u_x(x, y, z, 0) &= V_0 \sin(k x) \cos(k y) \cos(k z) \\ u_y(x, y, z, 0) &= -V_0 \cos(k x) \sin(k y) \cos(k z) \\ u_z(x, y, z, 0) &= 0 \\ \rho(x, y, z, 0) &= \rho_0 + \frac{\rho_0 V_0^2}{16 c_s^2} \left[\cos(2kz) + 2\right] \left[\cos(2kx) + \cos(2ky)\right] \end{aligned} ``` where $k = 2\pi / L$ and $V_0$ is the peak velocity. The density expression in {eq}`vc_tgv3d_ic` is the weakly-compressible approximation of the incompressible pressure distribution. In the current simulation $\rho_0 = 1$ is used uniformly (i.e. the density correction is omitted) because at $\mathrm{Ma} \approx 0.07$ the maximum perturbation is of order $10^{-3}$ and does not affect the velocity dynamics. As with Case 00a, these fields are set via `models.initialization.equations`, evaluating the trigonometric expressions on the GPU at startup. (vc_tgv_3d_validation)= ## Validation approach The volume-averaged kinetic energy is: ```{math} --- label: vc_tgv3d_energy --- E(t) = \frac{1}{N^3} \sum_{i,j,k} \frac{1}{2} \rho(i,j,k,t) \left(u_x^2 + u_y^2 + u_z^2\right) ``` The dissipation rate is estimated by finite difference: ```{math} --- label: vc_tgv3d_dissipation --- \varepsilon(t) = -\frac{\mathrm{d}E}{\mathrm{d}t} \approx -\frac{E(t + \Delta T) - E(t - \Delta T)}{2\,\Delta T} ``` where $\Delta T$ is the interval between saved snapshots. The DNS reference of {footcite:t}`vanRees2011` was computed with a pseudospectral code at $Re_\Gamma = 1/\nu = 1600$ on grids up to $768^3$. The reference dissipation curve is digitised from Figure 8a and 8b of the paper (768^3^ PS results, the most converged resolution). The Reynolds number is defined with characteristic length $L^* = 1/k_0 = 1$ (the inverse wavenumber), so in lattice units $Re = V_0 N / (2\pi\nu)$. The peak dissipation time and magnitude are well established and serve as the primary quantitative targets. (vc_tgv_3d_params)= ## Simulation parameters | Parameter | Value | | -------------------------- | ---------------------------------------------------- | | Velocity set | D3Q27 | | Collision operator | RRBGK | | Relaxation time $\tau$ | 0.503056 | | Peak velocity $V_0$ | 0.04 (lattice units) | | Reference density $\rho_0$ | 1.0 | | Domain | $[0,\, 2\pi]^3$, periodic in all three directions | | Grid size $N$ | 256 nodes per side | | Boundary conditions | Fully periodic (`periodic_dims: [true, true, true]`) | | Initialization | Equation-based (`use_equation_init: true`) | | Reference DNS | {footcite:t}`vanRees2011`, $Re_\Gamma = 1600$ | ```{note} The Reynolds number follows the van Rees convention $Re_\Gamma = 1/\nu$ with characteristic length $L^* = 1$ (inverse wavenumber) and $V_0 = 1$. In lattice units this becomes $Re = V_0 N / (2\pi\nu)$, giving $\nu \approx 0.001019$ and $\tau = 3\nu + 0.5 \approx 0.503056$. ``` ```{toctree} --- hidden: --- 01_taylor_green_vortex_3d.ipynb ``` ```{footbibliography} ```