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

回転する球がなぜ曲がるのか — 循環・マグナス効果・クッタ–ジューコフスキーの定理

回転体が揚力を受ける本当の理由と、出発渦という見えない立役者

回転する砲弾がまっすぐ飛ばなかった日#

1853年、ベルリンの物理学者ハインリヒ・マグナスは、砲手たちが昔から抱いていた疑問を風洞へ持ち込みました。回転する砲弾は直進せず、横へとそれていきます。彼は鉛直軸まわりに回転する円柱を流れの中に吊るし、回転軸に垂直な方向に一定の側力を測定しました。回転が生み出した揚力です。

問題は「なぜ?」です。粘性のない理想流体では表面が滑るはずなのに、上面で速度が増し、下面で速度が減るのはどうしてでしょうか。答えはひと言、**循環(circulation)**です。本記事は循環の定義から出発し、回転円柱が上方へ引き上げられる仕組みを示し、クッタ–ジューコフスキーの定理によってこの結論があらゆる二次元揚力体へ一般化される道筋を追います。最後に、非粘性理論だけでは答えられない一点 — 静止した流体からどうして循環が「発生」するのか — を出発渦(starting vortex)で解き明かします。

循環 — 閉曲線を一周する積分#

循環 Γ\Gamma の定義は単純です。

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

閉曲線 CC に沿って速度の接線成分を一周分だけ積分した量です。u\mathbf{u} は速度ベクトル、dsd\mathbf{s} は曲線の微小接線。

ストークスの定理で面積分に書き直すと

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

となります。ω=×u\boldsymbol{\omega} = \nabla\times\mathbf{u} は渦度(vorticity)、dAd\mathbf{A} は閉曲線が囲む面の法線微小面積です。つまり循環とは、その閉曲線の中に閉じ込められた渦の総量にほかなりません。

注目すべき事実は二つあります。閉曲線の内部のどの点でも渦度がゼロでも、循環がゼロにならない場合があります。中心に渦度が集中する自由渦の周囲に大きな閉曲線を引いた場合がそうです。また、渦度と循環は単位が異なります。渦度は[1/s]、循環は[m²/s]。面積を掛け合わせた後の量です。

回転円柱が上方へ引き上げられる理由#

非粘性・非回転・非圧縮の流れで定常状態を作る一番きれいな方法は、基本解を重ね合わせることです。一様流に二重湧き出し(ダブレット)を加えると静止円柱になります。さらに点渦を中心に置けば回転円柱になります。

複素ポテンシャルで書くと

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

三つの項がそれぞれ一様流、ダブレット、点渦(時計回りを正の Γ\Gamma とします)に対応します。表面 r=Rr = R 上の接線速度は

uθ(R,θ)=2UsinθΓ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)では打ち消し合って小さくなります。上面が速いので、ベルヌーイの式

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

から上面の圧力が低くなり、表面に沿って圧力差を積分すると上向きの力が残ります。

下のシミュレーションで直接動かしてみてください。

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| をゼロから大きくしていくと、黄色の停滞点(stagnation point)が下方へずれていきます。Γ>4πUR|\Gamma| > 4\pi U_\infty R になると二つの停滞点が一点で合流して円柱表面から離れます — この臨界回転を超えると流れの位相が完全に入れ替わります。

クッタ–ジューコフスキーの定理 — L′ = ρU∞Γ#

表面圧力をそのまま積分した結果はとてもきれいです。非粘性定常流では抗力がちょうどゼロになり、単位スパンあたりの揚力は

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

になります。1894年にイギリスのランチェスターが仮説として提示し、20世紀初頭にドイツのクッタとロシアのジューコフスキーが独立に数学的な定理として証明しました。

この式が強力な理由は二つあります。第一に、物体の形が消えています。任意の二次元断面体でも、その周りの循環さえ等しければ同じ揚力を受けます。第二に、揚力は回転そのものではなく循環に比例します。回転していない翼でも、断面形状と迎え角がそろえば翼周りに循環が生まれ、揚力が発生します。

出発渦と粘性の見えない役割#

ここで一つ矛盾が現れます。静止した流体には渦度がどこにもないので、どの閉曲線も循環はゼロです。ケルビンの循環定理 — 非粘性で外力が保存的な流れにおいて、物質曲線に沿った循環は時間的に一定 — は、そのゼロが永遠に保たれるはずだと主張します。

それでは飛行機はどうやって揚力を得ているのでしょうか。

答えは粘性です。翼が静止状態から動き出した瞬間、後縁(trailing edge)の鋭い角では非粘性理論が無限大の速度を要求します。実際の流体ではその運動エネルギーを粘性が即座に削り取り、後縁から渦が剥離して流出します — これを**出発渦(starting vortex)**と呼びます。反時計回りの渦です。

ケルビンの定理は、出発渦が流出した後でも、翼と後流をすべて囲む十分大きな閉曲線の総循環がゼロでなければならないと要求します。そのため翼の周囲には等しい大きさの時計回り循環が残されます。これが**束縛渦(bound vortex)**であり、クッタ–ジューコフスキー揚力の正体です。

下のアニメーションで 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.

迎え角を大きくすると時計回りの束縛渦が成長し、同じ大きさの反時計回り出発渦が後縁から流出します。二つの循環の和は常にゼロです。粘性がないように見える翼の揚力は、一度剥離が起きた後の状態を非粘性理論で読み直しているにすぎないのです。

コード: 表面速度と揚力係数#

マグナス効果を NumPy で1ページに詰めます。流れ関数、表面圧力係数、揚力係数を一気に確認します。

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 では揚力は厳密にゼロで、上下の Cp が対称になります。Γ\Gamma を臨界値 4πUR4\pi U_\infty R まで上げると停滞点が一点で出会い、可視化の赤点として浮かび上がります。

覚えておきたい三行#

  • 揚力は回転そのものではなく循環から生まれます。単位スパンあたり L=ρUΓL' = \rho U_\infty \Gamma はあらゆる二次元揚力体に通用する関係です。
  • 回転円柱は一様流 + ダブレット + 点渦の重ね合わせで厳密にモデル化できます。上面が速くなり下面が遅くなるので、ベルヌーイが上方へ持ち上げます。
  • 粘性がなければ揚力もありません。後縁から離脱する出発渦がケルビンの定理を守りつつ、同じ大きさの束縛渦を翼周りに残す — それこそが飛行を支える正体です。

役に立ったらシェアしてください。