Skip to content
cfd-lab:~/zh/posts/2026-05-28-streamline-pa…● online

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

NOTE #055DAY THU 유체역학DATE 2026.05.28UPDATED 2026.10.19READ 4 min read#Flow-Visualization#Streamline#Material-Derivative#Euler-Lagrange#Flow-Phenomena

流动的三幅肖像 — 流线、迹线、脉线为何分道扬镳

墨带是脉线。定常流里的加速仍来自对流项,局部项为0时喉部速度照样升高。

往河里滴下一缕墨水,拍下一张照片。同一瞬间,又画出一片树叶的轨迹。两条线并不一样。流动只有一个,图却有两幅。流线、迹线与脉线分开之处在于时间,这种分开与物质导数(跟着流体所看到的变化率)连在一起。

把收缩比滑块降到0.25,喉部附近的微团速度就跳到4倍。

Nothing in this field depends on time, so ∂u/∂t = 0 at every fixed point. Yet the pink parcel still accelerates into the throat — all of it from the convective term u·∂u/∂x.

即便如此,∂u/∂t\partial u/\partial t 这根柱子仍贴在0上。全部加速都来自蓝色的对流项。局部项为0,微团照样变快。

同一流动,三幅不同的画

把流动画下来的方法不止一种。在实验室里,常用三种。

在某一瞬间,把所有点的速度方向连起来。给一个微团做标记,跟着它的足迹走。在一处持续放出染料,拍下形成的带子。流动相同,结果却并不总是相同。

时间在这里把它们分开。流动随时间改变时(非定常流),三幅画彼此错开。不改变时(定常流),三者精确重合。

流线、迹线、脉线 — 三个定义

用公式把三条曲线分开。把速度场记作 u(x,t)\mathbf{u}(\mathbf{x}, t)。

流线(streamline):在固定的某一瞬间 tt,在每一点都与速度相切的曲线。

dxu=dyv\frac{dx}{u} = \frac{dy}{v}

这里 u,vu, v 是那一瞬间的速度分量。它是把时间冻结的快照。

迹线(pathline):单个微团沿时间积分得到的真实轨迹。

dxdt=u(x,t)\frac{d\mathbf{x}}{dt} = \mathbf{u}(\mathbf{x}, t)

可以把它看作一片树叶的旅行日记。

脉线(streakline):把曾经经过同一点 x0\mathbf{x}_0 的所有微团此刻所在的位置连起来的线。烟囱升起的烟、或一条染料带,正是脉线。放进管里的染料细线也属于同一种。水流散开的那一瞬间里的色素不是流线,而是这条带。

只有定常流中三者才重合

定常流是速度场不依赖时间的流动,即 ∂u/∂t=0\partial \mathbf{u} / \partial t = 0。此时,一个微团一旦经过某点,后来的微团也会走同一条路——因为路不随时间改变。

于是迹线与脉线变得相同。流线在每一瞬间也都一样,所以三者全部重合。我们在教科书里看到的"干净的流线图",其实都站在定常这一隐含假设之上。

在非定常流中,这个假设失效。先经过的微团之路与后来者不同,瞬时的切线方向也时刻在变。三条曲线因此分开。

欧拉、拉格朗日与物质导数

这种分开的根源是两个视角:欧拉视角(在空间固定点观察)与拉格朗日视角(跟随微团观察)。流线是欧拉式的,迹线是拉格朗日式的。

连接两个视角的桥梁是物质导数。

DϕDt=∂ϕ∂t+(u⋅∇)ϕ\frac{D\phi}{Dt} = \frac{\partial \phi}{\partial t} + (\mathbf{u}\cdot\nabla)\phi

这里 ϕ\phi 是任意物理量,右端第一项是局部变化率,第二项是对流变化率。前者表示"固定点处随时间的变化",后者表示"因微团移动而产生的变化"。

直觉最容易在此处绊倒。即便在定常流中 ∂u/∂t=0\partial \mathbf{u}/\partial t = 0,微团仍可加速。想象一个收窄的喷嘴。在固定点看,速度不随时间改变。但被吸入喉部的微团却越来越快。这一加速全部由对流项 u ∂u/∂xu\,\partial u/\partial x 造成。

收缩比0.25下的4倍,以及贴在0上的局部项柱,已经在上文的滑块里出现过。这里要新看的是,造出这4倍的只有对流项。

Python — 在振荡流动中画出三条曲线#

让我们一次画出三条曲线。采用横向速度沿下游传播为波的流动:u=Uu = U,v=V0cos⁡(ωt−kx)v = V_0\cos(\omega t - k x),其中 k=ω/Uk = \omega/U。在这个流动里,三条曲线呈现出干净的不同形状。

import numpy as np
 
U, V0, omega = 1.0, 0.6, 2.0
k = omega / U
 
def velocity(x, t):
    """沿下游传播的横波: 返回 (u, v)"""
    return U, V0 * np.cos(omega * t - k * x)
 
def pathline(t0, t_end, dt=0.01):
    """t0 时刻从原点出发的微团轨迹(数值积分)"""
    x, y, t = 0.0, 0.0, t0
    xs, ys = [x], [y]
    while t < t_end:
        u, v = velocity(x, t)
        x += u * dt; y += v * dt; t += dt
        xs.append(x); ys.append(y)
    return np.array(xs), np.array(ys)
 
def streakline(t_now, n=400):
    """t_now 时刻的染料带: s<=t_now 释放微团的当前位置"""
    s = np.linspace(0.0, t_now, n)
    x = U * (t_now - s)
    y = V0 * np.cos(omega * s) * (t_now - s)   # 此流动的精确解
    return x, y
 
def streamline_snapshot(t_now, x_max=10.0, n=400):
    """t_now 瞬间过原点的流线"""
    x = np.linspace(0.0, x_max, n)
    y = (V0 / omega) * (np.sin(omega * t_now) - np.sin(omega * t_now - k * x))
    return x, y
 
t_now = 6.0
xp, yp = pathline(0.0, t_now)
xs, ys = streakline(t_now)
xl, yl = streamline_snapshot(t_now)
print(f"迹线终点   : ({xp[-1]:.2f}, {yp[-1]:.2f})")
print(f"脉线 y 范围: [{ys.min():.2f}, {ys.max():.2f}]")
print(f"流线 y 范围: [{yl.min():.2f}, {yl.max():.2f}]")

输出表明三条曲线占据了完全不同的区域。迹线笔直延伸,流线是振幅 V0/ωV_0/\omega 的浅波,脉线摆动得大得多。同一流动,三幅不同的画。

代码里的数是 U=1、V0=0.6、ω=2、t_now=6。因为 k=ω/U,所以 k 为 2。在粒子上,相位 ωt−kx 会抵消。若 u 固定为 U,则 x=Ut,于是 kx=ωt,v 成为常数 V0。所以迹线不是曲线,而是直线 y=(V0/U)x=0.6x。t=6 时终点是 (6, 3.6)。dt=0.01 的积分只要相位保持为 0,每一步都走在同一条直线上。

流线公式把 (V0/ω) 乘以正弦之差。V0/ω=0.6/2=0.3。正弦之差落在 −2 与 2 之间,因此 y 不能越出 ±0.6。浅波的宽度就是这个界限。要碰到这个端点,kx 必须转过一圈以上。k=2,x 从 0 到 10,相位跨度是 20 弧度,超过三圈。t_now=6 时 ωt=12,一张快照覆盖这段区间。±0.6 不是公式上的装饰,而是这个窗口真正碰到的边缘。

脉线是 y=V0 cos(ωs) 乘以 (t−s)。余弦的绝对值不超过 1,t−s 最长到 6。|y| 的上限是 0.6 乘 6,即 3.6。这是流线界限 0.6 的六倍。同样的 V0,只有脉线摆得很大,因为释放时刻的差被乘了进去。收缩比 0.25 是面积比。不可压时速度是面积的倒数,所以喉部变为 4 倍。这 4 倍全部由对流项产生,不是局部项。

亲手摇出非定常性

现在让时间活起来,看三条曲线如何分开。在下面的模拟中调节振幅 V0V_0 和频率 ω\omega。

Field: u = U, v = V₀·cos(ωt − kx) with k = ω/U. Drag V₀ to 0 and the three curves collapse onto the axis — they only ever agree when the flow is steady.

把 V0V_0 降到零,三条曲线叠在轴上——你回到了定常流。增大 V0V_0 和 ω\omega,黄色流线快速起伏,粉色迹线笔直延伸,青色脉线又画出另一种波形。非定常性越强,三幅肖像离得越远。

把墨带读成流线,方向就会错

把照片里的墨水写成流线,速度的切线就会被读向染料现在所在的地方。在非定常流里,这两者并不相同。流线是时间停住的截面,脉线是经过同一处的微团们的现在。物质导数 D/Dt=∂/∂t+u⋅∇D/Dt = \partial/\partial t + \mathbf{u}\cdot\nabla 的对流项在定常流里也会产生加速。只因为局部项为0就写成微团匀速,喷嘴的4倍就丢掉了。

若是定常流,三者重合。若不同,那就是流动正在随时间变化的信号。在测量烟囱把烟向上拉的浮力之前,先判断那股烟是不是脉线。把带子当成流线,方向就会错。

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