굴뚝 연기는 왜 곧장 눕지 않고 말려 올라가는가 — 횡단류 제트와 역회전 와류쌍
궤적의 자는 rd이고, 콩팥 단면을 들어 올리는 것은 분류구 근처에서 태어난 역회전 와류쌍이다.
겨울 아침 화력발전소 굴뚝은 꽤 정직해 보인다. 연기는 처음에 똑바로 오른다. 어느 높이에서 옆으로 꺾이고, 기둥을 자르면 도넛도 원도 아닌 콩팥 한 쌍이 박혀 있다. 옆바람을 가로지르는 제트(jet in crossflow, JICF)다. 궤적을 흔드는 손잡이는 Reynolds 수가 아니라 속도비 이다.
r을 2에서 10으로 올리면 제트가 꺾이기 전에 훨씬 높이 솟는다.
The natural length scale is r·d, not d alone. Raise r and the plume punches higher before the crossflow bends it; the three pink ghosts are the trajectories for r = 2, 6, 10.
분홍색 유령 곡선 세 개는 의 궤적이다. B를 바꾸면 속도비는 그대로 두고 굽는 모양새만 달라진다. 흰 중심선이 유령 셋 중 어디에 붙는지만 보면 된다.
굴뚝 연기는 왜 곧장 눕지 않고 말려 올라가는가#
옆바람 속으로 분사되는 제트는 우리 주변에 흔하다. 굴뚝 연기, 가스터빈 연소기의 연료 분사, 터빈 블레이드를 식히는 막냉각(film cooling), 강물이 바다로 쏟아지는 하구, 화산재 기둥, 수직이착륙기의 제트가 모두 같은 문제다.
두 운동량이 싸운다. 분류구 근처에서는 제트의 운동량이 세다. 그래서 거의 수직으로 솟는다. 위로 올라갈수록 옆바람이 제트를 계속 밀어붙인다. 어느 지점부터 옆바람이 이긴다. 기둥은 옆으로 꺾이고, 결국 옆바람 방향으로 눕는다.
그런데 그냥 눕기만 하는 게 아니다. 단면이 변형된다. 둥근 제트가 콩팥처럼 말린다. 그 말림 안에는 서로 반대로 도는 한 쌍의 소용돌이가 숨어 있다.
한 분류구에 네 개의 와류가 산다#
JICF의 와류는 한 종류가 아니다. Fric와 Roshko(1994)는 네 가지 서로 다른 와류계를 정리했다.
- 전단층 와류(jet shear-layer vortices): 분류구 바로 위, 제트 경계의 원통형 전단층이 말려 만드는 고리. 가장 먼저 생긴다. 그 말림은 속도가 어긋난 두 층과 같은 자리다.
- 역회전 와류쌍(counter-rotating vortex pair, CVP): 멀리 가서 단면을 지배하는 주인공. 콩팥/버섯 모양의 정체.
- 말굽 와류(horseshoe vortex): 벽에 박힌 제트 기둥 앞에서, 마치 벽에 세운 장애물처럼 경계층이 감겨 만드는 말굽.
- 후류 와류(wake vortices): 제트 뒤쪽에서 벽까지 이어지는 세로 와류. 단단한 실린더 뒤의 와열과 헷갈리지만, Fric와 Roshko는 이것이 제트가 아니라 벽 경계층의 박리에서 나온다는 것을 보였다.
이 네 개가 동시에 살아 있다는 점이 JICF를 단순한 실린더 후류와 결정적으로 다르게 만든다.
진짜 손잡이는 Reynolds가 아니다 — 속도비 r과 운동량 플럭스비 J#
제트가 얼마나 높이 뚫고 들어가는지를 정하는 것은 점성비, 즉 Reynolds 수가 아니다. 지배 변수는 속도비(velocity ratio)다.
여기서 는 분류구 출구 속도, 는 옆바람 속도다. 밀도가 다른 두 유체라면 더 적절한 척도는 운동량 플럭스비(momentum flux ratio)다.
여기서 는 각각 제트와 옆바람의 밀도다. 밀도가 같으면 이 된다. Reynolds 수는 전단층이 언제 난류로 천이하는지, 와류의 잔주름이 얼마나 잘게 부서지는지 같은 디테일을 정할 뿐, 큰 그림인 궤적과 침투 깊이는 (또는 )이 쥐고 있다.
궤적은 rd를 자로 삼는다#
수많은 실험이 한 결론으로 모인다. 제트 중심선의 평균 궤적은 거듭제곱 법칙을 따른다.
여기서 는 옆바람 방향 거리, 는 높이, 는 분류구 지름이다. 계수는 실험마다 , 지수는 범위에 모인다(Pratte–Baines 1967, Margason 1993). 결정적인 것은 자(尺)다. 길이를 하나가 아니라 ****로 재면 서로 다른 속도비의 궤적이 한 곡선으로 포개진다. 속도비가 크면 같은 에서 더 높이 올라간다.
아래 코드는 계수 A=1.6, 지수 B=0.33, d=1을 쓴다. x=10이면 자 rd는 r이다. r=2이면 x/(rd)=5, 5의 0.33제곱은 1.701 근처, 1.6 곱하기 2 곱하기 1.701은 5.44다. 출력 첫 줄과 같다. r=4이면 x/(rd)=2.5, 2.5의 0.33제곱은 1.353, 1.6 곱하기 4 곱하기 1.353은 8.66이다. r=8이면 x/(rd)=1.25, 1.25의 0.33제곱은 1.076, 1.6 곱하기 8 곱하기 1.076은 13.77이라 인쇄된 13.78과 반올림 끝자리에서 만난다.
r을 두 배로 해도 높이는 두 배가 아니다. 5.44에서 8.66으로, 다시 8.66에서 13.78로 간다. 비는 둘 다 1.59 근처다. 높이 z는 r의 (1−B)제곱에 비례한다. B=0.33이면 지수는 0.67이고, 2의 0.67제곱은 1.59다. 같은 x에서 속도비를 두 배 해도 침투는 59퍼센트만 는다. r을 2에서 8로 네 배 올리면 높이는 약 2.53배가 되어 5.44d가 13.78d가 된다. 같은 구간에서 J는 4에서 64로 열여섯 배다. 운동량 비를 궤적 높이와 같은 눈금으로 읽으면 안 된다.
역회전 와류쌍 — 버섯 단면은 어떻게 생기나#
CVP는 제트의 원통형 전단층이 옆바람에 기울고 접히면서 만들어진다. 제트의 양옆 전단층이 재배열되어, 단면에서 서로 반대로 도는 두 와류가 된다. 둘 사이에서 유체는 위로 솟고, 바깥으로 말려 내려온다. 그 결과가 콩팥/버섯 단면이다.
세기는 제트의 순환 에 비례한다. 즉 제트가 빠를수록 와류쌍이 강하다. 그리고 소스 문서가 말하듯, CVP는 분류구 출구 아주 가까이에서 생겨나고, 후류로 갈수록 와도(渦度)가 확산되며 약해진다.
숫자는 잠시 뒤 출력에 찍힌다. 중심은 올라가고 가장자리는 내려간다. 그 버섯을 출력 바로 아래에서 밀어 볼 수 있다.
실린더보다 게으른 박자 — JICF의 Strouhal 수#
후류 와류가 떨어지는 주파수 는 무차원 Strouhal 수로 정리된다.
여기서 는 와류 흘림 주파수, 는 분류구 지름이다. 단단한 원기둥 뒤에서는 넓은 Reynolds 범위에서 로 거의 일정하다. 그런데 Hester 등(1971)이 아음속 풍동에서 측정한 JICF의 후류는 같은 크기 실린더의 절반에도 못 미치는 Strouhal 수를 보였다.
원기둥 의 절반은 0.105다. Hester 등이 본 JICF는 그 아래에 있다. 측정값을 이 글에서 한 숫자로 다시 적지는 않는다. 0.21을 제트의 박자로 복사하면 주파수를 적어도 두 배로 빠르게 잡게 된다.
왜 게으른가. 실린더는 단단한 벽에서 깔끔하게 박리해 한 박자로 와류를 떨군다. JICF의 "장애물"은 단단한 벽이 아니라, 옆바람이 스며들 수 있는 휘청대는 유체 기둥이다. 게다가 후류 와류의 뿌리는 제트 자체가 아니라 벽 경계층이다. 유효 장애물이 물렁하니, 떨어지는 박자도 느려진다.
Python — 궤적과 CVP 유도장#
import numpy as np
def jet_trajectory(x, r, d=1.0, A=1.6, B=0.33):
"""횡단류 제트 평균 궤적: z/(rd) = A (x/(rd))^B, x>=0."""
rd = r * d
x = np.asarray(x, dtype=float)
return np.where(x > 0, A * rd * (x / rd) ** B, 0.0)
def cvp_velocity(y, z, gamma, b, zc=2.0, core=0.15):
"""역회전 와류쌍이 (y, z)에 유도하는 속도 (u_y, u_z).
왼쪽 +Γ(반시계), 오른쪽 -Γ(시계) → 가운데서 위로 솟는다."""
def one(y0, z0, g):
dy, dz = y - y0, z - z0
r2 = dy**2 + dz**2 + core**2
return -g / (2 * np.pi) * dz / r2, g / (2 * np.pi) * dy / r2
uy1, uz1 = one(-b / 2, zc, +gamma)
uy2, uz2 = one(+b / 2, zc, -gamma)
return uy1 + uy2, uz1 + uz2
if __name__ == "__main__":
# 1) 같은 분류구라도 속도비 r이 크면 더 높이 뚫는다
for r in (2, 4, 8):
print(f"r={r:>2}: z(x=10d) = {jet_trajectory(10.0, r):.2f} d")
# 2) 두 와류 사이 중심선은 위로, 바깥은 아래로 (mushroom)
_, uz_c = cvp_velocity(0.0, 2.0, gamma=3.0, b=1.5)
_, uz_e = cvp_velocity(1.5, 2.0, gamma=3.0, b=1.5)
print(f"center (y=0): u_z = {uz_c:+.3f} (>0 → 상승)")
print(f"edge (y=b): u_z = {uz_e:+.3f} (<0 → 하강)")실행하면 다음이 찍힌다.
r= 2: z(x=10d) = 5.44 d
r= 4: z(x=10d) = 8.66 d
r= 8: z(x=10d) = 13.78 d
center (y=0): u_z = +1.224 (>0 → 상승)
edge (y=b): u_z = -0.401 (<0 → 하강)Left vortex spins counter-clockwise (+Γ), right clockwise (−Γ): between them the dye is pumped upward and folds outward into the kidney-shaped mushroom. Push the downstream slider toward 1 and diffusion saps Γ — the mushroom stalls, just as the real CVP weakens far from the exit.
속도비가 두 배, 네 배가 될수록 같은 하류 거리에서 더 높이 뚫는다. 그리고 와류쌍 한가운데는 위로, 가장자리는 아래로 — 버섯이 자라는 셈을 숫자가 그대로 보여준다.
왼쪽 와류는 반시계(), 오른쪽은 시계()로 돈다. 가운데 염료가 위로 솟아 바깥으로 접히며 버섯이 자란다. downstream 슬라이더를 1쪽으로 밀면 확산이 를 갉아먹어 버섯이 멈춘다. 출력의 중심 상승이 줄어드는 자리다. 실제 CVP가 하류로 갈수록 약해지는 것과 같다.
중심은 y=0, z=2이고 간격 b=1.5라 두 핵은 y=±0.75에 있다. core=0.15라 거리 제곱에 0.0225가 더해진다. 왼쪽 핵까지 dy=0.75, dz=0이면 분모는 0.5625+0.0225=0.585다. Γ=3이면 Γ/(2π)는 0.477 근처다. 한 핵의 수직 속도는 0.477 곱하기 0.75 나누기 0.585, 약 0.612다. 맞은편 핵이 같은 크기를 같은 방향으로 보태 +1.224가 된다. 가장자리 y=1.5에서는 가까운 오른쪽 핵이 −0.612를 주고, 먼 왼쪽 핵이 +0.211을 보탠다. 합은 −0.401이다. 상승이 하강의 약 세 배인 이유는, 중심에선 두 핵이 더해지고 가장자리에선 가까운 핵이 먼 핵을 누르기 때문이다. 이 핵의 속도는 자유 와동의 유도 속도와 같은 뼈대다. 여기만 코어 0.15가 분모에 더해져 핵 한가운데에서 속도가 터지지 않는다.
손잡이를 다시 적으면 속도비 (또는 운동량 플럭스비 )이고, 포개 쓰는 자는 다.
원기둥의 0.21을 제트 박자로 베끼면#
St를 0.21로 고정한 채 분류구 지름과 옆바람만 넣어 주파수를 뽑으면, JICF 후류보다 적어도 두 배 빠른 박자가 나온다. 0.21의 절반인 0.105도 아직 위쪽 경계일 뿐이다. 장애물이 단단한 벽이 아니라는 말을 주파수 식에 넣지 않으면 박자가 이렇게 어긋난다.
궤적도 마찬가지다. d만으로 x를 재고 r을 빼면, r=2의 5.44d와 r=8의 13.78d가 한 곡선에 포개지지 않는다. 자를 로 바꿀지, 원기둥 Strouhal을 버릴지. 굴뚝 연기를 맞추기 전에 그 둘을 먼저 고른다.
관련
도움이 됐다면 공유해주세요.