Skip to content
cfd-lab:~/zh/posts/2026-05-07-circulation-l…● online

本文译自作者的韩语原文。 阅读原文(한국어)

NOTE #034DAY THU 유체역학DATE 2026.05.07UPDATED 2026.10.19READ 4 min read#Fluid-Dynamics#Lift#Magnus#Kutta-Joukowski#Circulation#Potential-Flow

旋转的球为什么会拐弯 — 环量、马格努斯效应与库塔–儒科夫斯基定理

升力公式只留下环量、抹掉外形,但把环量定下来的是粘性。

旋转的炮弹拒绝直飞的那一天

1853年,柏林。Heinrich Magnus 把炮手已经知道的问题放进了风洞。旋转的炮弹不走直线,往侧面滑。轴竖起来的圆柱,在垂直于轴的方向上给出定常的侧力。

没有粘性,表面照样滑。可上面还是快,下面还是慢。造成这个差别的量是环量 Γ\Gamma。

把 Γ\Gamma 滑块从0往上推,黄色驻点就往下走;超过 4πU∞R4\pi U_\infty R,这个点离开表面。

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).

驻点聚到底部的地方,就是临界旋转。再往上,流线绕圆柱一圈,不再从下方溜走。

同样的环量也能贴在机翼上。非粘理论自己开不了这个头。后面用起动涡把它收住。

环量 — 闭曲线上的一行积分

环量 Γ\Gamma 的定义是一行。

Γ=∮Cu⋅ds\Gamma = \oint_{C} \mathbf{u}\cdot d\mathbf{s}

在闭曲线 CC 上把速度的切向分量积一圈。u\mathbf{u} 是速度,dsd\mathbf{s} 是微元切向。

用 Stokes 挪到面积分,

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

ω=∇×u\boldsymbol{\omega}=\nabla\times\mathbf{u} 是涡量,dAd\mathbf{A} 是闭曲线所围曲面的法向微元。环量就是困在里面的涡量总和。

闭曲线里面可以一个涡量点都没有,环量照样不是0。围着点涡的大环就是这样。单位也不一样。涡量是 [1/s],环量是 [m²/s],涡量再乘面积。

旋转圆柱为什么被向上拽起

在无粘、无旋、不可压里,干净的定常解是基本解的叠加。均匀流加偶极子,得到静止圆柱。中心再加点涡,就变成旋转圆柱。

收成一个复势,

W(z)=U∞z+U∞R2z+iΓ2πln⁡zW(z) = U_\infty z + \frac{U_\infty R^2}{z} + \frac{i\Gamma}{2\pi}\ln z

三项是均匀流、偶极子、点涡。Γ\Gamma 为正是顺时针。表面 r=Rr=R 的切向速度是

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

上表面 θ=π/2\theta=\pi/2,两项同号相加,∣uθ∣|u_\theta| 变大。下表面 θ=−π/2\theta=-\pi/2,互相抵消。上面更快,由 Bernoulli

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

上表面压力就低。沿周向把压力差积起来,剩下向上的力。

驻点是 uθ=0u_\theta=0,于是 sin⁡θ=−Γ/(4πU∞R)\sin\theta=-\Gamma/(4\pi U_\infty R)。临界环量 Γ=4πU∞R\Gamma=4\pi U_\infty R 时 sin⁡θ=−1\sin\theta=-1,解只剩 θ=−π/2\theta=-\pi/2,在底部。前面图里的黄点就聚在那里。

库塔–儒科夫斯基定理 — L′ = ρU∞Γ#

把表面压力积完,结果很短。无粘定常流里阻力是0,单位宽度升力是

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

1894年 Lanchester 把它写成猜想。20世纪初 Kutta 和 Joukowski 各自证明了它。

外形从式子里掉出去。二维截面是什么都行,只要绕一周的环量相同,升力就相同。升力正比于环量,不是转速。不转的机翼,只要截面和迎角对得上,周围也会长出环量,升力就来自那个环量。

阻力掉到0的地方,和无环量的圆柱是同一处。均匀流加偶极子写成的复势把那个零阻力留成 d'Alembert。这里的 W(z)W(z) 是那个势再加一行点涡。

起动涡和粘性那只看不见的手

矛盾还在。静止流体里没有涡量,任何闭曲线的环量都是0。Kelvin 环量定理 — 无粘、体积力保守时,沿物质曲线的环量不随时间变 — 说这个0会保持下去。

飞机的升力从哪来。

粘性。机翼刚一加速,无粘理论就要求后缘尖角上的速度无穷大。真实流体马上削掉那份动能,涡从后缘离开。逆时针。这是起动涡。

Kelvin 仍要求,把机翼和尾流一起圈住的大闭曲线,总环量为0。于是机翼周围留下同样大小的顺时针环量。束缚涡。也就是 Kutta–Joukowski 里的 Γ\Gamma。

打开 start motion,后缘掉下一个逆时针的涡;把迎角加大,这个涡和机翼上的顺时针环量以同样的大小一起长。

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.

两个环量之和仍是0。无粘理论读的,是粘性已经剥离过一次之后的状态。

代码:表面速度与升力系数

把同一条表面速度放进 NumPy。流函数、表面压力系数、升力系数。

import numpy as np
 
def cylinder_streamfunction(x, y, U_inf, gamma, R):
    """流函数 ψ = U sinθ (r - R²/r) + Γ/(2π) ln(r/R), 约定 Γ>0 为顺时针."""
    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):
    """表面 r=R 上的压力系数 Cp = 1 - (u/U∞)²."""
    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), 直径 d = 2R."""
    return gamma / (U_inf * R)
 
# 跑三组直接看(取 ρ = 1)
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}")

Γ=0\Gamma=0 时升力是0,上下压力系数对称。代码跑的三组环量是 00、πU∞R\pi U_\infty R、4πU∞R4\pi U_\infty R。取 U∞=10U_\infty=10、R=0.5R=0.5,把 θ=±π/2\theta=\pm\pi/2 代进表面公式,数就闭上了。

Γ/(2πR)\Gamma/(2\pi R) 依次是 00、U∞/2=5U_\infty/2=5、2U∞=202U_\infty=20。上表面速度是 −20-20、−25-25、−40-40。下表面是 2020、1515、00。Cp=1−(u/U∞)2C_p=1-(u/U_\infty)^2,所以上表面是 −3-3、−5.25-5.25、−15-15,下表面是 −3-3、−1.25-1.25、11。最后一档下表面速度为0、Cp=1C_p=1,就是底部驻点。

CL=Γ/(U∞R)C_L=\Gamma/(U_\infty R) 是 00、π\pi、4π4\pi。注释里的 2Γ/(U∞d)2\Gamma/(U_\infty d) 因为 d=2Rd=2R,是同一个式子。L′/ρ=U∞ΓL'/\rho=U_\infty\Gamma 是 00、50π50\pi、200π200\pi。这是 θ=±π/2\theta=\pm\pi/2 的解析值。代码按360个角度取样,打印出来的下标可能离这个角度差一格。没有用那个打印值去做表。

只用两个 CpC_p 去估力,会比积分升力偏大。临界环量处下表面 CpC_p 是1,上表面是 −15-15,差为16。乘上动压 12ρU∞2\tfrac{1}{2}\rho U_\infty^2,压差就是 8ρU∞28\rho U_\infty^2。把这个差原样铺在直径 2R2R 上,单位宽度的力会是 16ρU∞2R16\rho U_\infty^2 R。定理给出的是 L′=ρU∞ΓL'=\rho U_\infty\Gamma,而 Γ=4πU∞R\Gamma=4\pi U_\infty R,所以 L′=4πρU∞2RL'=4\pi\rho U_\infty^2 R。两点估计是积分的 4/π4/\pi 倍,大约1.27倍。因为绕一周时压力一直在两个极端之间变动。一个驻点的 CpC_p 闭不上升力。中间值 Γ=πU∞R\Gamma=\pi U_\infty R 也是同一个比。那时上表面 Cp=−5.25C_p=-5.25,下表面 −1.25-1.25,差是4。两点估计是 4ρU∞2R4\rho U_\infty^2 R,定理的升力是 πρU∞2R\pi\rho U_\infty^2 R,比又是 4/π4/\pi。只取上下两点而高估的比例,并不跟着环量的大小走。

缝线一旦定下环量,升力公式就不再是设计式

三种情形里圆柱没变。变的只有 Γ\Gamma,CLC_L 从0走到 4π4\pi。Kutta–Joukowski 抹掉外形,只留环量。环量怎么产生,在公式外面。

棒球的缝线决定分离,分离决定环量。如果定理在这里不再是设计式,真实的球到底往哪边弯?旋转球的马格努斯升力把这个问题重新放回球的表面。

如果对您有帮助,请分享。