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

야구공은 왜 휘는가 — 순환·Magnus·Kutta–Joukowski 정리

회전체가 양력을 받는 진짜 이유와 출발와동의 보이지 않는 역할

회전한 포탄이 휘어 가던 그날#

1853년, 베를린의 물리학자 Heinrich Magnus는 포병들이 오래전부터 알고 있던 한 가지 의문을 풍동에 들고 갔다. 회전축을 가진 포탄은 직진하지 않고 옆으로 휜다. 그는 자전축을 수직으로 세운 회전 실린더를 흐름 속에 매달았고, 회전축에 수직한 방향으로 일정한 측력이 잡혔다. 회전이 만든 양력이었다.

그런데 "왜?"가 남았다. 점성이 없는 이상유체에서는 표면이 미끄러지는데, 위쪽이 더 빨라지고 아래쪽이 더 느려질 까닭은 어디에 있는가. 답은 한 단어, **순환(circulation)**에 있다. 이 글은 순환의 정의에서 출발해, 회전 실린더가 위로 끌려가는 까닭을 보이고, Kutta–Joukowski 정리로 모든 2차원 양력체에 결론이 일반화되는 길을 따라간다. 마지막에는 비점성 이론이 끝내 답하지 못하는 한 가지 — 정지된 유체에서 어떻게 순환이 처음 "발생"하는가 — 를 출발와동(starting vortex)으로 풀어본다.

순환 — 폐곡선 위의 적분 한 줄#

순환 Γ\Gamma는 정의가 단순하다.

Γ=Cuds\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}는 와도(vorticity), dAd\mathbf{A}는 폐곡선이 둘러싼 면의 법선 미소 면적. 즉 순환은 그 폐곡선 안에 갇힌 와동의 총량이다.

흥미로운 사실 두 가지. 폐곡선 안에 와동이 한 점도 없어도 순환이 0이 아닐 수 있다. 자유와동(중심에 와도가 모인 점와동) 둘레의 큰 폐곡선이 그렇다. 또한 와도와 순환은 차원이 다르다. 와도는 [1/s], 순환은 [m²/s]. 면적이 곱해진 후의 양이다.

회전 실린더가 위로 끌려가는 까닭#

비점성·비회전·비압축 흐름에서 정상상태를 만드는 가장 깨끗한 방법은 기본 해를 중첩하는 것이다. 균일유동에 쌍극자(doublet)를 더하면 정지 실린더가 만들어진다. 여기에 점와동(point vortex)을 또 더하면 회전 실린더가 된다.

복소 포텐셜로 묶어 쓰면

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)에서는 상쇄되어 작아진다. 윗면이 빠르므로 Bernoulli 식

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|를 0에서 키워가면 노란 정체점이 아래로 내려간다. Γ>4πUR|\Gamma| > 4\pi U_\infty R이 되면 두 정체점이 한 점에서 만나 실린더 표면을 떠난다 — 이 임계 회전 위에서는 흐름의 위상이 완전히 바뀐다.

Kutta–Joukowski 정리 — L′ = ρU∞Γ#

표면 압력을 직접 적분한 결과는 깔끔하다. 비점성 정상유동에서 저항(drag)은 0이고, 단위 폭당 양력은

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

이 된다. 1894년 영국의 Lanchester가 가설로 제시했고, 20세기 초 독일의 Kutta와 러시아의 Joukowski가 독립적으로 수학적으로 증명한 정리다.

이 식이 강력한 이유는 두 가지. 첫째, 물체의 모양이 사라졌다. 임의의 2차원 단면체라도 둘레의 순환만 같으면 같은 양력을 받는다. 둘째, 양력은 회전 자체가 아니라 순환에 비례한다. 회전하지 않는 날개도 단면 모양과 받음각만 맞으면 둘레에 순환이 생겨 양력을 만든다.

출발와동, 그리고 점성의 보이지 않는 역할#

여기서 한 가지 모순이 생긴다. 정지된 유체에는 와도가 어디에도 없으니 어떤 폐곡선의 순환도 0이다. Kelvin의 순환정리 — 비점성·비외력 흐름에서 물질곡선을 따라간 순환은 시간에 대해 일정 — 은 그 0이 영원히 유지되어야 한다고 말한다.

그렇다면 비행기는 어떻게 양력을 받는가?

답은 점성이다. 날개가 처음 가속되는 순간, 후연(trailing edge)의 날카로운 모서리에서는 비점성 이론이 무한대 속도를 요구한다. 실제 유체에서는 점성이 그 운동에너지를 즉시 깎아내려, 후연에서 와동이 박리되어 떨어져 나간다 — 이를 **출발와동(starting vortex)**이라 부른다. 반시계 방향의 와동이다.

Kelvin 정리는 출발와동이 떨어진 뒤에도 충분히 큰 폐곡선의 총 순환은 0을 지켜야 한다고 요구한다. 그래서 날개 둘레에는 정확히 같은 크기의 시계방향 순환이 남는다. 이것이 **속박와동(bound vortex)**이고, Kutta–Joukowski 양력의 정체다.

아래 애니메이션에서 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이다 — 점성이 없는 듯 보이는 비행기 날개의 양력은, 한 번 박리된 뒤의 결과를 비점성 이론으로 다시 보고 있을 뿐이다.

코드: 표면 속도와 양력 계수#

Magnus 효과를 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}")

Γ\Gamma가 0일 때 양력은 정확히 0이고, 윗·아랫면 압력계수가 대칭이다. Γ\Gamma를 임계값 4πUR4\pi U_\infty R까지 키우면 정체점이 한 점에서 만나며 시각화의 빨간 점이 떠오른다.

핵심 3줄 요약#

  • 양력은 회전 자체가 아니라 순환에서 온다. 단위 폭당 L=ρUΓL' = \rho U_\infty \Gamma이 모든 2차원 양력체에 통한다.
  • 회전 실린더는 균일유동 + 쌍극자 + 점와동의 중첩으로 정확히 모형화된다. 윗면이 빠르고 아랫면이 느려, 베르누이가 위로 들어 올린다.
  • 점성이 없으면 양력도 없다. 후연에서 떨어지는 출발와동이 Kelvin 정리를 지키며, 같은 크기의 속박와동을 날개 주위에 남긴다 — 이것이 비행의 정체다.

도움이 됐다면 공유해주세요.