What you're looking at
Air is modelled as populations of particles hopping between neighbouring cells of a lattice in nine directions, colliding and relaxing towards local equilibrium. This is the lattice Boltzmann method, and with enough cells it recovers the Navier–Stokes equations of fluid flow. Every cell is updated by a WebGL fragment shader, so the whole tunnel runs in parallel on the graphics card.
The Reynolds number compares inertia with viscosity. Low Re is syrupy and symmetric; raise it and the wake behind the cylinder starts to shed alternating vortices, the Kármán vortex street seen in clouds behind islands and heard as the hum of wires in wind.
Lift and drag are not looked up: they are measured. Every particle population that bounces off the body transfers momentum to it, and summing those exchanges over the surface gives the force. Pitch the wing up and lift climbs, until the flow can no longer stay attached over the top surface and it stalls: lift collapses, drag jumps, and the wake becomes a wide, unsteady mess.
At high Reynolds numbers the grid is too coarse to resolve the smallest eddies, so a Smagorinsky sub-grid model adds local eddy viscosity where the flow is being strained hard, the same idea used in large-eddy simulation. The top and bottom of the tunnel wrap around, the inlet blows at a fixed speed, and the outlet holds a fixed pressure.
Heat rides on a second lattice: temperature hops between cells the same way the air does, carried by the flow and diffusing with air's Prandtl number, and where the air is warm it is pushed upward in proportion to its temperature (the Boussinesq approximation). The Richardson number sets how strong that push is compared with the wind.
Keys: space pauses, R resets, 1–6 switch views, ↑ ↓ pitch. Accuracy: see the benchmark page. Built by Lukas Schulz.