The airfoil is modelled as the generating circle of a thin Joukowski wing (radius R = c/4), placed in a uniform stream and given the circulation that satisfies the Kutta condition (smooth flow off the trailing edge):
Γ = π·c·V·sin(α)
dw/dz = V·(1 − R²/z²) + i·Γ/(2πz) (complex potential, body frame)
u − iv = dw/dz → world velocity after rotating by α
This exact potential-flow solution is evaluated at every streamline point each frame, so the curvature you see around the wing is the same superposition (uniform flow + doublet + vortex) that gives the classic Kutta–Joukowski lift result:
Cl = 2π·sin(α) (thin-airfoil theory)
Cd = Cd0 + k·Cl² + turbulence term (parasitic + induced + turbulence)
L' = ½ρV²·c·Cl D' = ½ρV²·c·Cd (force per metre of span)
Re = ρ·V·c / μ
Past the ~16° stall angle, the model tapers Cl down and adds separation drag to mimic boundary-layer breakaway — the streamline field starts shedding into a turbulent wake behind the wing instead of closing smoothly, and the flow-state readout flips to "Stalled".
- Streamlines — passive tracer particles advected by the analytic velocity field; colour intensity follows local speed.
- Turbulence slider — adds stochastic jitter to the particles and raises Cd, independent of the potential-flow lift.
- Reynolds number — uses air density ρ = 1.225 kg/m³ and dynamic viscosity μ = 1.81×10⁻⁵ Pa·s at sea level.