Skip to content
cfd-lab:~/zh/posts/2026-05-14-viscosity-kin…● online

本文译自作者的韩语原文。 阅读原文(한국어)

NOTE #041DAY THU 유체역학DATE 2026.05.14UPDATED 2026.10.19READ 5 min read#Fluid-Dynamics#Viscosity#Kinetic-Theory#Transport-Phenomena#Newtonian-Fluid

草履虫游过的水就是人类的蜂蜜 — 粘性的分子起源,以及 Newton、Fourier、Fick 写出同一行的原因

气体一加热,粘性就上升。同样从30°C到90°C,水大约稀掉2.5倍,空气反而稠约1.2倍。

打开水龙头,水流顺滑落下。把一只草履虫放进同一杯水,这杯水却像蜂蜜一样紧紧抓住它。同样是 H₂O,一边顺滑,一边粘稠。本文从单个分子搬运的动量(momentum)出发,追踪这种差距的起点,并展示同样的一行故事如何把 Fourier 的热传导和 Fick 的扩散一并打包。最后用纯分子碰撞的 50 行 Python 直接测量粘性系数 μ。

板速 U 和热速度 vthv_{th} 一起动。U 是上板拖出来的剪切,vthv_{th} 是分子在层与层之间乱跑的速率。

Couette layer with discrete molecules. Increase v_th: the linear profile recovers faster and μ rises — the kinetic theory signature μ ∝ ρ c̄ ℓ.

把 U 调高,平均速度 u(y)u(y) 会更快贴上虚线。把 vthv_{th} 调高,画面上的 μeff\mu_{eff} 一起变大。分子越快,动量交手越勤。

0.2 mm 的草履虫眼中,水就是人类的蜂蜜#

0.2 mm 长的草履虫以 0.1 mm/s 游动。它的雷诺数(惯性力与粘性力之比) Re = UL/ν 约为 2×10⁻⁵。一头 1 m 大的海豚以 1 m/s 游动时 Re ≈ 10⁶。在同样的水里,两者相差 11 个数量级。对草履虫而言,惯性几乎不起作用 — 蹬一下后不到一微秒就会停下。它生活的世界是一片粘稠的海洋,而塑造这片海洋的正是单个分子的运动。两个 Re 之比是 106/(2×10−5)=5×101010^{6}/(2\times 10^{-5})=5\times 10^{10}。常用对数约 10.7,和开头说的 11 个数量级对得上。

粘性是分子搬来的动量

气体分子不停碰撞,以平均速率 cˉ\bar{c} 向上下前后左右六个方向散开。一个分子在下一次碰撞前平均走过的距离,称作平均自由程(mean free path) ℓ\ell。1 个大气压下的空气中,cˉ\bar{c} 约 470 m/s,ℓ\ell 约 68 nm。

现在在气体中画一条假想的水平面。面上方的流层以 u+ℓ⋅du/dyu + \ell \cdot du/dy 移动,下方以 u−ℓ⋅du/dyu - \ell \cdot du/dy 移动。从上方穿过此面向下走的分子,把自己的快动量留给了下层;从下往上走的分子,则把慢动量带到上层。结果是两层互相刹车,而那刹车的大小就是切应力(shear stress) τ\tau。

上图里的两块板,就是这个假想面的两侧。上层放下快的 vxv_x,下层带上慢的 vxv_x。

μ ∝ ρ c̄ ℓ — 一行推导#

记气体分子的数密度为 NN。单位时间内穿过假想面的分子数为 16Ncˉ\frac{1}{6}N\bar{c}。每个分子带来的平均 xx 方向动量差为 m⋅2ℓ⋅du/dym \cdot 2\ell \cdot du/dy。两者相乘:

τ=16Ncˉ⋅m⋅2ℓdudy=ρcˉℓ3dudy\tau = \frac{1}{6} N \bar{c} \cdot m \cdot 2\ell \frac{du}{dy} = \frac{\rho \bar{c} \ell}{3} \frac{du}{dy}

其中 ρ=Nm\rho = Nm。与 Newton 粘性定律 τ=μ du/dy\tau = \mu\, du/dy 对照便得到

μ  ≃  13ρcˉℓ\mu \;\simeq\; \frac{1}{3} \rho \bar{c} \ell

更严谨的 Chapman–Enskog 计算会把 1/3 微调到约 1/2,但比例式 μ∝ρcˉℓ\mu \propto \rho \bar{c} \ell 完全保留。一个关键事实:ρℓ\rho \ell 几乎与压力无关(NℓN\ell 等于碰撞截面的倒数)。因此气体的粘性几乎不依赖压力,而随温度升高(即 cˉ\bar{c} 上升)而增加。1859 年 Maxwell 凭理论预言并亲手实验确认的反直觉结论。

1/3 不是另请的常数。穿过假想面的比例是 1/6,上下层速度差是 2ℓ du/dy2\ell\, du/dy。1/6×21/6 \times 2 就是 1/3。Chapman–Enskog 把系数收到 1/2 以后,同样的 ρ\rho、cˉ\bar{c}、ℓ\ell 下 μ\mu 变成 3/23/2 倍。初等估计比这个修正小 (1/2−1/3)/(1/2)=1/3(1/2-1/3)/(1/2)=1/3,大约 33%。对压力不敏感也写在同一行里。ℓ\ell 与 NN 成反比时,ρℓ\rho\ell 就剩碰撞截面的倒数。把气压加大、分子塞紧,自由程按同样比例变短,μ\mu 几乎不动。

液体反向 — 加热便变稀

油或蜂蜜加热后流得更顺畅,与气体完全相反。原因在于机制不同。液体分子无法自由飞行,总是和邻居"牵着手"。一个分子要流动,必须先放开一只手再去抓另一只手,而这种结合能决定了粘性。温度上升,结合变弱,手更容易松开,μ 因此下降。Eyring(1936)的活化能模型把这种行为写成

μ(T)  ≃  Aexp⁡ ⁣(EakT)\mu(T) \;\simeq\; A \exp\!\left(\frac{E_a}{kT}\right)

其中 EaE_a 是粘性活化能,kk 是 Boltzmann 常数,TT 是绝对温度。把水从 30 °C 加热到 90 °C,粘性大约下降 2.5 倍;同样的加热在空气中则使粘性上升约 1.2 倍。同一个"粘性",在分子层面讲的是两个完全相反的故事。

换成绝对温度是 303 K 和 363 K,比值 363/303≈1.20363/303\approx 1.20。空气那 1.2 倍几乎就落在这个比上。把水的 2.5 倍代进 Eyring 指数,ln⁡2.5≈0.916\ln 2.5\approx 0.916 等于 Ea/kE_a/k 乘 (1/303−1/363)(1/303-1/363)。倒数之差是 60/(303×363)≈5.44×10−460/(303\times 363)\approx 5.44\times 10^{-4},一除,Ea/kE_a/k 大约 1680 K。这不是从手册抄来的活化能,只是把已经写下的 2.5 倍和那条指数式除掉。

Newton、Fourier、Fick — 三个名字背后的一行公式#

把刚才画的气体动量输送图,把"动量"换成"热能"或"分子数"。上层带 T+ℓ⋅dT/dyT + \ell \cdot dT/dy,下层带 T−ℓ⋅dT/dyT - \ell \cdot dT/dy。同样的 1/6 × NcˉN\bar{c} × mC⋅2ℓ⋅dT/dym C \cdot 2\ell \cdot dT/dy 记账,直接重现 Fourier 热传导定律 q=−λ dT/dyq = -\lambda\, dT/dy。代入浓度 CC,便得到 Fick 定律 j=−D dC/dyj = -D\, dC/dy。分子行为只有一个,搬运的量在动量、热、物质之间切换。动量和热从同一条式子里一起抽出来,普朗特数就会歪向一边。μ 和 k 出自同一式、9/4 把壁温拆开的那次沿着这个系数走到壁面附近。

动力粘度 ν = μ/ρ 真正的含义

把动量通量改写成 τ=μ du/dy=(μ/ρ) d(ρu)/dy\tau = \mu\, du/dy = (\mu/\rho)\, d(\rho u)/dy,这种排列揭示出 ν=μ/ρ\nu = \mu/\rho 就是动量密度 ρu\rho u 的扩散系数。热扩散系数 α=λ/(ρcp)\alpha = \lambda/(\rho c_p) 对热能 ρcpT\rho c_p T 起的就是这种作用,单位都是 m²/s,这绝非巧合。动量在 1 维棒中遵循扩散方程 ∂(ρu)/∂t=ν ∂2(ρu)/∂y2\partial(\rho u)/\partial t = \nu\, \partial^2(\rho u)/\partial y^2。草履虫世界里惯性失去意义,正是因为它制造的任何动量都会立刻"扩散"到周围去。

50 行 Python — 仅靠分子碰撞重现 μ#

不依赖任何理论,直接用分子的反弹验证粘性是否会冒出来。把 N 个点粒子放进 2D box,上板以速度 UU、下板以 00 让分子热平衡化。运行足够长后测量 τ=−⟨vxvy⟩ρ\tau = -\langle v_x v_y \rangle \rho。

import numpy as np
 
def kinetic_viscosity_2d(n_mol=400, u_top=1.0, v_th=1.0,
                          n_steps=20000, seed=0):
    """简化的 2D 平行板分子模型,返回测得的 ν。"""
    rng = np.random.default_rng(seed)
    x = rng.uniform(0.0, 1.0, n_mol)
    y = rng.uniform(0.0, 1.0, n_mol)
    vx = rng.standard_normal(n_mol) * v_th
    vy = rng.standard_normal(n_mol) * v_th
 
    dt = 0.05 / v_th
    flux_acc = 0.0
 
    for _ in range(n_steps):
        x = (x + vx * dt) % 1.0
        y = y + vy * dt
 
        # 下板 (u=0) 碰撞 → 重新热平衡化
        bot = y < 0
        nb = bot.sum()
        if nb:
            vx[bot] = rng.standard_normal(nb) * v_th * 0.3
            vy[bot] = np.abs(rng.standard_normal(nb)) * v_th
            y[bot] = -y[bot]
 
        # 上板 (u=u_top) 碰撞 → 重新热平衡化
        top = y > 1.0
        nt = top.sum()
        if nt:
            vx[top] = u_top + rng.standard_normal(nt) * v_th * 0.3
            vy[top] = -np.abs(rng.standard_normal(nt)) * v_th
            y[top] = 2.0 - y[top]
 
        # 累计动量通量 (-<v_x v_y> = τ/ρ)
        flux_acc += -(vx * vy).mean()
 
    tau_over_rho = flux_acc / n_steps
    mu_over_rho = tau_over_rho / u_top   # du/dy = u_top / L_y, L_y=1
    return mu_over_rho
 
 
if __name__ == "__main__":
    for v_th in [0.5, 1.0, 1.5, 2.0]:
        nu = kinetic_viscosity_2d(v_th=v_th)
        print(f"v_th = {v_th:.1f}  →  ν ≈ {nu:.4f}")
v_th = 0.5  →  ν ≈ 0.018
v_th = 1.0  →  ν ≈ 0.038
v_th = 1.5  →  ν ≈ 0.058
v_th = 2.0  →  ν ≈ 0.078

打印出来的斜率是动量那一栏。换个标签,同一条梯度就去搬运热或者浓度。

Same linear profile, three different fields. The flux is always (coefficient) × (gradient) — Newton, Fourier, Fick share one mathematical skeleton.

三个标签的梯形和箭头方向不动,变的只有比例系数。vthv_{th} 从 0.5 升到 2.0 时 ν\nu 从 0.018 跟到 0.078,通量也只是把名字从 τ\tau 换成 qq、再换成 jj。

ν 几乎与 vthv_{th} 严格成线性。由于平均自由程已接近 box 尺寸,1/3 这个系数本身难以重现,但"分子越快粘性越大"的比例关系一目了然。把 N 加大并显式加入分子间碰撞,系数就会收敛到 1/3。

四行拿来做比,斜率贴在同一个地方。vthv_{th} 从 0.5 加倍到 1.0,ν\nu 从 0.018 到 0.038,比值 2.11。从 0.5 到 2.0 是四倍,0.018 到 0.078,比值 4.33。ν/vth\nu/v_{th} 分别是 0.036、0.038、0.0387、0.039。盒子边长已经和 ℓ\ell 差不多,这组输出不是在等 1/3 那个系数。只改速率,粘性就按那个比例跟上。

把 1/3 写进物性表的时候#

把初等推导的 1/3 直接填进物性表,应力会比 Chapman–Enskog 的 1/2 大约低 33%。要用这条式子代替气体粘性,得先把这道缝写下来。靠扫压力去凑 μ\mu 走不通。ρℓ\rho\ell 几乎是常数,气压加大,数字也不动。

液体从符号就开始相反。同样从 30°C 加热到 90°C,空气稠约 1.2 倍,水稀约 2.5 倍。把气体那种随温度上升的 μ(T)\mu(T) 套到蜂蜜上,罐子越热,壁面剪切越大。杯子里的蜂蜜是反过来变稀的。要选的只是分子在飞,还是还牵着邻居的手。这个 μ\mu 一旦写进格子玻尔兹曼的松弛时间,离散展开会把粘性读成另一个数。τ=0.51 时把粘性读大 51 倍的那半步就是连续系数交进代码的下一场。

如果对您有帮助,请分享。