台所のシンクに毎日生まれる衝撃波 — フルード数と跳水
開水路流れの比エネルギー、限界水深、そして浅水-圧縮性の相似
蛇口をひねって、平らなシンクの底に水を落としてみてください。水が当たる点の周りに薄くて速い水の膜が広がり、ある半径で突然水が分厚く盛り上がってリングを描きます。このリングが**跳水(hydraulic jump)**です。毎日台所で起きるこの現象は、驚くことに超音速ノズルで生まれる衝撃波と同じ方程式に従います。この記事では、開水路(open channel)流れを支配するフルード数とは何か、なぜ水深が一瞬で跳ね上がるのか、そして浅い水がどのように圧縮性気体を真似るのかを、小さな Python コードと二つのシミュレーションで触れていきます。最後まで読めば、シンクのリングとラバルノズルの衝撃波がなぜ従兄弟なのかが分かります。
管を満たさない流れ#
開水路は上部が大気に開いた水路です。河川、排水路、灌漑用水路がすべてここに含まれます。管の中を満たして流れる水は、上流と下流の圧力差で押されます。開水路の水は違います。底の勾配と重力が流れを作ります。
自由表面が自由に上下できるという点が核心です。この自由表面の上を波が伝わります。浅い水で小さな表面波が伝わる速度は、水深だけで決まります。
ここで は浅水波(shallow-water wave)の伝播速度、 は重力加速度、 は水深です。水が深いほど波は速くなります。
比エネルギーと限界水深#
底を基準にした流れのエネルギーを水頭(head、長さ単位のエネルギー)で表したものが**比エネルギー(specific energy)**です。幅 が一定の矩形水路で、単位幅流量を と置くと、
第一項 は位置エネルギー(水深)、第二項は運動エネルギーです。 を固定して を の関数として描くと、興味深い曲線が現れます。水深が浅すぎると流速が大きくなって運動エネルギーが急増し、深すぎると位置エネルギーが大きくなります。その間のどこかで が最小になります。
を解くと、その点の水深が得られます。
この が**限界水深(critical depth)**です。この点では となり、流速はちょうど浅水波の速度と等しくなります: 。
下の図で実際に操作してみましょう。 と水深 を変えて、曲線のどの枝に乗るのかを確認します。
同じ に二つの水深が対応することに注目してください。上の枝(深くて遅い流れ)と下の枝(浅くて速い流れ)です。限界水深 の先端を過ぎると、二つの世界が分かれます。
フルード数:常流と射流#
流速と波の速度の比が流れの性格を決めます。この無次元数が**フルード数(慣性力/重力波速度の比)**です。
なら流速が波より遅いです。下流の障害物が作った水面の変化が上流へ遡ることができます。この深くて穏やかな流れを**常流(subcritical flow)と呼びます。 なら流速が波を追い越します。下流の信号が上流に届きません。この浅くて速い流れが射流(supercritical flow)**です。 が限界状態で、このとき水深がちょうど です。
もう分かってきたでしょう。フルード数は気体力学のマッハ数(流速/音速の比)とまったく同じ役割を果たします。音が情報を運ぶ圧縮性気体のように、開水路では浅水波が情報を運びます。射流は超音速、常流は亜音速です。
跳水:水が厚くなる瞬間#
射流が常流に変わらなければならないとき、問題が生じます。比エネルギー曲線上で下の枝から上の枝へ滑らかに移る道がありません。自然は不連続で解決します。浅くて速い水が突然厚くて遅い水へ跳ね上がるのです。これが跳水です。
跳水の前後を結ぶ関係は、エネルギーではなく運動量保存から出てきます。跳水の中では乱流の渦(ローラー)がエネルギーを容赦なく食い尽くすからです。運動量フラックスと静水圧を跳水の両側で合わせると、跳水前の水深 と跳水後の水深 の間に共役水深(conjugate depth)の関係が成り立ちます。
は跳水直前(射流)のフルード数です。跳水で失われる比エネルギーは次のようにきれいに求まります。
この損失こそが、ダムの余水吐や減勢工で跳水をわざと作る理由です。速い水の破壊的な運動エネルギーを乱流に散らし、下流の河床を浸食から守ります。
下のシミュレーションで上流側の を変えてみましょう。薄い射流が跳水を経て厚い常流に変わる様子を横から見た図です。
を 1.5 付近まで下げると跳水が弱まり、水面がなだらかに膨らみます。5 以上に上げると が 6 倍を超え、白い泡のローラーが激しくなります。
コードで再現する#
共役水深とエネルギー損失を直接計算してみましょう。単位幅流量 、跳水前の水深 の場合です。
import numpy as np
g = 9.81 # m/s^2
def froude(u, h):
"""フルード数 = 流速 / 浅水波速度。"""
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 倍厚くなり、流速は同じ倍率で遅くなります(連続の式 )。その代償として比エネルギー 0.238 m が乱流に散らばります。跳水後の水深 m が限界水深 m より大きいことが、常流であることを確認してくれます。
浅い水が気体を真似るとき#
ここがこの記事の白眉です。幅が一定の浅い水槽を流れる定常流の連続の式は です。断面が一定の管を流れる圧縮性気体の定常流の連続の式は です。水深 と気体密度 がぴったり対応します。
浅水エネルギー式 を微分して を得て、そこに波速 を入れると、浅水波が気体の音波と同じ席を占めることが分かります。まとめると次の相似が完成します。
| 浅い水(浅水) | 圧縮性気体 |
|---|---|
| 水深 | 密度 |
| 浅水波速度 | 音速 |
| フルード数 | マッハ数 |
| 射流 / 常流 | 超音速 / 亜音速 |
| 跳水 | 衝撃波 |
この相似は の仮想気体に相当します(、)。だから昔の航空研究者は、高価な超音速風洞の代わりに「浅水水槽(shallow water table)」に物体を置き、水面の跳水を観察して衝撃波パターンを定性的に研究しました。シンクのリングが二次元物体の前の弓形衝撃波(bow shock)に似ているのは、まさにこの理由からです。
覚えておくべき点#
- フルード数 は開水路のマッハ数です。 は常流(穏やか)、 は射流(急流)、 は限界。
- 跳水は射流が常流に変わる不連続です。共役水深 はエネルギーではなく運動量保存から出てきて、残りのエネルギーは乱流に散逸します。
- 浅水-圧縮性の相似では水深が密度、浅水波が音波、跳水が衝撃波に対応します。台所のシンクの水のリングは、毎日再現される衝撃波の実験です。
役に立ったらシェアしてください。