0

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

我在盒子的一侧制作初始流体粒子(我将盒子作为边界体积),将它们塑造成盒子,并将它们的初始速度设为零。然后我启动主循环,viola,流体开始移动,这里出现了一个奇怪的现象。流体开始向各个方向扩散。

请看图片:

在此处输入图像描述 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

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

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

4

2 回答 2

1

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

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

于 2011-09-23T09:03:03.697 回答
1

边界条件的值是多少,即在哪个数值坐标处是框限制?我假设,由于系统的舍入误差,您的模拟运行到某个方向。

如果我看这张图片,我会觉得我正在沿着 -Z 方向向下看,并且框的左下角位于(0, 0, 0)处。如果是这种情况,那么您的粒子模拟并不保守,即倾向于将粒子推向数值 0,就像存在力场一样。

于 2011-09-23T09:41:37.737 回答