Potential-flow streamlines · pressure & lift · separation and stall
The flow is built by superposition of elementary potential-flow solutions — a uniform stream plus a doublet (which makes a cylinder) and a vortex of strength Γ (which adds circulation). For the aerofoil the cylinder solution is mapped to a wing-like shape. Wherever the streamlines crowd together the local speed v rises, and Bernoulli's equation p + ½ρv² = const says the pressure must fall there. The colour shows the pressure coefficient Cp = 1 − (v/U)²: blue is suction (fast flow, low pressure) and red is high pressure near the stagnation points where the flow divides.
Lift comes from circulation. The Kutta–Joukowski theorem gives L = ρ·U·Γ per unit span, so more circulation (more camber or angle of attack) means more lift. The low pressure on the upper surface and higher pressure below add up to a net upward force.
Potential flow alone never stalls, so this model adds a simple boundary-layer cue: past a critical angle of attack the adverse pressure gradient on the upper surface separates the flow, the smoke breaks into a turbulent wake, lift collapses and drag jumps — a stall. For the cylinder you can see hints of the alternating Kármán vortex street in the wake. The Reynolds number Re = ρUL/μ sets how thin the boundary layer is and when transition to turbulence occurs.
This simulator builds real potential-flow solutions by superposing a uniform stream, a doublet (which forms a cylinder), and a vortex of strength Γ that adds circulation — the aerofoil shape is generated as a mapped, cambered teardrop using the same field. Streamline colour follows the actual pressure coefficient Cp = 1 − (v/U)² from Bernoulli's equation, lift is computed from the Kutta-Joukowski theorem L = ρ·U·Γ, and a simple boundary-layer cue kicks in past a critical angle of attack to simulate flow separation and stall.
How wings actually generate lift: circulation around the body speeds up flow on one side and slows it on the other, and by Bernoulli's principle the faster side has lower pressure — the pressure difference across the body is the lift force, exactly as described by the Kutta-Joukowski theorem.
Pick a Preset (Low-AoA cruise, High-AoA stall, Cylinder Kármán, Flat plate) or choose a Body shape directly (Aerofoil, Cylinder, Sphere, Flat plate); drag Angle of attack α, Wind speed U, and Camber/circulation to reshape the flow; watch Lift coefficient, Drag coefficient, Reynolds number, Circulation Γ, and Flow state update live as smoke streaklines and pressure-coloured streamlines respond.
Potential-flow theory alone predicts zero drag on any shape (d'Alembert's paradox) and never stalls — real stall only happens because of viscosity in the thin boundary layer, which is why this simulator has to add a separate, explicit rule to reproduce the sudden lift collapse seen at high angle of attack.
Circulation is a net rotational component added to the flow around the body; per the Kutta-Joukowski theorem, lift per unit span equals ρ·U·Γ, so more circulation — from more camber or a higher angle of attack — directly produces more lift.
The colour encodes the local pressure coefficient Cp = 1 − (v/U)², derived from Bernoulli's equation; where streamlines crowd together the flow speeds up and Cp drops (blue, suction), while near stagnation points the flow slows and pressure rises (red).
Past a critical angle of attack, the adverse pressure gradient on the upper surface becomes too strong for the thin boundary layer to overcome, so the flow separates from the surface, lift collapses, and drag rises sharply — visualised here as the smoke breaking into a turbulent wake.
It's the alternating pattern of vortices shed from opposite sides of a bluff body like a cylinder as fluid flows past it, a classic unsteady wake phenomenon that occurs across a wide range of Reynolds numbers and is hinted at in this model's cylinder mode.
Re = ρUL/μ compares inertial to viscous forces and determines how thin the boundary layer is and when the flow transitions to turbulence — it governs real drag and stall behaviour even though this simulation's core potential-flow solution itself is Reynolds-number independent.