关于流体仿真的两个问题

在学习太极图形课S1第10讲:流体仿真01,但是,我有两个问题没有想明白。

  1. P2 时间积分:积分算子分解中讲到,可以假设物体是弱可压缩的,于是在Projection/pressure solver的时候,就不需要求解方程组了,可以直接使用 dv=-\frac {1}{\rho}\nabla(k(\rho-\rho_0)) 。我的问题是,这里的 \rho 怎么来的?视频中说直接看作已知量。

  2. 太极图形课S1第10讲中,花费了极大的篇幅介绍SPH技术,我不太清楚为什么需要这项技术?在P4 实现细节: WCSPH中,介绍了利用SPH技术来计算 \rho ,但是之前不是假设 \rho 是已知的吗?为什么这里又需要计算?

通过跟别人的讨论,这里我弄明白了第一个问题:

\rho 是宏观状态下,物体的密度,而不是粒子的密度。粒子在不停的运动,所以这个密度会发生改变。但是,粒子运动后,要统计密度,这个时候就需要用 SPH 技术来统计密度。

我又有另一个问题了:

  1. 在拉格朗日视角下,本来说splitting operation,有一步是: \rho \frac {Dv}{Dt} 。但是,到了后面求解的时候,直接变成了 dv/dt 。那么速度对空间的导数去哪里了?

网上的一份资料中给出了一种理解:对于拉格朗日视角,粒子的流速是: v(x_0, y_0, z_0, t) ,这里的 (x_0, y_0, z_0) 实际上表示的是不同的粒子。

于是,全微分可以写成: Dv/Dt = dv/dt + dv/dx_0 \cdot dx_0/dt + dv/dy_0 \cdot dy_0/dt + dv/dz_0 \cdot dz_0/dt 。而这里的 (x_0, y_0, z_0) 都与时间无关,于是: $dx_0/dt = dy_0/dt = dz_0/dt = 0$,于是全微分就是: Dv/Dt = dv/dt + dv/dx_0 \cdot 0 + dv/dy_0 \cdot 0 + dv/dz_0 \cdot 0 = dv/dt ,于是全微分退化成了速度对时间的导数。注意: 这里只是 dx_0/dt = dy_0/dt = dz_0/dt = 0 , dv/dx_0 并不等于0,并不影响后面的 \nabla^2v