请问关于mpm88的fx和base到底代表什么?

各位好
关于mpm88里面,总是先有这么一行
base=int(x[p]/dx-0.5)
fx=x[p]/dx-base
请教一下这两个变量到底是什么含义啊?

为什么不直接用x而要非得减去0.5呢?

而且后面的形函数w,为什么要带入X=fx, fx-1, fx-2啊?

后面又为什么非得用w[0]*w[1]?

您好,首先非常欢迎您加入Taichi社区。

关于您的问题,这涉及到MPM的具体数学公式。

  1. 关于base和fx的求解,可以参考here 的公式121.
  2. 其次形函数w的使用,可以参考上面文档的Page 33.

您好
感谢您的回答

我认真读过您所发的 蒋老师的 MPM course
然而
我所疑问的是
为什么该插值在代码中是这样处理的。关于这一点,我思考了很多天都没有理解。
尤其是base 和fx的具体几何含义。如果可以,可否用图片标注fx和base的具体所指?

以及C++注释版本中,提到把fx fx-1 fx-2分别带入公式的x中,我实在不能理解为什么这样做。

祝好

嗯嗯,这是一个很好的问题,确实很容易让你迷惑。
首先,减去0.5的原因是我们一般认为粒子在网格的中间。胡老师在Games 201, Lec 7, page 16,讲过为什么减去0.5,可以在B站具体听一下讲解here

MPM中P2G阶段,需要将particle上的信息按照权重 w ,分散到周围的网格点上,这个例子里面就是 3\times3 的网格大小。
base 就是 这个网格的左下角网格点的位置。fx就是particle 到base网格点的差值。

我们可以以 p=[1.2,0.6], dx = 1.0 为例,研究一下权重 w 的求解。

我们这个例子中使用的是Quadratic kernels

那么 px 轴上,根据距离差可以算出和对应网格顶点的权重
base的影响(权重 w )应该是 N(1.2)
B的影响(权重 w )应该是 N(0.2)
C的影响(权重 w )应该是 N(-0.8)

你现在应该都还是很清楚的,但是你会看到这个公式和代码中的公式是不一样的。这就要涉及到一些数学了。我们将核函数 N 根据定义域分为三个部分 $[-1.5, -0.5], [-0.5, 0.5], [0.5,1.5]。这三个部分都可以用 [0.5,1.5]$的三个函数来表示。依然用图片给你展示一下:

  1. N(x) \in [0.5,1.5] = f(x) \in [0.5,1.5]

  2. N(x) \in [-0.5,0.5] = g(x) \in [0.5,1.5]

  3. N(x) \in [-1.5,-0.5] = h(x) \in [0.5,1.5]

综上,你可以看出来
base的影响(权重 w )应该是 N(1.2), 也就是 f(1.2)
B的影响(权重 w )应该是 N(0.2), 也就是 g(1.2)
C的影响(权重 w )应该是 N(-0.8) , 也就是 h(1.2)
其中 1.2 = fx.x
那么 mpm88.py的Line 37

w = [0.5 * (1.5 - fx)**2, 0.75 - (fx - 1)**2, 0.5 * (fx - 0.5)**2]

中的 w[0].x = f(1.2) = N(1.2), w[1].x = g(1.2) = N(0.2) , w[2].x = h(1.2) = N(-0.8)

Y轴同理 w[0].y = f(0.6)=N(0.6), w[1].y = g(1.2)=N(-0.4), w[2].y = h(1.2) = N(-1.4)

3 Likes