本文译自作者的韩语原文。 阅读原文(한국어)
厨房水槽里每天都有的激波 — 弗劳德数与水跃
水跃高度只由动量配平。若用比能守恒去求下游水深,就对不上输出里的0.714 m。
打开水龙头,让水落到平坦的水槽底部。水冲击点周围铺开一层薄而快的水膜,然后在某个半径处水突然堆起,形成一圈厚厚的环。这个环就是水跃(hydraulic jump)。厨房里每天发生的这个现象,令人惊讶的是竟遵循与超声速喷管中诞生的激波相同的方程。本文用一段小小的 Python 代码和两个仿真,讲清楚支配明渠(open channel)流动的弗劳德数是什么、为什么水深会在瞬间跃升、以及浅水如何模仿可压缩气体。读到最后,你会明白水槽里的环与拉瓦尔喷管中的激波为何是表亲。
拨动 和水深 的滑条,同一条比能曲线上所骑的那一支会换边。
同一个 对应两个水深:上支(深而慢的流动)和下支(浅而快的流动)。越过临界水深 的鼻尖,两个世界就分开了。
不填满管道的流动
明渠是顶部向大气敞开的水道。河流、排水沟、灌溉渠都属于这一类。充满封闭管道流动的水,靠进出口的压差被推动。明渠里的水不同。渠底坡度和重力驱动流动。
关键在于自由表面可以自由起伏。波沿着这个自由表面传播。在浅水中,小的表面波传播速度只由水深决定。
其中 是浅水波(shallow-water wave)的传播速度, 是重力加速度, 是水深。水越深,波越快。
比能与临界水深
以渠底为基准、把流动所具有的能量用水头(head,长度单位的能量)表示出来,就是比能(specific energy)。在宽度 恒定的矩形渠道中,把单位宽度流量记为 ,则
第一项 是位能(水深),第二项是动能。固定 而把 画成 的函数,会出现一条有趣的曲线。水深太浅则流速变大、动能剧增;太深则位能变大。在两者之间的某处, 取得最小值。
求解 就得到该点的水深。
这个 就是临界水深(critical depth)。在此点 ,而流速恰好等于波速:。
弗劳德数:缓流与急流
流速与波速之比决定流动的性格。这个无量纲数就是弗劳德数(惯性力与重力波速度之比)。
当 时,流速比波慢。下游障碍物造成的水面变化能够逆流而上传回上游。这种深而平缓的流动称为缓流(subcritical flow)。当 时,流速超过波速。下游的信号到不了上游。这种浅而快的流动是急流(supercritical flow)。 是临界状态,此时水深恰为 。
你大概已经有感觉了。弗劳德数扮演着与气体动力学中马赫数(流速与声速之比)完全相同的角色。就像声音在可压缩气体中传递信息一样,在明渠中浅水波传递信息。急流对应超声速,缓流对应亚声速。喷管里那种反转长什么样,写在要变快就得先变宽的超声速里,篇幅更短。
水跃:水变厚的瞬间
当急流必须变为缓流时,麻烦出现了。在比能曲线上,从下支平滑地过渡到上支没有路可走。自然用一个不连续来解决:浅而快的水突然跃升为厚而慢的水。这就是水跃。
联系水跃前后的关系,不来自能量,而来自动量守恒,因为水跃内部的湍流滚轴(roller)会毫不留情地吞噬能量。在水跃两侧配平动量通量和静水压力,就在跃前水深 与跃后水深 之间得到共轭水深(conjugate depth)关系。
是水跃之前(急流)的弗劳德数。水跃中损失的比能可以干净地求出。
这个损失正是工程师在大坝溢洪道和消力池中故意制造水跃的原因。他们把快水破坏性的动能散入湍流,保护下游河床免受冲刷。
用代码再现
我们直接计算共轭水深和能量损失。取单位宽度流量 ,跃前水深 。
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把上游 滑条往上推,侧面看到的水层变厚,滚轴也变凶。
把 降到 1.5 附近,水跃减弱,水面平缓地隆起。升到 5 以上, 超过 6 倍,白色泡沫滚轴变得剧烈。
的急流经过水跃变成了 的缓流。水深变厚 3.6 倍,流速以同样的倍率变慢(连续方程 )。代价是 0.238 m 的比能散入湍流。跃后水深 m 大于临界水深 m,这证实了流动现在是缓流。
把输出的数字再读成比能,水跃的账就对上了。上游流速 4.00 m/s 就是流量 0.8 除以水深 0.2。波速是 g 与 h 乘积的平方根。9.81 乘 0.2 得 1.962,平方根约 1.40 m/s。4.00 除以 1.40,就是印出来的 Fr 2.86。表面波因此上不了游。比能是水深加上流速平方除以 2g。上游是 0.2 加上 16 除以 19.62 的 0.816,合计约 1.016 m。下游是 0.714 加上 1.12 的平方除以 19.62 的 0.064,合计约 0.778 m。差是 0.238 m,和输出的能量损失相同。上游比能大约四分之一漏进滚轴。临界水深 0.403 m 夹在 0.2 和 0.714 之间。水跃横过比能曲线的鼻尖,换了一支。最小比能是临界水深的 1.5 倍,约 0.605 m,所以下游 0.778 m 仍在鼻尖上方。能量并没有被吃到最低点。
共轭水深公式里把 Fr 取成 1,1 加 8 的平方根是 3。减去 1 再除以 2,比值是 1。没有水跃的临界。输出的 Fr 2.86 给出的比值约 3.57,乘上 0.2 m 就是 0.714 m。图里说的 Fr 5,是 1 加 8 乘 25 等于 201,平方根约 14.2,取半再减 1,大约 6.6 倍。和“超过 6 倍”是同一个式子。
当浅水冒充气体
这里是本文的精华。宽度恒定的浅水槽中定常流的连续方程是 。截面恒定的管道中可压缩气体定常流的连续方程是 。水深 与气体密度 精确对应。
对浅水能量方程 求微分得到 ,代入波速 ,就会发现浅水波占据着与气体中声波相同的位置。汇总起来就得到下面的相似。
| 浅水 | 可压缩气体 |
|---|---|
| 水深 | 密度 |
| 浅水波速度 | 声速 |
| 弗劳德数 | 马赫数 |
| 急流 / 缓流 | 超声速 / 亚声速 |
| 水跃 | 激波 |
这个相似对应于 的假想气体(,)。所以早期的航空研究者不用昂贵的超声速风洞,而是把物体放进"浅水水槽(shallow water table)",通过观察水面的水跃来定性研究激波形态。水槽里的环之所以像二维物体前的弓形激波(bow shock),正是因为这个原因。
用能量去配水跃高度,下游水深会对错
弗劳德数 是明渠流的马赫数。 为缓流, 为急流, 为临界。用水跃前后比能相等去配高度,下游会留在上游那一支上。输出里的 0.714 m 来自动量。把共轭水深 换成能量式,那个水深就出不来。
同一个 Fr 切开水面的另一处是尾迹。只把速度调高、楔角却钉在原地,原因写在水深弗劳德把开尔文角撑开的地方。水跃的 Fr 和尾迹的 Fr 都用波速去量流速,一边定水深比,一边把角度固定。
相关文章
如果对您有帮助,请分享。