漩涡的两副面孔 — 自由涡、强迫涡与亥姆霍兹
从浴缸漩涡到龙卷风,涡量到底度量了什么
把浴缸的塞子拔掉,水会一圈圈地转。我们把这一幕称作"水在旋转"。可流体力学家面对这片区域的大部分时,会反过来说:"这里没有发生旋转(irrotational)。"看似矛盾的两句话里,藏着涡(vortex)真正的样子。本文把同一幅画里共存的两种漩涡分开:自由涡(free vortex,速度按 分布)与强迫涡(forced vortex,速度按 分布),讲清楚涡量(vorticity,流体微团自转角速度的两倍)究竟在度量什么,再追到亥姆霍兹定理为什么把涡称作"不灭"。
浴缸漩涡真的是"旋转"吗#
"旋转"这一个词里塞着两层意思。其一是 公转 — 围着某个点做圆周运动。其二是 自转 — 微团自己绕自己的轴转。在浴缸漩涡里,水的微团确实公转。可是自转呢?远离排水口的那块区域几乎没有。一片漂在水面的小叶子沿着圆形轨迹走,可它自己并不转动,始终把同一面对着排水口。
在流体力学里,"旋转"指的就是自转。所以自由涡除了奇异的中心点以外,整个区域都被归为"无旋"。
强迫涡与自由涡:同一幅画,不同的灵魂#
往一个旋转的容器里搅水搅久了,整桶水会像刚体一样一起转。这叫 强迫涡。每一个微团既公转也自转。
其中 是切向速度, 是刚体的角速度, 是到中心的距离。速度与半径成正比。
而在忽略粘性的理想流体里自然形成的漩涡,是 自由涡(即势涡)。
是 环量(circulation) — 沿一条闭合曲线的速度线积分。速度按 衰减,到中心发散。这一奇点在真实流体里被粘性所驯服。
| 强迫涡 | 自由涡 | |
|---|---|---|
| 速度 | ||
| 自转 | 有 | 无 |
| 能量输入 | 持续不断 | 仅在最初一次 |
| 日常例子 | 搅动的杯水 | 浴缸、龙卷风 |
同样的圆形流动,自转的有无却相反。把这一差异化为单一标量的,就是涡量。
涡量度量了什么#
涡量 是速度场的旋度(curl)。
二维情形里只剩 分量:
其中 分别是 方向的速度分量。这一值正好等于 流体微团自转角速度的两倍。
代入强迫涡, 是常数 — 整片区域都在自转。代入自由涡,除中心外处处 。流线一样圆,自转情况却恰好相反。
兰金组合涡 — 龙卷风的蓝图#
真实世界里的漩涡不会只听一种法则。靠近中心的地方粘性强,流体像刚体一样转;远处粘性可忽略,自由涡的法则接管。把两者拼起来的模型就是 兰金(Rankine)组合涡。
是核心半径, 是核心边界处的最大切向速度。两段表达式在 光滑相接。龙卷风的风速分布、飞机翼尖脱出的翼尖涡、排水口上方的吸入涡,都接近这一形状。核心内是有旋区,核心外是无旋区。
亥姆霍兹定理 — 涡的不灭#
在无粘流体中,作用在微团上的力只有压力,而压力指向微团中心,无法产生力矩。所以 此前不自转的微团永远不会开始自转,正在自转的微团永远不会停下。这就是亥姆霍兹涡定理的一行总结。
更精确的说法是 开尔文(Kelvin)定理:沿一条闭合物质曲线测得的环量 不随时间变化。
是物质导数(跟随流体微团求导)。涡管不能被切断也不能被分开,被拉长后转得更快 — 跟花样滑冰运动员收紧手臂是同一件事。真实流体有粘性,涡终究会扩散,但在水或空气这种低粘性介质中,它们能存活好几天。这也是为什么飞机航迹上的凝结涡能久久可见。
速度势打开的那扇门#
在无旋()区域,向量恒等式直接送一份礼:
这一标量函数 称为 速度势。如果还满足不可压缩性 ,那么
正是拉普拉斯方程。无粘、无旋、不可压缩流可以由单一标量函数完全描述。十九世纪的流体力学之所以能用解析手段处理翼型升力、源汇模型,秘诀就在这里。自由涡本身可以写成 — 一个与角度 成正比的势函数。
用代码看这两种涡#
把兰金涡的速度和离散涡量画出来,差别一目了然。
import numpy as np
def rankine_speed(r, R_core, U_max):
"""兰金组合涡的切向速度"""
speed = np.where(r <= R_core,
U_max * r / R_core,
U_max * R_core / np.maximum(r, 1e-9))
return speed
def vorticity_field(u, v, dx, dy):
"""二维离散旋度: omega_z = dv/dx - du/dy"""
dvdx = (v[1:-1, 2:] - v[1:-1, :-2]) / (2 * dx)
dudy = (u[2:, 1:-1] - u[:-2, 1:-1]) / (2 * dy)
return dvdx - dudy
# 在 200x200 网格上采样
N, L = 200, 2.0
x = np.linspace(-L, L, N)
y = np.linspace(-L, L, N)
X, Y = np.meshgrid(x, y)
R = np.hypot(X, Y)
THETA = np.arctan2(Y, X)
U_max, R_core = 1.0, 0.5
u_theta = rankine_speed(R, R_core, U_max)
u = -u_theta * np.sin(THETA)
v = u_theta * np.cos(THETA)
dx = dy = x[1] - x[0]
omega = vorticity_field(u, v, dx, dy)
# 核心内外的平均涡量
mask_in = R[1:-1, 1:-1] < R_core
mask_out = R[1:-1, 1:-1] > 1.5 * R_core
print(f"核心内平均 omega_z ~ {omega[mask_in].mean():.3f}") # ~ 2 * U_max / R_core
print(f"核心外平均 omega_z ~ {omega[mask_out].mean():.3f}") # ~ 0核心内 几乎是常数,核心外则接近零。同样的圆形流动里,把"旋转"与"不旋转"分隔开的边界,正好画在 上。
在仿真中亲手调一调#
请在下面的仿真中亲手调动参数。被困在中央圆盘里的黄色示踪粒子构成强迫涡核心;外围漂动的蓝色粒子生活在自由涡区域。
把核心半径 调小,自转区域就变窄 — 这正是龙卷风"风眼"收紧的模型。把 调大,核心涡量 也跟着放大。右上角的小图显示: 区段是直线(), 区段是双曲线(),它们在 处光滑相接。
下次再看到漩涡#
把有自转的区域和没自转的区域分开。这就是这一小时留下的一句话。下次见到浴缸漩涡、茶杯里的小漩、卫星上的台风云图,记得回想三件事。
- 公转和自转不是一回事。 同样圆的流线可以承载零涡量。
- 兰金组合涡是最简单的现实模型。 核心内做刚体转动,核心外按 。
- 亥姆霍兹定理回答了"涡为何这么难消失" — 粘性越小,活得越久。
带着这三行,下次乱流课上"涡量输运方程"再登场,就不会陌生。涡量本身不再守恒,但精神还停在原处。
如果对您有帮助,请分享。