MPM Explicit
Update stress last refers to incrementing the stresses at the material points after calculating the internal force and consequently after solving the balance of momentum.
at each time step
$\Delta t$ from$t$ to$t + \Delta t$ :
-
Material points carry all state variables (mass/density, velocity, strain, stress, other material parameters corresponding to the adopted constitutive relation). The state variables are initialised at every material point at the start of the time step.
-
Mass of each material point is computed based on its density and initial volume. The initial volume is computed based on the number of material points in cell or can be provided as an input argument. Although the density of material points are updated, the mass is conserved.
$$ m_p = \rho V_p $$
-
The shape functions
$N_i (x_p^t)$ and the gradient of the shape functions$B_i (x_p^t)$ are computed for each material point$p$ , based on the cell in which they are located. -
The nodal mass and momentum are calculated based on the mass and velocity of all the material points in the cell and are mapped to the nodes using the shape functions.
-
Compute nodal mass
$$ m_i^t = \sum\limits_{p=1}^{n_P} N_i(\textbf{x}_p^t) m_p $$
-
Compute nodal momentum
$$ (m \textbf{v})i^{t} = \sum\limits{p=1}^{n_P} N_i(\textbf{x}_p^t) m_p \textbf{v}_p^{t} $$
-
-
The nodal velocities at each active node
$i$ is computed based on the momentum and the nodal mass. An active node is defined as nodes forming a cell that contains at least one material point.$$ \textbf{v}_i^{t} = \frac{(m\textbf{v})_i^{t}}{m_i^{t}} $$
-
Compute the nodal body force from the material points:
- Body force: $$ \textbf{b}i^{t} = G \sum\limits{p=1}^{n_P} N_i(\textbf{x}_p^t) m_p $$
-
Compute the nodal external and internal force
-
External force: $$ (\textbf{f}_i)^{ext,t} = \textbf{b}_i^{t} + \textbf{t}_i^{t} $$
-
Internal force: $$ (\textbf{f}i)^{int,t} = \sum\limits{p=1}^{n_P} V_p^t B_i(\textbf{x}_p^t) \boldsymbol{\sigma}_i^{t} $$
-
-
The nodal acceleration and velocities of the next step $ t + \Delta t$ are computed on all active nodes:
-
Nodal acceleration: $$ \textbf{a}_i^{t+\Delta t} = \frac{\textbf{f}_i^{t}}{m_i^t}$$
-
Nodal velocity: $$ \textbf{v}_i^{t+\Delta t} = \textbf{v}_i^{t} + \textbf{a}_i^{t+\Delta t} * \Delta t$$
-
-
Apply any velocity constraints (and acceleration constraints - when velocity is set, acceleration is set to zero) at the nodes.
-
Update the position of the material points based on the nodal velocity.
-
Material point velocity: $$ \textbf{v}p^{t+\Delta t} = \sum\limits{i=1}^{n_n} N_i(\textbf{x}_p^t) \textbf{v}_i^{t+\Delta t} $$
-
Material point position: $$ \textbf{x}_p^{t+\Delta t} = \textbf{x}_p^t + \textbf{v}_p^{t+\Delta t} * \Delta t$$
-
-
The strain at each material point is computed by mapping the strain rate from the nodes: $$ \boldsymbol{\varepsilon}p^t = \sum\limits{p=1}^{n_P} B_i(\textbf{x}_p^t) \textbf{v}_i^t $$
-
The stress at each material point is updated using
$\Delta\sigma_p^t$ based on the constitutive model: $$ \boldsymbol{\sigma}_p^t = \boldsymbol{\sigma}_p^{t-\Delta t} + \Delta \boldsymbol{\sigma}_p^t $$$$ \Delta\boldsymbol{\sigma}_p^t= \mathbf{D} : \Delta \boldsymbol{\varepsilon}_p^t $$
-
Locate all material points in the mesh and assign a new cell to the material point, if the material points have crossed cells.
-
At the end of every time step, all the variables on the grid nodes are initialised to zero. The material points carry all the information about the solution, and the computational grid is re-initialised for the next step.