使用平滑粒子流体动力学的流体模拟

时间:2011-09-23 08:48:36

标签: c++ simulation fluid

实际上,我正在使用C ++和openGL开发一个SPH模拟器。我现在遇到了几个问题,

我在盒子的一侧制作起始流体颗粒(我将盒子作为边界体积),将它们塑造成盒子,然后给它们初始速度等于零。然后我开始主循环,中提琴,流体开始移动,这里有一个奇怪的现象。流体开始在所有方向上扩散。

请看图片:

enter image description here http://i278.photobucket.com/albums/kk86/anggytrisnawan/Screenshot-UntitledWindow-2.png

从模拟开始几秒钟后拍摄的照片。这对我来说似乎很奇怪。这是我用于模拟的参数:

#define H                   0.040   // Smoothing Length
#define Rho0            1000    // (kg/m^3) water particle rest density
#define Mass                    0.012       // (kg)
#define DT                  0.001       // time step
#define TotalParticles      5000        // total number of particle

注意:目前我还没有计算表面张力。

解决:我的错在这里......他们在开始时互相重叠......所以压力使它们扩散..

2 个答案:

答案 0 :(得分:1)

从您提供的图像看来,模拟开始于一个角落中的所有粒子。由于粒子可能必须具有一些排斥势,以便彼此不重叠,因此一旦模拟开始,这种排斥将迫使粒子分开。

然后,你还没有显示任何代码,所以上面只是一个合格的猜测。

答案 1 :(得分:1)

边界条件的值是什么,即数值坐标是框限制?我假设,由于系统的舍入误差,你的模拟会向某个方向运行。

如果我看图片,我会得到一个印象,我沿着-Z方向往下看,盒子的左下角是(0,0,0)。如果是这种情况,那么你的粒子模拟就不是保守的,即倾向于将粒子推向数字0,就像有一个力场一样。