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

您好,请问您这个图是用什么软件画的呀?

感觉这个代码的确对初学者来说不太友好,容易造成混乱:
(1)这里减去0.5其实与cell的中心点没有关系,只是求3×3网格节点左下角点的一个trick,每个粒子(particle)取的base节点使得粒子的fx(相对坐标)为0.5≤fx<1.5,粒子位于以3×3的中间节点为中心的单位正方形内,这样中间节点和两侧节点对应的w公式是固定的。
(2)背景网格求质量还是权重都是在网格节点上的,而不是在中心点上的,w的3元素公式对应的坐标分别是0,1,2也说明了这点。
(3)Xp<0.5的情况w计算是不对的,但是mpm88的边界三层节点是固定的,所以没有影响,因此粒子也不会跑到边界cell上去。

如果上述叙述没有问题的话:
(4)在用offset时,右侧和上侧是会越界的,也是bound是三层,粒子不会跑到最边界的cell中去。
(5)速度和质量都在网格节点上(不是cell的中点)的话,dx=1/(n_grid-1)才是合理的。

虽然这些不影响计算结果,可是给学习带来了很大困惑。

1 个赞

非常感谢你的解答,这里我还是有一个小问题:在mpm代码中, inv_dx =float(n_grid),也就是说黑色节点中间线段的数量是n_grid,那么黑色节点的数量应当是(n_grid+1,n_grid+1),但是在代码后续的定义中grid_v = ti.Vector.field(2, dtype=float, shape=(n_grid, n_grid)),这样最右一列和最上一列节点就不会被遍历到了吧?