Skip to content
cfd-lab:~/en/posts/2026-05-07-circulation-l…online
NOTE #036DAY THU 유체역학DATE 2026.05.07READ 5 min readWORDS 900#유체역학#양력#Magnus#Kutta-Joukowski#Circulation#Potential-Flow

Why a Spinning Ball Curves — Circulation, Magnus, and the Kutta–Joukowski Theorem

The real reason rotating bodies generate lift, and the invisible role of the starting vortex

The day a spinning shell refused to fly straight#

In 1853, the Berlin physicist Heinrich Magnus brought a question gunners had been asking for centuries into the wind tunnel. A spinning artillery shell does not fly straight — it curves sideways. He hung a vertical, rotating cylinder in the flow and measured a steady lateral force perpendicular to the spin axis. Rotation was making lift.

The "why?" remained. In an inviscid fluid the surface slips freely, so what makes the upper side faster and the lower side slower? The answer is one word: circulation. This post starts from the definition of circulation, shows why a rotating cylinder is pulled upward, and follows the trail to the Kutta–Joukowski theorem, which generalizes the conclusion to every two-dimensional lifting body. At the end we face the one thing inviscid theory cannot answer on its own — how circulation is born from a fluid that started at rest — and resolve it through the starting vortex.

Circulation — one closed-curve integral#

Circulation Γ\Gamma has a one-line definition.

Γ=Cuds\Gamma = \oint_{C} \mathbf{u}\cdot d\mathbf{s}

The tangential component of velocity, integrated once around a closed curve CC. Here u\mathbf{u} is the velocity vector and dsd\mathbf{s} is the differential tangent to the curve.

Stokes' theorem turns it into a surface integral.

Γ=SωdA\Gamma = \iint_{S} \boldsymbol{\omega}\cdot d\mathbf{A}

ω=×u\boldsymbol{\omega} = \nabla\times\mathbf{u} is the vorticity and dAd\mathbf{A} the differential normal area enclosed by CC. So circulation is the total amount of vorticity trapped inside the loop.

Two facts are worth fixing. A loop can enclose zero vorticity at every point and still have nonzero circulation — a free vortex (a point where vorticity is concentrated) does exactly this for any loop drawn around it. And the units differ: vorticity is [1/s], circulation is [m²/s] — vorticity multiplied by area.

Why a rotating cylinder is pulled upward#

In incompressible, irrotational, inviscid flow, the cleanest way to build a steady solution is to superpose elementary ones. Uniform flow plus a doublet gives a stationary cylinder. Adding a point vortex at the center turns it into a rotating cylinder.

Packed into one complex potential,

W(z)=Uz+UR2z+iΓ2πlnzW(z) = U_\infty z + \frac{U_\infty R^2}{z} + \frac{i\Gamma}{2\pi}\ln z

with the convention that positive Γ\Gamma is clockwise rotation. The tangential surface velocity at r=Rr = R is

uθ(R,θ)=2UsinθΓ2πRu_\theta(R, \theta) = -2 U_\infty \sin\theta - \frac{\Gamma}{2\pi R}

On the top (θ=π/2\theta = \pi/2) the two terms add with the same sign and uθ|u_\theta| grows. On the bottom (θ=π/2\theta = -\pi/2) they cancel. Faster flow on top means lower pressure on top by Bernoulli,

p+12ρu2=constp + \tfrac{1}{2}\rho u^2 = \text{const}

and the integrated pressure difference around the cylinder leaves a net upward force.

Try the simulation directly below.

Streamlines from uniform flow U∞ + doublet (cylinder) + point vortex Γ. Top flow accelerates, bottom decelerates: by Bernoulli, low pressure on top → upward force L′ = ρU∞Γ. Yellow dots are stagnation points; when |Γ| > 4πU∞R they merge and detach below the cylinder (red dot).

As you crank up Γ|\Gamma| from zero, the yellow stagnation points slide downward. At Γ=4πUR|\Gamma| = 4\pi U_\infty R they merge into a single point and detach from the cylinder — past this critical spin the topology of the flow flips entirely.

The Kutta–Joukowski theorem — L′ = ρU∞Γ#

Integrating the surface pressure gives a clean answer. In inviscid steady flow the drag is exactly zero, and the lift per unit span is

L=ρUΓL' = \rho U_\infty \Gamma

Lanchester proposed it as a conjecture in 1894; in the early 1900s Kutta in Germany and Joukowski in Russia independently turned it into a theorem.

Two things make this formula powerful. First, the body shape is gone. Any 2D cross section with the same circulation around it produces the same lift. Second, lift scales with circulation, not with rotation itself. A wing that does not spin still develops a circulation around its profile and, with it, lift.

The starting vortex, and the silent role of viscosity#

A contradiction shows up here. A fluid at rest has zero vorticity everywhere, so any closed loop has zero circulation. Kelvin's circulation theorem — circulation around a material curve in inviscid, body-force-conservative flow stays constant in time — insists that zero must remain zero forever.

So how does an airplane lift off?

The answer is viscosity. The instant a wing accelerates from rest, inviscid theory demands an infinite velocity at the sharp trailing edge. A real fluid bleeds that kinetic energy through viscosity, and a vortex separates from the trailing edge — the starting vortex, rotating counterclockwise.

Kelvin's theorem still requires that the total circulation around a loop large enough to contain both the wing and its wake equals zero. So a clockwise circulation of equal magnitude is left around the airfoil — the bound vortex — and that bound circulation is the Γ\Gamma in L=ρUΓL' = \rho U_\infty \Gamma.

Press start motion below.

Press start motion: a counterclockwise starting vortex sheds from the trailing edge while an equal-magnitude clockwise bound circulation grows around the wing. Their sum is zero (Kelvin's circulation theorem). The bound circulation is what produces lift L′ = ρU∞Γ_bound. t=0.00 s, Γ_bound=0.00, Γ_shed=0.00.

Increase the angle of attack and the clockwise bound circulation grows; an equal-magnitude counterclockwise starting vortex sheds off the trailing edge. Their sum stays zero. The lift on a wing that looks inviscid is the post-shedding state read through inviscid eyes.

Code: surface speed and lift coefficient#

The Magnus picture fits onto one page of NumPy: streamfunction, surface pressure coefficient, and lift coefficient in one go.

import numpy as np
 
def cylinder_streamfunction(x, y, U_inf, gamma, R):
    """Stream function: ψ = U sinθ (r - R²/r) + Γ/(2π) ln(r/R), Γ>0 = clockwise."""
    r = np.hypot(x, y)
    theta = np.arctan2(y, x)
    safe = np.maximum(r, 1e-9)
    psi_uniform = U_inf * np.sin(theta) * (safe - R ** 2 / safe)
    psi_vortex = (gamma / (2 * np.pi)) * np.log(safe / R)
    return psi_uniform + psi_vortex
 
def surface_pressure_coeff(theta, U_inf, gamma, R):
    """Surface (r = R) pressure coefficient Cp = 1 - (u/U∞)^2."""
    u_theta = -2 * U_inf * np.sin(theta) - gamma / (2 * np.pi * R)
    return 1.0 - (u_theta / U_inf) ** 2
 
def magnus_lift_coefficient(gamma, U_inf, R):
    """L' = ρU∞Γ → C_L = 2Γ/(U∞·d) with diameter d = 2R."""
    return gamma / (U_inf * R)
 
# A quick three-shot run (ρ = 1 implied)
U_inf, R = 10.0, 0.5
for gamma in [0.0, np.pi * U_inf * R, 4 * np.pi * U_inf * R]:
    theta = np.linspace(-np.pi, np.pi, 360)
    cp = surface_pressure_coeff(theta, U_inf, gamma, R)
    L_per_span = U_inf * gamma
    cl = magnus_lift_coefficient(gamma, U_inf, R)
    print(f"Γ={gamma:6.2f}  C_L={cl:5.2f}"
          f"  Cp_top={cp[270]:+.2f}  Cp_bot={cp[90]:+.2f}"
          f"  L'/ρ={L_per_span:6.2f}")

When Γ=0\Gamma = 0 the lift is exactly zero and Cp is symmetric on top and bottom. Push Γ\Gamma to the critical 4πUR4\pi U_\infty R and the two stagnation points collide into one — the red dot in the visualization above.

Three lines worth keeping#

  • Lift comes from circulation, not from rotation itself. The per-span formula L=ρUΓL' = \rho U_\infty \Gamma holds for every 2D lifting body.
  • A rotating cylinder is exactly modeled as uniform flow + doublet + point vortex. The top side speeds up, the bottom slows down, and Bernoulli does the rest.
  • Without viscosity there is no lift. The starting vortex shed at the trailing edge keeps Kelvin's theorem honest while leaving an equal, opposite bound vortex around the wing — that bound circulation is what flight rides on.

Share if you found it helpful.