This section describes the elastoplastic model that is assumed, the spatial discretisation method and the compliant deformation constraint.
Elastoplastic solid
The solid is assumed to sustain geometrically large deformations. The St. Venant–Kirchhoff elasticity model is used in combination with the Drucker–Prager plasticity model [9]. The material strain is expressed by the Green–Lagrange strain tensor
$$\begin{aligned} \epsilon _{\alpha \beta }(\varvec{x}) = \frac{1}{2} \left( \nabla _{\alpha } u_\beta + \nabla _{\beta } u_\alpha + \nabla _{\alpha } u_\gamma \nabla _{\beta } u_\gamma \right) , \end{aligned}$$
(12)
where \(\varvec{u}(\varvec{x})\) is the displacement field mapping a reference coordinate \(\varvec{x}\) to displaced position \(\tilde{\varvec{x}}(\varvec{x}) = \varvec{x} + \varvec{u}(\varvec{x})\). Observe that the Green–Lagrange strain tensor transforms under large rotations and no co-rotation procedure is needed. It is convenient to use the Voigt notation for representing the strain tensor on vector format, \(\varvec{\epsilon } = \left[ \epsilon _{xx}, \epsilon _{yy}, \epsilon _{zz}, 2\epsilon _{yz}, 2\epsilon _{xz}, 2\epsilon _{xy} \right] ^{\mathrm{T}}\), and the second Piola Kirchoff stress tensor \(\varvec{\sigma }= \left[ \sigma _{xx}, \sigma _{yy}, \sigma _{zz}, \sigma _{yz}, \sigma _{xz}, \sigma _{xy} \right] ^{\mathrm{T}}\), related to the Cauchy stress by \(\varvec{\sigma }_{\textsc {C}}= J^{-1}\varvec{F}^{\mathrm{T}} \varvec{\sigma }\varvec{F}\) with displacement gradient \(\varvec{F} = \nabla \varvec{u}\) and \(J = \text {det}\varvec{F}\). The linear constitutive law reads \(\varvec{\sigma }= \varvec{C} \varvec{\epsilon }\), with stiffness matrix
$$\begin{aligned} \varvec{C} = \begin{bmatrix}\lambda + 2\mu&\quad \lambda&\quad \lambda&\quad 0&\quad 0&\quad 0\\ \lambda&\quad \lambda + 2\mu&\quad \lambda&\quad 0&\quad 0&\quad 0\\ \lambda&\quad \lambda&\quad \lambda + 2\mu&\quad 0&\quad 0&\quad 0\\ 0&\quad 0&\quad 0&\quad \mu&\quad 0&\quad 0\\ 0&\quad 0&\quad 0&\quad 0&\quad \mu&\quad 0\\ 0&\quad 0&\quad 0&\quad 0&\quad 0&\quad \mu \end{bmatrix}, \end{aligned}$$
(13)
where \(\lambda \) and \(\mu \) are the first and second Lamé parameters which are related to the Young’s modulus and Poisson’s ratio, E and \(\nu \) by \( \lambda = E\nu /\left( 1+\nu \right) \left( 1{-}2\nu \right) \) and \(\mu = E/2\left( 1+\nu \right) \). The corresponding strain energy density is
$$\begin{aligned} U(\varvec{x}) = \frac{1}{2} \varvec{\epsilon }^{\mathrm{T}} \varvec{C} \varvec{\epsilon } = \lambda ({{\mathrm{tr}}}\varvec{\epsilon })^2 + 2\mu {{\mathrm{tr}}}\left( \varvec{\epsilon }^2\right) . \end{aligned}$$
(14)
Plastic deformation occurs when the stress of a material reaches the critical yield strength, \(\varPhi (\varvec{\sigma }) = 0\). The choice of yield function, \(\varPhi (\varvec{\sigma })\), is based on the type of material being modelled. For simplicity, we restrict ourself to small plastic deformation and use the second Piola Kirchoff stress to evaluate the yield function and plastic increment. The strain tensor is additively decomposed into an elastic and a plastic component, \(\varvec{\epsilon } = \varvec{\epsilon }^{\text {e}} + \varvec{\epsilon }^{\text {p}}\), where the latter store the permanent plastic deformation. In ideal plasticity, the plastic deformation occurs instantly according to a flow rule \(\text {d}\varvec{\epsilon }^{\text {p}} = \text {d}\varvec{\lambda }^{\text {p}} \frac{\partial \varPsi }{\partial \varvec{\sigma }}\), where \(\varPsi (\varvec{\sigma })\) is the plastic potential and \(\varvec{\lambda }^{\text {p}}\) is the plastic multiplier. If \(\varPsi (\varvec{\sigma }) = \varPhi (\varvec{\sigma })\), the model is said to be associative and otherwise nonassociative. The plastic flow lasts as long as the plastic multiplier is positive \(\text {d}\varvec{\lambda }^{\text {p}}>0\), incrementally reducing the stress \(\text {d}\varvec{\sigma }^{\text {p}}\), until it reaches the elastic regime, \(\varPhi (\varvec{\sigma }) < 0\). This constitutes a nonlinear complementarity problem known as Karush–Kuhn–Tucker conditions
$$\begin{aligned} \varPhi \le 0,\;\; \text {d}\varvec{\lambda }^{\text {p}} \ge 0,\;\; \varPhi \ \text {d} \varvec{\lambda }^{\text {p}} = 0. \end{aligned}$$
(15)
The plastic multiplier is computed from the constitutive law, which in the plastic flow phase is \(\text {d}\varvec{\sigma }={\varvec{C}}^{\text {p}} \text {d}\varvec{\epsilon }\), where the elastoplastic tangent stiffness matrix is
$$\begin{aligned} {\varvec{C}}^{\text {p}} = \varvec{C} - \frac{\varvec{C}\frac{\partial \varPsi }{\partial \varvec{\sigma }} \left( \frac{\partial \varPhi }{\partial \varvec{\sigma }}\right) ^{\mathrm{T}}\varvec{C}}{\left( \frac{\partial \varPhi }{\partial \varvec{\sigma }}\right) ^{\mathrm{T}} \varvec{C} \frac{\partial \varPsi }{\partial \varvec{\sigma }}}. \end{aligned}$$
(16)
Predictor–corrector algorithms are conventionally used to integrate the plastic flow. In the absence of plastic hardening or softening, the plastic deformation, plastic multiplier, and total stress can be computed easily using the radial return algorithm [9] summarised in Algorithm 2.
The assumed plasticity model is a capped Drucker–Prager model, following Dolarevic [18], with a compaction variable \(\kappa \). The yield function \(\varPhi \left( \varvec{\sigma },\kappa \right) \) is \(C^1\) continuous consisting of the Drucker–Prager yield surface with a tension and a compression cap function according to
$$\begin{aligned} \varPhi \left( \varvec{\sigma },\kappa \right) = {\left\{ \begin{array}{ll} \varPhi _{\textsc { T}}\left( I_1,J_2 \right) &{} I_1 \ge I_1^{\textsc { T}} \\ \varPhi _{\textsc { DP}}\left( I_1,J_2 \right) &{} I_1^{\textsc { T}}> I_1 > I_1^{\textsc { C}}\left( \kappa \right) \\ \varPhi _{\textsc { C}}\left( I_1, J_2,\kappa \right) &{} I_1^{\textsc { C}}\left( \kappa \right) \ge I_1 \end{array}\right. }, \end{aligned}$$
(17)
where \(I_1 = {{\mathrm{tr}}}(\varvec{\sigma })\) is the first invariant of the stress tensor and \(J_2 = 0.5{{\mathrm{tr}}}(\bar{\varvec{\sigma }}^2)\) is the second invariant of the deviatoric stress tensor \(\bar{\varvec{\sigma }} = \varvec{\sigma }- \tfrac{1}{3} I_1 \varvec{1}\). The expressions for the tension cap \(\varPhi _{\textsc { T}}\left( I_1,J_2 \right) \) and compression cap \(\varPhi _{\textsc { C}}\left( I_1, J_2,\kappa \right) \) are given in “Appendix”, and the Drucker–Prager surface is defined as
$$\begin{aligned} \varPhi _{\textsc { DP}}\left( I_1,J_2 \right) = \sqrt{J_2 } + \frac{\eta }{3} I_1 - \xi c, \end{aligned}$$
(18)
where \(\phi \) is the internal friction angle and c the cohesion parameter such that \(\eta = 6\sin \phi /\sqrt{3}\left( 3-\sin \phi \right) \) and \(\xi = 6\cos \phi /\sqrt{3}\left( 3-\sin \phi \right) \).
The capped yield surface is illustrated in Fig. 2. The tension cap is fixed and is used to regularise the plastic flow behaviour in the corner region. The compression surface cap, on the other hand, is dynamic, and the maximum hydrostatic pressure, \(\kappa \), is used as the main variable.
The conventional Drucker–Prager model is a common model for the plastic deformation dynamics of soils, e.g. wet or dry sand. These materials are weak under tensile stress (\(I_1 > 0\)) and become stronger under compression (\(I_1 <0\)) where it may support large shear stresses (\(\sqrt{J_2} \ne 0\)). The capped Drucker–Prager model is a generalisation that includes plastic compaction that occurs in many soils. The compaction mechanism is the failure of individual grains whereby air or water is displaced from the soil. The compaction saturates at a maximum level, where all voids vanish. The compaction dynamics is modelled by a variable cap on compressive side of the Drucker–Prager yield surface, intersecting the hydrostatic axis at \({-}\kappa \). The chosen compaction hardening law is [18]
$$\begin{aligned} \kappa = \kappa _0 + \frac{1}{D}\ln \left( 1+\frac{{{\mathrm{tr}}}({\varvec{\epsilon }}^{\text {p}})}{W}\right) , \end{aligned}$$
(19)
where W is the maximum volume compaction, D is the hardening rate, and \(\kappa _0\) is the initial cap position where compressive failure first occurs. Observe that when the plastic volume compaction \({-}{{\mathrm{tr}}}({\varvec{\epsilon }}^{\text {p}})\) approaches W, the cap variable \(\kappa \) goes to infinity. In this regime, the material no longer compact plastically and behaves like the standard Drucker–Prager model. The elastoplastic material parameters are summarised in Table 1. Expressions for the detailed shape of the compression cap and the derivatives of the yield functions are found in “Appendix”.
Table 1 Elastoplastic model parameters
Meshfree method
The continuous solid of mass m and reference volume V is discretised into \({N}_{\text {p}}\) particles. The particles have mass \(m^i = m /{N}_{\text {p}}\), volume \(V^i = V /{N}_{\text {p}}\), position \(\varvec{q}^i\), and velocity \(\dot{\varvec{q}}^i\). The particle displacement is \(\varvec{u}^i = \varvec{q}^i - \varvec{x}^i\) with reference position \(\varvec{x}^i\) as illustrated in Fig. 1. A continuous and differentiable displacement field is approximated using the mls method [19, 33]. The displacement gradient field defines the strain tensor field in any point by Eq. (12). The particles can thus be understood as pseudo-particles having both particle and field properties.
The mls approximation of the displacement field is
$$\begin{aligned} u_\alpha (\varvec{x}) = \sum _j^{{N}_{\text {p}}} \varPsi _j(\varvec{x}) u^j_\alpha , \end{aligned}$$
(20)
where the shape function and moment matrix use a quadratic basis
$$\begin{aligned}&\varPsi _j(\varvec{x}) = p_\gamma (\varvec{x}) A_{\gamma \tau }^{-1} (\varvec{x}) p_\tau (\varvec{x}^j) W\left( \varvec{x} - \varvec{x}^j\right) \nonumber ,\\&A_{\gamma \tau } (\varvec{x}) = \sum _j^{{N}_{\text {p}}} W\left( \varvec{x} - \varvec{x}^j\right) p_\gamma ^j p_\tau ^j,\nonumber \\&\varvec{p} (\varvec{x}) = \left[ 1,\ x,\ y,\ z,\ yz,\ xz,\ xy,\ x^2,\ y^2,\ z^2 \right] ^{\mathrm{T}}, \end{aligned}$$
(21)
and weight function \( W(\varvec{x}) = \frac{315}{64\pi l^9} (l^2 - \varvec{x}^{\mathrm{T}}\varvec{x} )^3\) if \(|\varvec{x}|\) is smaller than the influence radius l, and otherwise zero. The base function notation \(\varvec{p}^j = \varvec{p} (\varvec{x}^j)\) is used to simplify the expressions. The gradient of the interpolated displacement field is
$$\begin{aligned} F_{\alpha \beta }(\varvec{x})&\equiv \nabla _\beta u_\alpha (\varvec{x}) = \sum \limits _j^{{N}_{\text {p}}} \nabla _\beta \varPsi _j(\varvec{x}) u^j_\alpha , \end{aligned}$$
(22)
$$\begin{aligned} \nabla _\beta \varPsi _j&= \nabla _{\beta }p_{\gamma } {A}_{\gamma \tau }^{-1} p^j_{\tau }W^j + p_{\gamma }\nabla _\beta {A}_{\gamma \tau }^{-1} p^j_{\tau }W^{j}\nonumber \\&\quad + p_\gamma {A}_{\gamma \tau }^{-1} p^j_{\tau }\nabla _{\beta }W^j, \end{aligned}$$
(23)
with \(W^{j} = W (\varvec{x} - \varvec{x}^j)\), \(\nabla _{\beta }W^{j} = \nabla _{x_\beta }W(\varvec{x} - \varvec{x}^j)\). The strain tensor field, \(\varvec{\epsilon }(\varvec{x})\), can thus be approximated by applying Eqs. (12)–(22). Observe that \(u^j_\alpha \) depends on current particle positions \(\varvec{q}\) while \(\nabla _\beta \varPsi _j(\varvec{x})\) depends only on the reference positions.
Compliant deformation constraint
The strain energy density, \(U(\varvec{x} ) = \tfrac{1}{2}\varvec{\epsilon }^{\mathrm{T}} \varvec{C} \varvec{\epsilon }\), is transformed into a compliant constraint via a Legendre transform as presented in Sect.2. For each particle i, a deformation constraint is imposed
$$\begin{aligned} 0 = \varvec{g}^i \equiv \begin{bmatrix} \epsilon ^i_{xx}\\ \epsilon ^i_{yy}\\ \epsilon ^i_{zz}\\ \epsilon ^i_{yz} + \epsilon ^i_{zy}\\ \epsilon ^i_{zx} + \epsilon ^i_{xz}\\ \epsilon ^i_{xy} + \epsilon ^i_{yx} \end{bmatrix}, \end{aligned}$$
(24)
with particle strain components \(\epsilon ^i_{\alpha \beta } = \frac{1}{2} (F^i_{\alpha \beta } + F^i_{\beta \alpha } + F^i_{\gamma \alpha } F^i_{\gamma \beta } )\) based on the displacement gradient \(F^i_{\alpha \beta }(\varvec{q}) = \nabla _\beta u_\alpha (\varvec{x}^i,\varvec{q})\), computed by evaluating the field at \(\varvec{x} = \varvec{x}^i\). Note that the particle strain depends on the displacement of all particles within the domain of influence with radius l. The compliance parameter becomes \(\varvec{\varepsilon }^i= (V^i\varvec{C}^i)^{-1}\), which depends on the material parameters, through Eq. (13), and on the spatial resolution through the particle volume factor \(V^i\) that appears when integrating from energy density to particle energy. As expected, softer materials will have larger compliance parameter and thus deform more easily. The Jacobian of the deformation constraint, \(\varvec{G} = \partial \varvec{g} /\partial \varvec{q}\), can be expanded through the chain rule into
$$\begin{aligned} G^{i}_{\alpha \beta }(\varvec{q}) = \frac{\partial g^{i}_{\alpha }}{\partial \epsilon ^i_{\gamma \eta }} \frac{\partial \epsilon ^i_{\gamma \eta }}{\partial F^i_{\tau \kappa }} \frac{\partial F^i_{\tau \kappa }}{\partial q_\beta ^j}. \end{aligned}$$
(25)
The Jacobian for constraint i has block structure \(\varvec{G}^i = [\varvec{G}^{i1},\ldots , \varvec{G}^{ij}, \ldots , \varvec{G}^{i{N}_{\text {p}}}]\), where each block element \(\varvec{G}^{ij}\) has dimension \(6\times 3\). For notational convenience, the constraint vector is split in two parts, one for the diagonal terms of the strain tensor, \({\varvec{g}}_{\text {d}}^i = [\epsilon ^i_{xx},\epsilon ^i_{yy},\epsilon ^i_{zz}]^{\mathrm{T}}\) and one for the off-diagonal terms \({\varvec{g}}_{\text {od}}^i = [\epsilon ^i_{yz} + \epsilon ^i_{zy},\ \epsilon ^i_{zx} + \epsilon ^i_{xz},\ \epsilon ^i_{xy} + \epsilon ^i_{yx}]^{\mathrm{T}}\). The Jacobian blocks \(\varvec{G}^{ij}\) are split correspondingly into two \(3 \times 3\) Jacobian blocks, \(\varvec{G}^{ij} = [{{\varvec{G}}_{\text {d}}^{ij}}^{\mathrm{T}},\ {{\varvec{G}}_{\text {od}}^{ij}}^{\mathrm{T}}]^{\mathrm{T}}\). After some lengthy algebra, the following expressions for the Jacobians are found
$$\begin{aligned} {\varvec{G}}_{\text {d}}^{ij}&= \begin{bmatrix} \left( 1 + F^i_{xx}\right) \varLambda ^{ij}_x&\quad F^i_{yx} \varLambda ^{ij}_x&\quad F^i_{zx} \varLambda ^{ij}_{x}\\ F^i_{xy} \varLambda ^{ij}_y&\quad \left( 1 + F^i_{yy}\right) \varLambda ^{ij}_{y}&\quad F^i_{zy} \varLambda ^{ij}_{y}\\ F^i_{xz} \varLambda ^{ij}_z&\quad F^i_{yz} \varLambda ^{ij}_z&\quad \left( 1 + F^i_{zz}\right) \varLambda ^{ij}_z \end{bmatrix},\end{aligned}$$
(26)
$$\begin{aligned} {\varvec{G}}_{\text {od}}^{ij}&= \begin{bmatrix} F^i_{xy} \varLambda ^{ij}_z + F^i_{xz} \varLambda ^{ij}_y \;&\quad \left( 1 + F^i_{yy}\right) \varLambda ^{ij}_z+ F^i_{yz} \varLambda ^{ij}_y \;&\quad F^i_{zy} \varLambda ^{ij}_z+\left( 1 + F^i_{zz}\right) \varLambda ^{ij}_y\\ F^i_{xz} \varLambda ^{ij}_x + \left( 1 + F^i_{xx}\right) \varLambda ^{ij}_z\;&\quad F^i_{yz} \varLambda ^{ij}_x + F^i_{yx} \varLambda ^{ij}_z \;&\quad \left( 1 + F^i_{zz}\right) \varLambda ^j_x + F^i_{zx}\varLambda ^j_z\\ \left( 1 + F^i_{xx}\right) \varLambda ^{ij}_y + F^i_{xy} \varLambda ^{ij}_x \;&\quad F^i_{yx} \varLambda ^{ij}_y+\left( 1 + F^i_{yy}\right) \varLambda ^{ij}_x \;&\quad F^i_{zx} \varLambda ^{ij}_y + F^i_{zy} \varLambda ^{ij}_x \end{bmatrix}, \end{aligned}$$
(27)
where \(\varLambda ^{ij}_{\beta } = \nabla _\beta \varPsi _j(\varvec{x}^i)\). Observe that only \(F^i_{\alpha \beta }(\varvec{q})\) depends on the current particle positions while \(\varLambda ^{ij}_{\beta }\) depends only on the reference positions and may thus be pre-computed. In the derivation of the Jacobians, the following partial derivatives are used
$$\begin{aligned} \frac{\partial \epsilon ^i_{\gamma \eta }}{\partial F^i_{\tau \kappa }}= & {} \tfrac{1}{2} \left( \delta _{\gamma \tau }^{\eta \kappa } + \delta _{\eta \tau }^{\gamma \kappa } + \delta _{\kappa \gamma } F^i_{\tau \eta } + \delta _{\eta \kappa }F^i_{\tau \gamma }\right) ,\\ \frac{\partial F^i_{\tau \kappa }}{\partial q_\beta ^j}= & {} \delta _{\tau \beta } \nabla _\kappa \varPsi _j\left( \varvec{x}^i\right) , \end{aligned}$$
with Kronecker notation \(\delta _{\gamma \tau }^{\eta \kappa }\equiv \delta _{\gamma \tau }\delta _{\eta \kappa }\).
Stabilisation constraint
The mls approximation has the deficiency of underestimating the strain for deformation modes on short length scales. This makes the method unstable, manifested by spurious short wavelength deformation modes. Following [20, 34], we eliminate this instability and associated discretisation error by adding the following deformation energy
$$\begin{aligned} \tilde{U}^i= \frac{\alpha l^2 V^i}{E}\left[ \left( \varvec{\nabla } \cdot \varvec{\sigma }\right) _{\varvec{x} = \varvec{x}^i} \right] ^2, \end{aligned}$$
(28)
where \(\alpha \) is a dimensionless stabilisation parameter and \(\varvec{f}^i\) are the forces on the pseudo-particle other than elastic ones. The corresponding stabilisation constraint becomes \(\tilde{\varvec{g}}^{i} = (l/E)\left[ \left( \varvec{\nabla } \cdot \varvec{\sigma }\right) _{\varvec{x} = \varvec{x}^i} \right] \) with regularisation \(\tilde{\varepsilon }^i = (\alpha V^i E)^{-1}\) and after a suitable normalisation. The stress divergence is computed using a mls approximation of the stress tensor field \(\varvec{\sigma }(\varvec{x}) = \sum _j^{{N}_{\text {p}}} \varPsi ^j(\varvec{x}) \varvec{C} (\varvec{\epsilon }^j - \varvec{\epsilon }_\text {p}^j)\). The stabilisation constraint becomes
$$\begin{aligned} \tilde{g}^{i}_\alpha = \frac{l}{E}\left[ \sum _j^{{N}_{\text {p}}} \left( \hat{D}_{\alpha \beta }\varPsi ^j\right) _{\varvec{x} = \varvec{x}^i} C_{\beta \tau } \left( \epsilon _\tau ^j - \epsilon _{\text {p}\tau }^j\right) \right] , \end{aligned}$$
(29)
where the stress and strain are represented using Voigt notation such that the divergence operator is
$$\begin{aligned} \hat{\varvec{D}} = \begin{bmatrix} \frac{\partial }{\partial x}&\quad 0&\quad 0&\quad 0&\quad \frac{\partial }{\partial z}&\quad \frac{\partial }{\partial y}\\ 0&\quad \frac{\partial }{\partial y}&\quad 0&\quad \frac{\partial }{\partial z}&\quad 0&\quad \frac{\partial }{\partial x}\\ 0&\quad 0&\quad \frac{\partial }{\partial z}&\quad \frac{\partial }{\partial y}&\quad \frac{\partial }{\partial x}&\quad 0 \end{bmatrix}. \end{aligned}$$
(30)
The Jacobian of the stabilisation constraint becomes
$$\begin{aligned} \tilde{G}^{ik}_{\alpha \sigma } \equiv \frac{\partial \tilde{g}^{i}_\alpha }{\partial q^k_\sigma } = \frac{l}{E} \sum _j^{{N}_{\text {p}}} \left( \hat{D}_{\alpha \beta }\varPsi ^j\right) _{\varvec{x} = \varvec{x}^i} C_{\beta \tau } G^{jk}_{\tau \sigma }, \end{aligned}$$
(31)
where \(G^{jk}_{\tau \sigma } = \partial \epsilon _\tau ^j/\partial q^k_\sigma \) is already derived for the compliant constraint.
Contacts
Contacts between elastoplastic solids and rigid or static bodies are modelled by assigning a rigid spherical shape of radius l to each pseudo-particle and imposing the Signorini–Coulomb law for unilateral dry frictional contacts [5], as described in Sect. 2.3 and in greater detail in [8]. A contact situation between a solid and three rigid bodies is illustrated in Fig. 3. The contact overlap and normal are indicated as well as the contact point, which is defined at half distance between the overlapping geometries. Contacts between neighbouring pseudo-particles are ignored. Using spherical shapes to approximate the contact boundary of the solid has obvious drawbacks, e.g. perfectly smooth surfaces cannot be represented. This should be considered as an intermediate solution only, practical to implement in prototype code. More sophisticated representations of boundaries and contact detection algorithms for meshfree methods exist [35, 36] and should replace the use of spherical shapes.