跳到主要内容
Sandbox Physics

流体力学 · 可操纵数值流场

Interactive Jet

透明流动室里,二维不可压缩速度场被挤成一层有纵深的发光粒子。改变黏度、染料扩散、压力迭代和涡量增强,比较喷流绕柱后的卷吸与尾迹;开启流体刷后,可在测试区拖动并同时注入染料和动量。

交互模型Interactive Jet
模拟时间0.00s0.00\,\mathrm{s}
投影前 u2\lVert\nabla\cdot\boldsymbol{u}\rVert_20.0000.000
投影后 u2\lVert\nabla\cdot\boldsymbol{u}\rVert_20.0000.000
散度压缩倍数1.0×1.0\times
平均动能 K/ρK/\rho0.00Jkg10.00\,\mathrm{J\,kg^{-1}}
峰值涡量 ωmax\lvert\omega\rvert_{\max}0.00s10.00\,\mathrm{s^{-1}}

物理教程

可操纵喷流:平流、扩散与投影分别做什么

背景实时流体画布把速度与染料存放在固定网格上。每个时间步先搬运速度与染料,再扩散小尺度结构,最后求压力并移除可压缩分量。

为什么值得理解把求解步骤拆开后,漂亮的旋涡不再只是特效:可以直接测量压力投影前后的散度,并看见稳定性与数值耗散之间的交换。

先抓重点

核心问题
为什么一次压力投影能让被任意推动的速度场重新接近不可压缩?
一句话直觉
任意中间速度可以分解成无散部分与压力梯度;解一个 Poisson 方程并减去 p\nabla p,就能大幅压低散度。

核心数学模型

不可压缩速度演化

ut+(u)u=p+ν2u+f,u=0\frac{\partial\boldsymbol{u}}{\partial t}+\left(\boldsymbol{u}\cdot\nabla\right)\boldsymbol{u}=-\nabla p+\nu\nabla^2\boldsymbol{u}+\boldsymbol{f},\qquad \nabla\cdot\boldsymbol{u}=0

平流搬运动量,黏性扩散速度梯度,外力来自喷口和流体刷,压力负责不可压缩约束。

半 Lagrangian 回溯

ϕn+1(x)ϕn ⁣(xΔtun(x))\phi^{n+1}(\boldsymbol{x})\approx\phi^n\!\left(\boldsymbol{x}-\Delta t\,\boldsymbol{u}^n(\boldsymbol{x})\right)

从每个网格点沿速度反向追踪,再插值旧场。这个步骤稳健,但反复插值会抹平细节。

压力投影

2p=1Δtu,un+1=uΔtp\nabla^2p=\frac{1}{\Delta t}\nabla\cdot\boldsymbol{u}^{*},\qquad \boldsymbol{u}^{n+1}=\boldsymbol{u}^{*}-\Delta t\,\nabla p

Poisson 方程找出需要移除的梯度分量;迭代越充分,残余散度通常越小。

常见难点

稳定不等于精确

容易误解算法不会爆炸,就说明所有小旋涡都被正确保留。

正确理解半 Lagrangian 平流可以在较大时间步下保持稳定,却会通过插值引入数值耗散。涡量增强只是补回视觉细节,不能恢复被丢失的真实尺度。

空间粒子不意味着三维求解

容易误解粒子分布有纵深,所以求解器已经解析了三维湍流。

正确理解所有粒子都采样同一个二维速度截面;纵深只用于让结构更易观察,不能产生三维涡伸长。

动手实验

  1. 01

    建立圆柱尾迹

    选择“圆柱尾迹”,等待染料绕过障碍。

    应该观察到: 喷流在柱前减速并分流,柱后形成低速尾迹与交替旋转结构。
  2. 02

    检查压力投影

    打开“散度诊断”,逐步提高压力迭代次数,比较投影前后读数。

    应该观察到: 投影后的散度范数明显降低;迭代太少时,残余会在场切片上更容易看见。
  3. 03

    亲手加入动量

    开启流体刷,在尾迹中横向拖动,再关闭刷子旋转装置。

    应该观察到: 局部染料和速度同时改变,新的扰动被平流带走、扩散,并再次经过压力投影。