跳到主要内容
Sandbox Physics

流体力学 · 用粒子模拟水花

SPH Free-Surface Splash

只看附近邻居的粒子,怎样算出飞溅水体的密度和压强? 每个粒子用一个平滑的权重函数把附近邻居加起来,得到当地的密度;再由状态方程把密度换成压强。这里把水当成略微可压缩的流体:人为设定的声速越高,密度越接近不变,可时间步也得越小。

这是一个二维弱可压缩 SPH 模拟,用移动的粒子重建自由表面。六个场景里,粒子场、紧支撑核、压强随水深的分布,以及能量和密度误差的历史曲线,都在同一张画布上同步更新。

交互模型SPH Free-Surface Splash
模拟时间 tg/Ht\sqrt{g/H}00
流体粒子数 NN260260
体相密度 RMS ερ\varepsilon_\rho0%0\%
归一化质量 M/M0M/M_01.0001.000
声学时间步 ΔtCFL\Delta t_{\mathrm{CFL}}00
场景验证量xf/H=0x_f/H=0

物理教程

SPH 自由表面:怎样从邻居重建一池水

背景光滑粒子流体动力学(SPH)把连续的流体拆成许多会移动的粒子,每颗粒子带着质量、位置和速度。粒子只看一定半径内的邻居,用加权求和估出密度,再在压强梯度、黏性和重力作用下运动。粒子分布的边缘,自然就成了自由表面。

为什么值得理解溃坝、晃荡和液滴撞击里,界面都在剧烈运动。固定网格要另想办法追踪界面;拉格朗日粒子本身就跟着流体走。代价是密度有噪声、边界有误差,显式推进的时间步也受到严格限制。

先抓重点

核心问题
每颗粒子只知道身边有哪些邻居。合在一起,它们怎样得出压强,让水近似不可压缩,还能表现出自由表面的运动?
一句话直觉
核函数只在有限范围内不为零,它把身边一圈离散的邻居变成一个连续的估计。数值声速 c0c_0 越高,密度变化越小,稳定的时间步也越短。在弱可压缩 SPH(WCSPH)里,水越接近不可压缩,算得就越慢。

核心数学模型

SPH 密度求和

ρi=∑jmjW ⁣(∥ri−rj∥,h)\rho_i=\sum_j m_j W\!\left(\lVert\boldsymbol r_i-\boldsymbol r_j\rVert,h\right)

三次样条核只在有限的支撑半径内不为零。水体内部的粒子四周几乎都有邻居;自由表面上的粒子在空气一侧没有邻居,邻域被截掉了一块。

对称压强力与黏性

dvidt=−∑jmj(piρi2+pjρj2)∇iWij+ν∇2vi+g\frac{\mathrm d\boldsymbol v_i}{\mathrm dt}=-\sum_j m_j\left(\frac{p_i}{\rho_i^2}+\frac{p_j}{\rho_j^2}\right)\nabla_i W_{ij}+\nu\nabla^2\boldsymbol v_i+\boldsymbol g

压强项对每一对粒子都是对称的,所以力总是成对出现。这里的黏性拉普拉斯项、壁面反弹和凝聚项,都是低阶的教学近似。

Tait 状态方程与声学 CFL

pi=ρ0c02γ[(ρiρ0)γ−1],Δt≤Chc0+max⁡i∥vi∥,γ=7p_i=\frac{\rho_0c_0^2}{\gamma}\left[\left(\frac{\rho_i}{\rho_0}\right)^\gamma-1\right],\qquad \Delta t\leq C\frac{h}{c_0+\max_i\lVert\boldsymbol v_i\rVert},\qquad \gamma=7

状态方程让水可以有限度地压缩,换来显式推进。提高数值声速能压低密度误差,允许的时间步也随之变小。

常见难点

粒子不是水分子

容易误解画面里的一颗蓝点就是一颗真实水分子。

正确理解每个 SPH 粒子代表一小块有限体积的流体,带着平滑后的质量、速度和热力学状态。它不是分子尺度的个体。

漂亮水花不等于收敛

容易误解皇冠形的水花看起来像回事,求解器就算验证过了。

正确理解先检查总质量、内部密度误差、静水关系 p=ρgdp=\rho g d、自由落体时质心的运动,以及改变粒子间距后结果是否稳定。看起来像,只能算最后一层证据。

动手实验

  1. 01

    看核邻域怎样估出密度

    暂停溃坝场景,先点一颗内部粒子,再点一颗自由表面上的粒子,比较 A 面板的支撑圆和 B 面板的邻居数。

    你会看到: 内部粒子四周的邻居更齐全,各个方向几乎一样多;表面粒子缺了空气一侧的邻居,密度求和在边界处就偏小。
  2. 02

    检验静水压强

    选择“静水检验”,降低黏性后逐步推进,比较 C 面板的粒子压强点与静水直线。

    你会看到: 越深压强总体越高,但粒子噪声、壁面处理和自由表面处偏小的密度,都会让散点偏离解析直线。
  3. 03

    比较声速和时间步

    在相同场景分别选择较低和较高数值声速,重置后比较体相密度 RMS 与声学时间步读数。

    你会看到: 声速越高,密度波动通常越小,时间步却要更短。弱可压缩 SPH 的计算代价就在这里。
  4. 04

    做分辨率检查

    依次改变粒子间距并重置溃坝,在相近模拟时刻比较前沿位置、密度误差与历史曲线。

    你会看到: 粒子数、邻域采样和允许的时间步会一起变。如果结论随分辨率大幅变化,单次飞溅就不能当作可靠的预测。

概念灵感:FluidMotion。模拟和图形都是原创,模型的适用范围见上文。

反馈这个页面有错误、看不明白,或者缺了什么?告诉我们
反馈类型

提交时会附带本页地址、Lab ID、网站语言和设备类型。请不要填写个人信息。反馈最多保存 12 个月。隐私政策