我目前正在https://github.com/Mathiasb17/sph_opengl上使用CUDA编写SPH解算器。
我有很好的成绩和表现,但在我看来,出于某种原因,它们看起来仍然很奇怪:
在某些实现中,我看到粒子对其自身的内力(由于公式而无论如何都是0)都没有贡献,但是确实有助于它自己的密度
我的模拟工作非常好" (我不喜欢"非常好",我希望它完美)并且在我的实现中,粒子不贡献自己的密度。
此外,当我更改代码以使其确实有助于其自身的密度时,所得到的模拟变得太不稳定(粒子爆炸)。
我问了一个基于物理的动画讲师,他告诉我一个粒子不应该对它的密度做出贡献,但没有给我关于这个断言的具体细节。
知道应该怎么做?
答案 0 :(得分:1)
只要您使用求和公式而不是连续性公式计算密度,是的,您需要自我贡献。
原因如下:
SPH是一种插值方案,允许您在粒子云上的空间中的任何位置插入特定值。任何位置都意味着您不限于在粒子上进行评估,而是在空间的任何位置进行评估。如果这样做,显然你需要考虑影响半径内的所有粒子。从这个角度来看,很容易看出在粒子位置插入数量不会影响其贡献。
对于其他数量,如力,某些数量的导数近似,您不需要应用自贡献(这将导致0/0的评估)。
发现不稳定的根源: