1

在进行 SPH 时,Kelagar 的论文建议使用特定的内核来实现粒子之间的压力感应力。当半径在内核半径内时,它推荐的内核如下:

(15/(pi*h^9)) * (h - r)^3

其中 h 是内核半径,r 是我们对计算函数值感兴趣的半径。

然后论文指出,这个函数的梯度是

(-45/(pi*h^9))*((r_vec)/r)*(h-r)^2

其中 r_vec 现在是从内核中心到我们感兴趣的点的向量。随着 r_vec 的长度从正方向变为 0,论文指出这个梯度接近:

(-45/(pi*h^6))

但这是一个标量,而不是一个向量。为了在我们感兴趣的两点之间产生排斥,需要有一个排斥的方向。

当两个粒子彼此相邻时,我们应该使用哪个方向?

4

1 回答 1

0

我假设第一个表达式是潜在的。负梯度(关于 r 的导数)就是力。这个梯度是一个向量,总是指向或远离中心。对于第二个表达式,这似乎是正确的。

r_vec 是,根据你所说的,一个从原点指向距离为 r 的点的向量。(r_vec/r) 是一个单位向量来指定方向。这适用于除原点本身之外的每个点,可以将其声明为未定义或声明为零。零是 (r_vec/r) 在所有“附近”点上的平均值。这意味着零力。

通常在具有成对力的粒子模拟中,我们忽略了一个粒子对其自身的力,以及两个粒子在同一确切位置的力。如果两个粒子非常接近,并且你有一个类似于 1/r、1/(r^2) 或类似的力定律呢?没有人想要除以零故障。通常有一个小半径,低于该半径的电位与该半径边界处的给定电位公式相匹配。太靠近的粒子力为零,这样模拟就不会崩溃。当它在边界外非常强大时,突然停止在边界内的力量似乎是不自然的。但我们努力避免这种情况。继续计算此类发生率,如果太多,则模拟已变差。也许需要更小的时间步长。

幸运的是,您没有 1/r 类型的力,但您仍然拥有方向可以疯狂摆动的讨厌的 r_vec/r。在某个微小半径以下使力为零的相同技术将有所帮助。

但是第三个表达让我很困扰。如果它是 r=0 时的力,那么从第二个表达式中的力定律开始,我不确定第三个表达式是如何产生的。它看起来是标量的问题,而如果它应该是力,则可以通过理解它是力向量的径向分量来解决期望向量。只需将表达式乘以 (r_vec/r),即熟悉的单位幅度向量。OTOH,它没有明确的方向,所以这是胡说八道。

更好的整体解决方案:从一个新的势函数开始,它平滑地趋于平稳并且在 r=0 处保持平坦,例如 exp(-r^2) 或 1/(1+r^2)。给定的潜在峰值急剧上升。你想要的东西更像不是在某个小区域内声明力为零,而是在 r=0 时力自然为零。在某个小半径之外找到一个近似于给定一口井的原点电位。

于 2013-04-24T08:19:31.883 回答