야구공은 왜 휘는가 — 순환·Magnus·Kutta–Joukowski 정리
양력 식은 순환만 남기고 모양을 지우지만, 그 순환을 정하는 것은 점성이다.
회전한 포탄이 휘어 가던 그날#
1853년 베를린. Heinrich Magnus는 포병들이 이미 알던 질문을 풍동에 올렸다. 회전하는 포탄은 곧게 가지 않고 옆으로 샌다. 축을 세운 실린더는, 축에 수직인 방향으로 일정한 측력을 냈다.
점성이 없는 유체에서 표면은 미끄러진다. 그런데도 위가 빠르고 아래가 느리다. 그 차이를 만드는 양이 순환 다.
슬라이더를 0에서 올리면 노란 정체점이 아래로 내려가고, 을 넘으면 그 점이 표면에서 떨어진다.
정체점이 바닥에 모이는 자리가 임계 회전이다. 그 위에서는 유선이 실린더를 한 바퀴 감싼 채 아래로 빠지지 않는다.
같은 순환이 날개에도 붙는다. 붙는 과정은 비점성 이론 혼자서는 시작을 못 한다. 그건 뒤에서 출발와동으로 닫는다.
순환 — 폐곡선 위의 적분 한 줄#
순환 의 정의는 한 줄이다.
폐곡선 위에서 속도의 접선 성분을 한 바퀴 적분한 양. 는 속도, 는 미소 접선이다.
Stokes로 면적분에 옮기면
는 와도, 는 폐곡선이 감싼 면의 법선 미소 면적. 순환은 그 안에 갇힌 와도의 총량이다.
폐곡선 안에 와도가 한 점도 없어도 순환은 0이 아닐 수 있다. 중심에 와도가 모인 점와동 둘레의 큰 고리가 그렇다. 단위도 다르다. 와도는 [1/s], 순환은 [m²/s]. 면적이 곱해진 뒤의 양이다.
회전 실린더가 위로 끌려가는 까닭#
비점성, 비회전, 비압축에서 정상해를 만드는 깨끗한 길은 기본 해의 중첩이다. 균일유동에 쌍극자를 더하면 정지 실린더가 된다. 중심에 점와동을 더하면 회전 실린더가 된다.
복소 포텐셜로 묶으면
세 항이 균일유동, 쌍극자, 점와동이다. 의 양수는 시계 방향. 표면 의 접선 속도는
윗면 에서는 두 항이 같은 부호로 더해져 가 커진다. 아랫면 에서는 상쇄된다. 위가 빠르면 Bernoulli
로 윗면 압력이 낮다. 둘레를 따라 압력 차를 적분하면 위쪽 힘이 남는다.
정체점은 이다. . 임계 순환 에서 이라 해는 하나, 바닥뿐이다. 앞 그림의 노란 점이 거기에 모인다.
Kutta–Joukowski 정리 — L′ = ρU∞Γ#
표면 압력을 적분하면 결과가 짧다. 비점성 정상류에서 저항은 0이고, 단위 폭 양력은
1894년 Lanchester가 가설로 냈고, 20세기 초 Kutta와 Joukowski가 따로 증명했다.
모양이 식에서 빠진다. 2차원 단면이 무엇이든 둘레의 순환만 같으면 양력이 같다. 양력은 회전 각속도가 아니라 순환에 비례한다. 돌지 않는 날개도 단면과 받음각이 맞으면 둘레에 순환이 생기고, 그 순환이 양력을 만든다.
저항이 0으로 떨어지는 자리는 순환이 없을 때의 원기둥과 같다. 균일유동에 쌍극자를 더한 복소 포텐셜이 그 저항 0을 d'Alembert로 남긴다. 여기 는 그 포텐셜에 점와동 한 줄을 더한 것이다.
출발와동, 그리고 점성의 보이지 않는 역할#
모순이 남는다. 정지한 유체에는 와도가 없고, 어떤 폐곡선의 순환도 0이다. Kelvin의 순환정리 — 비점성, 외력이 보존적인 흐름에서 물질곡선을 따라간 순환은 시간에 대해 일정 — 는 그 0이 유지된다고 말한다.
비행기는 어떻게 양력을 받는가.
점성이다. 날개가 막 가속될 때, 비점성 이론은 후연의 뾰족한 모서리에서 무한대 속도를 요구한다. 실제 유체는 그 운동에너지를 바로 깎고, 후연에서 와동이 떨어져 나간다. 반시계 방향의 출발와동이다.
Kelvin은 날개와 후류를 함께 품은 큰 폐곡선의 총순환이 0이기를 요구한다. 그래서 날개 둘레에는 같은 크기의 시계 방향 순환이 남는다. 속박와동이고, Kutta–Joukowski의 다.
start motion을 켜면 후연에서 반시계 와동이 떨어지고, 받음각을 올리면 그 와동과 날개의 시계 순환이 같은 크기로 커진다.
두 순환의 합은 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이고 위·아래 압력계수는 대칭이다. 코드가 도는 세 순환은 , , 이다. , 로 표면 공식에 를 넣으면 수가 닫힌다.
은 차례로 , , 이다. 윗면 속도는 , , . 아랫면은 , , . 이므로 윗면은 , , , 아랫면은 , , 이다. 마지막 칸의 아랫면 속도 0과 이 바닥 정체점이다.
은 , , 다. 주석의 는 이라 같은 식이다. 는 , , 다. 이건 의 해석값이다. 코드가 360개 각도로 집는 인덱스는 그 각도에서 한 칸 어긋날 수 있어, 그 인쇄값을 표로 만들지 않았다.
두 점의 만으로 힘을 어림하면 적분 양력보다 커진다. 임계 순환에서 아랫면 는 1, 윗면은 , 차이는 16이다. 동압 에 그 16을 곱하면 압력차는 이다. 이 차를 지름 에 그대로 얹으면 단위 폭 힘은 이다. 정리가 주는 값은 이고, 이라 이다. 두 점 어림은 적분의 배, 약 1.27배다. 둘레를 도는 동안 압력이 두 극단 사이를 계속 바뀌기 때문이다. 정체점 하나의 로는 양력이 닫히지 않는다. 중간값 도 같은 비다. 그때 윗면 , 아랫면 , 차이는 4다. 두 점 어림은 , 정리의 양력은 이라 비는 다시 다. 위와 아래만 집어 과대평가하는 비율은 순환의 크기에 기대지 않는다.
봉제선이 순환을 정하면 양력 식은 설계식이 아니다#
세 경우 모두 실린더는 그대로다. 바뀐 것은 뿐이고, 은 0에서 까지 간다. Kutta–Joukowski는 모양을 지우고 순환만 남긴다. 순환을 어떻게 만들지는 식 밖에 있다.
야구공의 봉제선은 박리를 정하고, 박리가 순환을 정한다. 정리가 설계식에서 멈추는 자리가 거기라면, 실제 공은 어느 쪽으로 휘는가. 회전하는 공의 마그누스가 그 질문을 공의 표면에서 다시 연다.
관련
도움이 됐다면 공유해주세요.