挂在天上的波浪 — 开尔文-亥姆霍兹不稳定性
速度不同的两股流为何会卷成漩涡
天空偶尔会挂起一排像被冻住的海浪。钩状的波峰卷起来,像海滩上的碎浪一样整齐排列。照片看上去像合成的,但它们是真实存在的云,还有名字:开尔文-亥姆霍兹云。空气把波浪破碎前的一瞬间原样模仿了出来。
这篇文章追踪这些钩子是怎么形成的。快流与慢流相接的一层薄薄的边界面(剪切层)。我们要看清这层边界为何无法保持平整而卷成漩涡,何时会卷、何时安静,并把这一切压进一个增长率公式里。最后亲手把一层薄涡层卷起来,做出那些钩子。
挂在天上的波浪
开尔文-亥姆霍兹云并非唯一。同样的事到处都在发生。木星条纹裂开的边界,海水中不同密度的水互相滑动形成的内波,往咖啡里倒牛奶时瞬间出现的螺旋。就连一缕香烟的烟直直上升后突然散乱的那个点,也是同一个道理。
它们有一个共同点。两层速度不同的流体并排流动。上层快,下层慢。两者之间那层薄薄的边界在滑动。这个滑动(剪切)就是种子。
直觉上,你会觉得两股流只要并排擦过去就好。实际并非如此。边界面上哪怕只有极小的扰动,那扰动也会自行增长。这就是开尔文-亥姆霍兹不稳定性(由剪切引起的界面不稳定)。
两股流滑动时发生了什么
假设边界面上鼓起了一个小峰。上方的快流必须越过它。越过峰顶的通道变窄了。要保持流量相同,狭窄处的速度就会加快。
速度快,压强就低。这是伯努利原理(流动快的地方压强低)。峰顶上方压强降低,峰就被进一步向上吸。而在波谷处则相反,流动变慢、压强升高,波谷被压得更深。
归纳一下就是:峰更高,谷更深。小扰动喂养自己,这是一种正反馈。一旦开始就停不下来。这就是不稳定性的核心机制。
这里有一个常见误解:“重的水在下、轻的空气在上,不是很稳定吗?”只看重力,确实如此。但只要剪切足够强,就能压过重力的稳定化作用。稳定的分层在强风面前也会崩溃。
色散关系 — 哪些波长会增长
这场角力可以压缩成一个方程。上层(密度 )与下层(密度 )以相对速度 互相滑动,界面上作用着重力 和表面张力 。波数为 (单位长度内的波数)的扰动增长的速度,也就是增长率 ,如下所示。
是扰动变大的速度。根号里第一项是剪切(引起不稳定),第二项是重力(重流体在下则起稳定作用),第三项是表面张力(把界面绷紧而起稳定作用)。
若根号内为正, 为实数,扰动指数增长。若为负, 为虚数,扰动只振荡而不增长。不稳定条件就是根号内为正,也就是剪切项胜过其余两项。
看看最纯粹的情形。若两层密度相等(),且没有重力和表面张力,公式会简化得惊人。
波数越大,也就是波长越短,增长越快。若完全没有刹车,任意短的波长都会爆炸式增长。在真实流动中,粘性会在短波长一端切断这种失控。
重力和表面张力踩下刹车
两个刹车拦住不同的波长。重力项正比于 ,因此压制长波(小 )。表面张力项正比于 ,因此压制短波(大 )。二者之间留下一条不稳定波长的带。
若剪切较弱,这条带根本打不开。加大剪切,到某一刻会在某个特定波长处最先突破不稳定。这个阈值正是风开始在平静水面掀起波浪的最小风速。
代入空气与水,可得 ,最先突破的波长约为 1.7 cm。这是开尔文在19世纪算出的值。(真实水面由于粘性,在更低的风速下也会起涟漪——这是理想理论的局限。)
在连续分层的流动中,用理查森数(浮力与剪切之比)来判定。,其中 是浮力频率。根据迈尔斯-霍华德定理,在 的某处可能出现不稳定。它是预测大气与海洋中何时爆发湍流的实用判据。
下面亲自踩一踩刹车。拖动剪切、密度比、重力、表面张力的滑块,看增长率曲线如何改变。
把剪切 降到6附近,曲线贴到底部,翻成 “STABLE”。加大重力或表面张力,不稳定带(橙色区域)从两侧收窄。把密度比推向1(让两层变得相似),哪怕极弱的剪切也会让曲线飙升。
用 Python 画出增长率曲线#
把公式直接搬进代码,就能立刻看出在任意风速下哪个波长最先增长。
import math
def kh_growth_rate(k, dU, rho_u, rho_l, g=9.81, T=0.072):
"""开尔文-亥姆霍兹模态的增长率 sigma(k)。"""
shear = rho_u * rho_l * dU**2 / (rho_u + rho_l)**2 # 不稳定化 (剪切)
gravity = g * (rho_l - rho_u) / ((rho_u + rho_l) * k) # 稳定长波
tension = T * k / (rho_u + rho_l) # 稳定短波
disc = shear - gravity - tension
return k * math.sqrt(disc) if disc > 0 else 0.0
rho_air, rho_water = 1.225, 1000.0
ks = [1 + 0.2 * i for i in range(4000)]
for dU in (3.0, 6.6, 10.0):
s = [kh_growth_rate(k, dU, rho_air, rho_water) for k in ks]
smax = max(s)
if smax > 0:
kstar = ks[s.index(smax)]
lam = 2 * math.pi / kstar * 100 # cm
print(f"dU={dU:4.1f} m/s -> unstable, lambda*={lam:5.2f} cm, sigma_max={smax:6.2f} /s")
else:
print(f"dU={dU:4.1f} m/s -> stable (no waves)")运行结果如下。
dU= 3.0 m/s -> stable (no waves)
dU= 6.6 m/s -> unstable, lambda*= 1.69 cm, sigma_max= 4.89 /s
dU=10.0 m/s -> unstable, lambda*= 0.78 cm, sigma_max=183.30 /s风速为每秒3 m 时,水面平静。一旦越过 6.6 m,约 1.7 cm 的涟漪最先增长。风速再往上,增长率急剧变大,而最危险的波长变短。
卷成漩涡的那一刻
在不稳定最初增长的阶段,线性理论符合得很好。但一旦峰足够大,故事就变了。界面不再只是起伏,而是整个卷起来。薄薄的涡层缠绕成规则的涡列。这就是钩状云的真面目,也是理论中所说的斯图尔特猫眼(cat's eye)图案。
下面的模拟真的把一层略有扰动的涡层卷了起来。每个点是界面上的标记,通过无粘流动的诱导速度互相吸引。用滑块改变涡的数量和剪切的强度。
一条最初还是平缓波浪的线,几秒钟内就缠绕成猫眼。加大剪切 ,它卷得更快;增加涡的数量,就出现更细密的钩列。按 Reset,又从平坦的波浪开始。
在这里区分两个阶段很重要。增长率公式只描述线性阶段,即波最先变大的时候。卷起的猫眼是非线性阶段,是界面吸引自身而生成的另一幅画。自然把这两个阶段接连展示。波先立起,然后卷起。
这个现象告诉我们的
有剪切的地方,总有不稳定的种子。当两股速度不同的流相遇,那条边界就永远无法保持光滑。小峰喂养自己,最终卷成漩涡。这就是开尔文-亥姆霍兹不稳定性的本质。
增长率 是这场较量的裁判。剪切在推,重力和表面张力在拉。三者的平衡决定哪个波长增长、哪个波长入睡。从在平静水面掀起波浪的最小风速,到衡量大气湍流阈值的理查森数,全都是同一杆秤上的刻度。挂在天上的那朵钩状云,就是这杆秤已经倒向剪切一侧的证据。
如果对您有帮助,请分享。