-
Notifications
You must be signed in to change notification settings - Fork 277
Description
Current implementation of predict in mpm bossak scheme yields incorrect predicted velocity field in the background grid.
Consider the following example:
A solid block of steel (2D) with prescribed velocity to the material point as follow:
MP_VELOCITY_X = MP_COORDINATE X
MP_VELOCITY_Y = 0.0
gravity is not considered, therefore MP_ACCELERATION is zero

Particle to grid mapping is performed, yielding the following velocity field (v t) at the nodes

Finally predict is called, calculating the first guess of the current velocity field (v t+1) for the nonlinear iteration. However, as seen below, v t+1 = - (v t) instead of the expected value v t+1 = v t
Below is a snippet of current implementation (04.12.2025). For every DOF that is not fixed, the predicted displacement is set to zero (u t+1 = 0.0). When update is called, this leads to:
v t+1 = c 1 * du - c 4 * v t - c 5 * a t
v t+1 = c 1 * 0.0 - c 4 * v t - c 5 * 0.0
with newmark scheme, c 1 = 2/dt and c 4 = 1.0
v t+1 = 2/dt * 0.0 - 1.0 * v t
v t+1 = -v t
which is the result obtained in the picture above
Changing line 232 into:
u t+1 = dt * v t
and doing the update:
v t+1 = 2/dt * dt * v t - 1.0 * v t
v t+1 = 2v t - v t
v t+1 = v t
Should give a more reasonable prediction result than the current implementation.
Note that the behavior explained above applies not only in the first time step, but also all subsequent time step. It also indirectly affect acceleration update in a more general cases.