Skip to content
cfd-lab:~/ko/posts/2026-04-28-rankine-vorte…● online
NOTE #025DAY TUE 유체역학DATE 2026.04.28UPDATED 2026.10.19READ 5 min read#Vortex#Vorticity#Fluid-Dynamics#Flow-Phenomena#Helmholtz

회오리의 두 얼굴 — 자유와동·강제와동, 그리고 헬름홀츠

잎이 마개를 향해 같은 면을 지키면 그 구역은 공전만 한다. 노란 코어만 2ω로 자전한다.

욕조 마개를 뽑으면 물이 빙글빙글 돈다. 우리는 그 광경을 "물이 회전한다"고 부른다. 유체역학자는 그 영역 대부분에 대해 "거기서는 회전이 일어나지 않는다(irrotational)"라고 답한다. 모순처럼 들리는 이 진술에 와동(vortex)의 정체가 숨어 있다. 같은 그림 안에 자유와동(free vortex, 1/r1/r 속도)과 강제와동(forced vortex, ωr\omega r 속도)이 같이 산다. 와도(vorticity, 자전 각속도의 두 배)가 재는 것이 그 둘의 차다. 헬름홀츠(Helmholtz) 정리는 그 와동이 왜 쉽게 죽지 않는지까지 밀어붙인다.

욕조 회오리는 정말 '회전'인가#

회전이란 말에 두 층이 겹친다. 하나는 공전이다. 어떤 점을 중심으로 원을 그린다. 다른 하나는 자전이다. 입자 자신이 돈다.

욕조 회오리에서 물 입자는 공전한다. 자전은 마개에서 멀리 떨어진 영역에서 거의 없다. 떠 있는 작은 나뭇잎은 원을 따라가지만 몸을 돌리지는 않는다. 항상 같은 면이 마개를 향한다.

유체역학에서 "회전"은 자전을 뜻한다. 그래서 자유와동은 중심 특이점을 빼고 전 영역이 "회전 없음"이다.

코어 반지름 RR을 줄이면 노란 자전 영역이 좁아지고, Umax⁡U_{\max}를 올리면 코어 와도 2Umax⁡/R2U_{\max}/R가 커진다.

Yellow tracers sit inside the forced-vortex core and rotate as a solid body (ω = 2U/R). Blue tracers outside follow u_θ = ΓR/r — circular streamlines but zero local spin. The Rankine combined vortex is the simplest model for a bath-tub drain or tornado.

노란 입자는 제자리에서 돈다. 파란 입자는 마개 쪽 면을 유지한 채 공전만 하고, 오른쪽 위 곡선은 r≤Rr \le R에서 직선, 밖에서는 1/r1/r이다.

강제와동과 자유와동: 같은 그림, 다른 영혼#

회전 원통에 든 물을 오래 저으면 액체 전체가 강체처럼 함께 돈다. 이를 강제와동이라 부른다. 입자는 공전하면서 동시에 자전한다.

uθ(r)=ω ru_\theta(r) = \omega \, r

여기서 uθu_\theta는 접선 속도, ω\omega는 강체 회전의 각속도, rr은 중심으로부터의 거리다. 속도가 거리에 비례한다.

반대로 점성을 무시한 이상 유체에서 자연스럽게 만들어지는 회오리는 자유와동(=포텐셜와동)이다.

uθ(r)=Γ2πru_\theta(r) = \frac{\Gamma}{2\pi r}

Γ\Gamma는 순환(circulation, 닫힌 경로를 따라 적분한 속도). 속도가 1/r1/r로 감소한다. 중심에서는 무한대로 발산한다. 이 특이점을 점성이 길들인다.

강제와동자유와동
속도ωr\omega rΓ/2πr\Gamma / 2\pi r
자전있음없음
에너지 공급외부에서 계속처음 한 번만
일상 예회전 컵의 물욕조·토네이도

같은 원운동인데 자전 여부가 다르다. 이 차이를 정량화하는 단 하나의 양이 와도다.

와도가 측정하는 것#

와도 ω\boldsymbol{\omega}는 속도장의 회전(curl)이다.

ω=∇×u\boldsymbol{\omega} = \nabla \times \mathbf{u}

2차원에서는 zz 성분만 살아남아

ωz=∂v∂x−∂u∂y\omega_z = \frac{\partial v}{\partial x} - \frac{\partial u}{\partial y}

가 된다. u,vu, v는 각각 x,yx, y 방향 속도. 이 값은 유체 입자 자전 각속도의 두 배다.

강제와동에 대입하면 ωz=2ω\omega_z = 2\omega로 일정하다. 영역 전체가 자전한다. 자유와동에 대입하면 중심 한 점을 빼고 어디서나 ωz=0\omega_z = 0이다. 모양은 똑같이 둥근 흐름인데, 자전 정도는 정반대다.

랭킨 조합와동 — 토네이도의 청사진#

현실의 회오리는 한쪽만 따르지 않는다. 중심 부근에서는 점성이 강해 강체처럼 돌고, 멀리서는 점성이 무시되어 자유와동을 따른다. 이 둘을 이은 모형이 랭킨 조합와동이다.

uθ(r)={Umax⁡R r,r≤RUmax⁡ Rr,r>Ru_\theta(r) = \begin{cases} \dfrac{U_{\max}}{R}\, r, & r \le R \\[6pt] \dfrac{U_{\max}\, R}{r}, & r > R \end{cases}

RR은 코어 반지름, Umax⁡U_{\max}는 코어 경계에서의 최대 접선 속도. 두 식은 r=Rr = R에서 매끈하게 이어진다. 토네이도의 풍속 분포, 비행기 날개 끝에서 떨어지는 wing-tip 와동, 욕조 흡입 와동이 모두 이 형태에 가깝다. 코어 안은 회전 영역, 코어 밖은 비회전 영역이다.

코드에 적힌 기본값을 식에 그대로 넣는다. Umax⁡=1U_{\max} = 1, R=0.5R = 0.5다. 경계 r=Rr = R에서 안쪽 식과 바깥 식은 둘 다 uθ=1u_\theta = 1을 준다. r=0.25r = 0.25면 안쪽은 Umax⁡r/R=0.5U_{\max} r / R = 0.5다. r=1r = 1이면 바깥은 Umax⁡R/r=0.5U_{\max} R / r = 0.5다. 중심에서 같은 거리인데 속도 숫자만 같고, 기울기는 반대다.

바깥 루프의 순환은 반지름이 커져도 그대로다. r>Rr > R에서 uθ=Umax⁡R/ru_\theta = U_{\max} R / r이므로 Γ=2πruθ=2πRUmax⁡\Gamma = 2\pi r u_\theta = 2\pi R U_{\max}다. 숫자를 넣으면 2π×0.5×1=π2\pi \times 0.5 \times 1 = \pi다. 코어 와도 ωz=2Umax⁡/R=4\omega_z = 2 U_{\max}/R = 4다. 코어 면적 πR2=π/4\pi R^2 = \pi/4에 이 와도를 곱하면 4×π/4=π4 \times \pi/4 = \pi다. 면적 적분과 둘레 적분이 같은 순환으로 닫힌다. 이 Γ\Gamma가 양력으로 바뀌는 경로는 회전하는 공에 이어진다.

헬름홀츠 정리 — 와동의 불멸#

점성을 무시하면 유체 입자에 작용하는 힘은 압력뿐이고, 압력은 입자 중심을 향하므로 자전을 만들지 못한다. 그래서 자전이 없는 입자는 영원히 자전하지 않고, 자전을 시작한 입자는 영원히 자전한다. 이것이 헬름홀츠 와동 정리의 한 줄 요약이다.

좀 더 정밀하게는 켈빈(Kelvin) 정리가 있다. 닫힌 물질 곡선을 따라 잰 순환 Γ\Gamma는 시간이 흘러도 변하지 않는다.

DΓDt=0\frac{D\Gamma}{Dt} = 0

D/DtD/Dt는 물질 미분(입자를 따라가는 미분). 와동 튜브는 자르거나 끊을 수 없고, 늘어나면 더 빠르게 돈다. 피겨 스케이터가 팔을 모으는 것과 같다. 실제 유체에는 점성이 있어 와동은 결국 흩어지지만, 점성이 작은 물·공기에서는 며칠씩 살아남는다. 비행기가 지나간 자리의 응결 와동이 한참 동안 보이는 이유다.

속도 포텐셜이 여는 수학의 문#

비회전(ω=0\boldsymbol{\omega} = 0) 영역에서는 벡터 항등식이 한 줄 선물을 준다.

∇×u=0⟹u=∇ϕ\nabla \times \mathbf{u} = 0 \quad \Longrightarrow \quad \mathbf{u} = \nabla \phi

스칼라 함수 ϕ\phi를 속도 포텐셜이라 부른다. 비압축 흐름이라면 ∇⋅u=0\nabla \cdot \mathbf{u} = 0도 성립하므로

∇2ϕ=0\nabla^2 \phi = 0

라플라스 방정식이다. 비점성·비회전·비압축 흐름은 단 하나의 스칼라 함수로 풀린다. 19세기 유체역학이 익체 분포·날개 양력·소스/싱크 모형을 분석적으로 다룰 수 있었던 비결이 이것이다. 자유와동은 ϕ=(Γ/2π) θ\phi = (\Gamma / 2\pi)\, \theta로 표현된다. 각도 θ\theta에 비례한 포텐셜이다.

코드로 보는 두 와동#

랭킨 와동의 속도와 와도를 그려보면 차이가 한눈에 들어온다.

import numpy as np
 
def rankine_speed(r, R_core, U_max):
    """Tangential speed of a Rankine combined vortex."""
    speed = np.where(r <= R_core,
                     U_max * r / R_core,
                     U_max * R_core / np.maximum(r, 1e-9))
    return speed
 
def vorticity_field(u, v, dx, dy):
    """Discrete curl in 2D: omega_z = dv/dx - du/dy."""
    dvdx = (v[1:-1, 2:] - v[1:-1, :-2]) / (2 * dx)
    dudy = (u[2:, 1:-1] - u[:-2, 1:-1]) / (2 * dy)
    return dvdx - dudy
 
# Sample on a 200x200 grid
N, L = 200, 2.0
x = np.linspace(-L, L, N)
y = np.linspace(-L, L, N)
X, Y = np.meshgrid(x, y)
R = np.hypot(X, Y)
THETA = np.arctan2(Y, X)
 
U_max, R_core = 1.0, 0.5
u_theta = rankine_speed(R, R_core, U_max)
u =  -u_theta * np.sin(THETA)
v =   u_theta * np.cos(THETA)
 
dx = dy = x[1] - x[0]
omega = vorticity_field(u, v, dx, dy)
 
# 코어 안 평균 와도와 코어 밖 평균 와도
mask_in  = R[1:-1, 1:-1] <  R_core
mask_out = R[1:-1, 1:-1] >  1.5 * R_core
print(f"코어 안 평균 ω_z ≈ {omega[mask_in].mean():.3f}")   # ~ 2 * U_max / R_core
print(f"코어 밖 평균 ω_z ≈ {omega[mask_out].mean():.3f}")  # ~ 0

코어 안에서는 ωz≈2Umax⁡/R\omega_z \approx 2 U_{\max}/R 로 상수에 가깝고, 코어 밖에서는 0에 가깝다. 같은 둥근 흐름인데 자전을 가르는 경계가 코어 반지름 RR에 정확히 그려진다.

격자도 같은 숫자에서 읽힌다. N=200N = 200, L=2L = 2라 영역은 −2-2에서 22까지고, 간격은 4/1994/199다. 코어 반지름 0.50.5는 중심에서 약 스물다섯 칸이다. 바깥 마스크는 1.5R=0.751.5 R = 0.75에서 연다. RR과 0.750.75 사이는 평균에서 뺀다. 중심 차분 스텐실이 경계를 걸치면 ωz\omega_z가 44도 00도 아닌 값이 나오기 때문이다. 주석의 기대값은 코어 안 44, 밖은 00이다.

코어 반지름을 남길 자리#

코어를 너무 작게 자르면 2Umax⁡/R2U_{\max}/R가 격자를 넘는다. Umax⁡=1U_{\max} = 1, R=0.5R = 0.5에서 와도는 44다. RR을 반으로 줄이면 같은 식이 88을 준다. 경계에 걸친 중심 차분은 그 평균을 44도 88도 아닌 값으로 더럽힌다. 바깥 마스크를 1.5R1.5R에서 여는 이유다.

코어를 영역 끝까지 밀면 1/r1/r 꼬리가 사라진다. 순환 Γ=2πRUmax⁡\Gamma = 2\pi R U_{\max}는 남아도, 잎이 같은 면을 유지하는 무회전 구간이 없다. 그 꼬리에서 베르누이 상수가 유선을 가로질러 일정한지는 총압이 떨어진 계산이 따로 다룬다.

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