부엌 싱크대에 매일 생기는 충격파 — Froude 수와 수력도약
개수로 유동의 비에너지, 임계수심, 그리고 천수-압축성 상사
수도꼭지를 틀어 평평한 싱크대 바닥에 물을 떨어뜨려 보라. 물이 닿는 지점 둘레로 얇고 빠른 물막이 퍼지다가, 어느 반경에서 갑자기 물이 두툼하게 솟구쳐 고리를 그린다. 이 고리가 **수력도약(hydraulic jump)**이다. 매일 부엌에서 벌어지는 이 현상은, 놀랍게도 초음속 노즐에서 태어나는 충격파와 같은 방정식을 따른다. 이 글은 개수로(open channel) 유동을 지배하는 Froude 수가 무엇인지, 왜 물의 깊이가 한순간에 뛰어오르는지, 그리고 얕은 물이 어떻게 압축성 기체를 흉내 내는지를 작은 파이썬 코드와 두 개의 시뮬레이션으로 만져본다. 끝까지 읽으면 싱크대의 고리와 라발 노즐의 충격파가 왜 사촌인지 알게 된다.
관을 채우지 않는 흐름#
개수로는 위가 대기에 열린 물길이다. 하천, 배수로, 관개수로가 모두 여기 속한다. 관 속을 꽉 채워 흐르는 물은 상·하류 압력차로 밀린다. 개수로의 물은 다르다. 바닥 경사와 중력이 흐름을 만든다.
수면이 자유롭게 오르내릴 수 있다는 점이 핵심이다. 이 자유표면 위로 파동이 퍼진다. 얕은 물에서 작은 표면파가 퍼지는 속도는 깊이만으로 정해진다.
여기서 는 천수파(shallow-water wave) 전파속도, 는 중력가속도, 는 수심이다. 물이 깊을수록 파동은 빠르다.
비에너지와 임계수심#
바닥을 기준으로 흐름이 가진 에너지를 수두(head, 길이 단위 에너지)로 나타낸 것이 **비에너지(specific energy)**다. 폭 가 일정한 직사각형 수로에서 단위폭 유량을 로 두면,
첫 항 는 위치에너지(수심), 둘째 항은 운동에너지다. 를 고정하고 를 의 함수로 그리면 흥미로운 곡선이 나온다. 수심이 너무 얕으면 유속이 커져 운동에너지가 폭증하고, 너무 깊으면 위치에너지가 커진다. 그 사이 어딘가에서 가 최소가 된다.
을 풀면 그 지점의 수심이 나온다.
이 가 **임계수심(critical depth)**이다. 이 지점에서 이고, 유속은 정확히 천수파 속도와 같아진다: .
아래 다이어그램에서 직접 조작해보자. 와 수심 를 바꾸며 곡선 위 어느 가지에 올라타는지 확인한다.
같은 에 두 개의 수심이 대응한다는 데 주목하자. 위 가지(깊고 느린 흐름)와 아래 가지(얕고 빠른 흐름)다. 임계수심 의 노즈를 지나면 두 세계가 갈린다.
Froude 수: 상류와 사류#
유속과 파동 속도의 비가 흐름의 성격을 결정한다. 이 무차원수가 **Froude 수(관성력/중력파 속도 비)**다.
이면 유속이 파동보다 느리다. 하류의 장애물이 만든 수면 변화가 상류로 거슬러 올라갈 수 있다. 이런 깊고 잔잔한 흐름을 **상류(常流, subcritical flow)**라 한다. 이면 유속이 파동을 앞지른다. 하류의 신호가 상류에 닿지 못한다. 이 얕고 빠른 흐름이 **사류(射流, supercritical flow)**다. 이 임계 상태이며, 이때 수심이 바로 다.
여기서 감이 오는가. Froude 수는 기체역학의 Mach 수(유속/음속 비)와 똑같은 역할을 한다. 음속이 정보를 나르는 압축성 기체처럼, 개수로에서는 천수파가 정보를 나른다. 사류는 초음속, 상류는 아음속이다.
수력도약: 물이 두꺼워지는 순간#
사류가 상류로 바뀌어야 할 때 문제가 생긴다. 비에너지 곡선상에서 아래 가지에서 위 가지로 매끄럽게 넘어갈 길이 없다. 자연은 불연속으로 해결한다. 얕고 빠른 물이 갑자기 두껍고 느린 물로 도약하는 것이다. 이것이 수력도약이다.
도약 전후를 잇는 관계는 에너지가 아니라 운동량 보존에서 나온다. 도약 안에서는 난류 소용돌이(roller)가 에너지를 사정없이 까먹기 때문이다. 운동량 플럭스와 정수압을 도약 양쪽에서 맞추면, 도약 전 수심 과 도약 후 수심 사이에 공역수심(conjugate depth) 관계가 성립한다.
은 도약 직전(사류)의 Froude 수다. 도약에서 잃는 비에너지는 다음처럼 깔끔하게 떨어진다.
이 손실이 바로 댐 여수로나 물놀이장 방류구에서 수력도약을 일부러 만드는 이유다. 빠른 물의 파괴적인 운동에너지를 난류로 흩어버려 하류 바닥의 침식을 막는다.
아래 시뮬레이션에서 상류측 을 바꿔보자. 얇은 사류가 도약을 지나 두꺼운 상류로 변하는 모습을 옆에서 본 그림이다.
을 1.5 근처로 낮추면 도약이 약해 수면이 완만하게 부푼다. 5 이상으로 올리면 이 6배를 넘고, 하얀 거품 롤러가 격렬해진다.
코드로 재현하기#
공역수심과 에너지 손실을 직접 계산해보자. 단위폭 유량 , 도약 전 수심 인 경우다.
import numpy as np
g = 9.81 # m/s^2
def froude(u, h):
"""Froude 수 = 유속 / 천수파 속도."""
return u / np.sqrt(g * h)
def critical_depth(q):
"""단위폭 유량 q에 대한 임계수심 (비에너지 최소)."""
return (q**2 / g) ** (1.0 / 3.0)
def specific_energy(h, q):
"""비에너지 E = h + q^2 / (2 g h^2)."""
return h + q**2 / (2.0 * g * h**2)
def conjugate_depth(h1, q):
"""도약 전 수심 h1(사류)에 대한 도약 후 수심 h2."""
u1 = q / h1
fr1 = froude(u1, h1)
return 0.5 * h1 * (np.sqrt(1.0 + 8.0 * fr1**2) - 1.0)
def jump_dissipation(h1, h2):
"""수력도약에서 잃는 비에너지 (난류 소산)."""
return (h2 - h1)**3 / (4.0 * h1 * h2)
q, h1 = 0.8, 0.2
u1 = q / h1
h2 = conjugate_depth(h1, q)
u2 = q / h2
print(f"상류(사류) u1={u1:.2f} m/s Fr1={froude(u1,h1):.2f}")
print(f"도약 후 h2={h2:.3f} m u2={u2:.2f} m/s Fr2={froude(u2,h2):.2f}")
print(f"임계수심 hc={critical_depth(q):.3f} m")
print(f"에너지 손실 dE={jump_dissipation(h1,h2):.3f} m")출력은 다음과 같다.
상류(사류) u1=4.00 m/s Fr1=2.86
도약 후 h2=0.714 m u2=1.12 m/s Fr2=0.42
임계수심 hc=0.403 m
에너지 손실 dE=0.238 m의 사류가 도약을 지나 의 상류로 바뀌었다. 수심은 3.6배 두꺼워지고 유속은 3.6배 느려진다(연속방정식 ). 그 대가로 비에너지 0.238 m가 난류로 흩어진다. 도약 후 수심 m가 임계수심 m보다 크다는 점이 상류임을 확인해준다.
얕은 물이 기체를 흉내 낼 때#
이제 이 글의 백미다. 폭이 일정한 얕은 수조를 흐르는 정상류의 연속방정식은 다. 단면이 일정한 관을 흐르는 압축성 기체의 정상류 연속방정식은 다. 수심 와 기체 밀도 가 정확히 대응한다.
천수 에너지식 를 미분해 을 얻고, 여기에 파동 속도 를 넣으면 천수파가 기체의 음파와 같은 자리를 차지함을 알 수 있다. 정리하면 다음 상사가 완성된다.
| 얕은 물 (천수) | 압축성 기체 |
|---|---|
| 수심 | 밀도 |
| 천수파 속도 | 음속 |
| Froude 수 | Mach 수 |
| 사류 / 상류 | 초음속 / 아음속 |
| 수력도약 | 충격파 |
이 상사는 인 가상 기체에 해당한다(, ). 그래서 예전 항공 연구자들은 값비싼 초음속 풍동 대신 "천저수조(shallow water table)"에 물체를 놓고 수면의 도약을 관찰해 충격파 패턴을 정성적으로 연구했다. 싱크대의 고리가 2차원 물체 앞의 활충격파(bow shock)를 닮은 이유가 여기 있다.
기억할 점#
- **Froude 수 **는 개수로의 Mach 수다. 은 상류(잔잔), 은 사류(급류), 은 임계.
- 수력도약은 사류가 상류로 바뀌는 불연속이다. 공역수심 은 에너지가 아니라 운동량 보존에서 나오며, 나머지 에너지는 난류로 소산된다.
- 천수-압축성 상사로 수심은 밀도, 천수파는 음파, 수력도약은 충격파에 대응한다. 부엌 싱크대의 물 고리는 매일 재현되는 충격파 실험이다.
도움이 됐다면 공유해주세요.