Mpm128中的一个问题

我在阅读mpm128.py的时候,有几个地方不是很懂,特意请教一下。我的参考材料是 http://mpm.graphics 中的 The material point method for simulating continuum materials.

在mpm128.py中
line 58: stress = (-dt * p_vol * 4 * inv_dx * inv_dx) * stress
line 85: new_C += 4 * inv_dx * weight * g_v.outer_product(dpos)
这两处对比参考资料中的 Eqn. 155 和 Eqn. 180 都多出 4 * inv_dx * inv_dx 这个常数。

并且对比参考资料,
line 62: grid_v[base + offset] += weight * (p_mass * v[p] + affine @ dpos)
line 85: new_C += 4 * inv_dx * weight * g_v.outer_product(dpos)
都是把 grad N(x) 换为了 N(x) dpos。

我猜测在这里计算 grad N 的时候,假设的 kernel 是 exp(-2x^2/dx^2), 这样就能解释以上的两个问题。但是这样就和最开始的 quadratic kernel 的假设相矛盾。所以想请教一下,这里的实现是不是换了一个kernel?如果换了,是什么考量呢,以及如何选择换的这个kernel?

1 个赞

其实没有换kernel。关于4 * inv_dx * inv_dx的出处:https://www.seas.upenn.edu/~cffjiang/research/apic/paper.pdf
section 5.3:

1 个赞

啊感谢!所以这里实现的是APIC的算法。不过我看蒋老师2016年那篇MPM tutorial 里的推导和15年APIC的的确不一样,区别就在这里。我再仔细看看原来的那篇文章。