我目前正在使用opengl上的CUDA编写一个SPH解决程序。
我有相当好的成绩和表现,但在我看来,由于某些原因,它们仍然显得很奇怪:
在某些实现中,我看到一个粒子对它自己的内力没有贡献(由于公式的关系,它的内力是0),但是它对它自己的密度有贡献。
我的模拟工作“非常好”(我不喜欢“非常好”,我想要它完美),在我的实现中,粒子不贡献它自己的密度。
此外,当我改变代码,使它确实贡献了它自己的密度,结果的模拟变得太不稳定(粒子爆炸)。
我向一位以物理为基础的动画讲师问了这个问题,他告诉我一个粒子不应该对它的密度起作用,但是没有给我关于这个断言的具体细节。
知道该怎么做吗?
发布于 2017-08-29 23:16:19
只要你用求和公式来计算密度,而不是连续方程,是的,你需要用自我贡献来计算。
原因如下:
SPH是一种插值方案,它允许您在粒子云上的任何空间位置内插特定值。任何位置都意味着你不局限于在粒子上,而是在太空中的任何地方。如果你这样做,显然你需要考虑所有的影响半径内的粒子。从这个角度来看,很容易看到,在粒子的位置插值一个量并不会影响它的贡献。
对于其他的量,如力,其中某些量的导数是近似的,你不需要应用自贡献(这将导致0/0的计算)。
要发现不稳定的根源:
https://stackoverflow.com/questions/44848185
复制相似问题