【问题标题】:Fluid Simulation using Smooth Particle Hydrodynamics使用平滑粒子流体动力学进行流体模拟
【发布时间】:2011-09-23 08:48:36
【问题描述】:

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

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

请看图:

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

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

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

【问题讨论】:

  • 我建议你看看 boost.units,它会通过在编译时断言正确的 SI 单位来帮助你排除一些可能的计算错误。除此之外,我怀疑任何人都可以用你几乎没有提供的信息来分析问题。
  • 什么外力作用在粒子上?重力?因为在初始速度为 0 的情况下,您需要一些力来获得您所描述的运动。
  • 我的错在这里..它们一开始就相互重叠..所以压力使它们扩散..

标签: c++ simulation fluid


【解决方案1】:

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

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

【讨论】:

  • 谢谢janneb。我刚刚发现粒子重叠了……所以压力只会让它们散开。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2018-04-24
    • 1970-01-01
    • 2010-09-30
    • 2014-05-24
    • 1970-01-01
    相关资源
    最近更新 更多