Chapter 8

Theory and Implementation of the Finite Element Method

##### 8.5 The finite element method for viscoplasticity

We next extend the finite element method to treat history and rate dependent materials.  The main issue to resolve is how to integrate the history dependent plastic constitutive equations with respect to time.

As an example we will first develop a finite element method for a small strain rate dependent plastic constitutive law.

8.5.1 Summary of governing equations

We therefore pose the following boundary value problem.  Given:

1.      The shape of the solid in its unloaded condition $R$

2.      A body force distribution $b$ (t)  acting on the solid (Note that in this section we will use b to denote force per unit volume rather than force per unit mass, to avoid having to write out the mass density all the time)

3.      Boundary conditions, specifying displacements ${u}^{*}\left(x,t\right)$ on a portion ${\partial }_{1}R$ or tractions ${t}^{*}\left(t\right)$ on a portion ${\partial }_{2}R$ of the boundary of R;

4.      The material constants Y n, m${\stackrel{˙}{\epsilon }}_{0}$, $Q$ and ${\epsilon }_{0}$ that characterize the viscoplastic creep law described in Section 3.7.3.

Calculate displacements, strains and stresses ${u}_{i},{\epsilon }_{ij},{\sigma }_{ij}$ satisfying the following equations

1.      The strain-displacement equation ${\epsilon }_{ij}=\frac{1}{2}\left(\partial {u}_{i}/\partial {x}_{j}+\partial {u}_{j}/\partial {x}_{i}\right)$

2.      The equation of static equilibrium for stresses $\partial {\sigma }_{ij}/\partial {x}_{i}+{b}_{j}=0$

3.      The boundary conditions on displacement and stress

${u}_{i}={u}_{i}^{*}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{on}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\partial }_{1}R\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\sigma }_{ij}{n}_{i}={t}_{j}^{*}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{on}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\partial }_{2}R$

4.      The constitutive equations for small-strain, power-law rate dependent plasticity, with

${\stackrel{˙}{\epsilon }}_{ij}={\stackrel{˙}{\epsilon }}_{ij}^{e}+{\stackrel{˙}{\epsilon }}_{ij}^{p}$

$\begin{array}{l}{\stackrel{˙}{\epsilon }}_{ij}^{e}=\frac{1+\nu }{E}\left({\stackrel{˙}{\sigma }}_{ij}-\frac{\nu }{1+\nu }{\stackrel{˙}{\sigma }}_{kk}{\delta }_{ij}\right)\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\stackrel{˙}{\epsilon }}_{ij}^{p}={\stackrel{˙}{\epsilon }}_{0}\mathrm{exp}\left(-Q/kT\right){\left(\frac{{\sigma }_{e}}{{\sigma }_{0}}\right)}^{m}\frac{3}{2}\frac{{S}_{ij}}{{\sigma }_{e}}\\ {\sigma }_{0}=Y{\left(1+\frac{{\epsilon }_{e}}{{\epsilon }_{0}}\right)}^{1/n}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{S}_{ij}={\sigma }_{ij}-{\sigma }_{kk}{\delta }_{ij}/3\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\sigma }_{e}=\sqrt{\frac{3}{2}{S}_{ij}{S}_{ij}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\stackrel{˙}{\epsilon }}_{e}=\sqrt{\frac{2}{3}{\stackrel{˙}{\epsilon }}_{ij}^{p}{\stackrel{˙}{\epsilon }}_{ij}^{p}}\end{array}$

Note that we must now solve a history dependent problem.  We need to specify the time variation of the applied load and boundary conditions, and our objective is to calculate the displacements, strains, and stresses as functions of time.

8.5.2 Governing equations in terms of the Virtual Work Principle

As in all FEM analysis, the stress equilibrium equation is replaced by the equivalent statement of the principle of  virtual work.  Thus, ${u}_{i},{\epsilon }_{ij},{\sigma }_{ij}$ are determined as follows.

1.      First, calculate a (time dependent) displacement field that satisfies

$\begin{array}{l}\underset{R}{\int }{\sigma }_{ij}\left[{u}_{k}\left(t\right)\right]\frac{\partial \delta {v}_{i}}{\partial {x}_{j}}dV-\underset{R}{\int }{b}_{i}\delta {v}_{i}dV-\underset{{\partial }_{2}R}{\int }{t}_{i}^{*}\delta {v}_{i}dA=0\\ {u}_{i}={u}_{i}^{*}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{on}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\partial }_{1}R\end{array}$

for all virtual velocity fields $\delta {v}_{i}$ that satisfy $\delta {v}_{i}=0$ on ${\partial }_{1}R$.   Here, the notation ${\sigma }_{ij}\left[{u}_{k}\right]$ is used to show that the stress in the solid depends on the displacement field (through the strain-displacement relation and the constitutive equations).

2.      Compute the strains from the definition ${\epsilon }_{ij}=\frac{1}{2}\left(\partial {u}_{i}/\partial {x}_{j}+\partial {u}_{j}/\partial {x}_{i}\right)$

3.      Compute the stresses from the constitutive equations

The stress will automatically satisfy the equation of equilibrium, so all the field equations and boundary conditions will be satisfied.

The procedure to solve the equations is conceptually identical to the hypoelastic solution found in Section 8.3.1 and 8.3.2.  The only complication is that the constitutive equation is time dependent, so the solution must be obtained as a function of time.

8.5.3 Finite element equations

The finite solution follows almost exactly the same procedure as before.  We first discretize the displacement field, by choosing to calculate the displacement field at a set of n nodes.  We will denote the coordinates of these special points by ${x}_{i}^{a}$, where the superscript a ranges from 1 to n.  The unknown displacement vector at each nodal point will be denoted by ${u}_{i}^{a}$.

Now, however, the displacements vary as a function of time $–$ we thus need to solve for ${u}_{i}^{a}\left(t\right)$.  We will do this by applying the load in a series of steps, and computing the change in displacement during each step.  We assume that the displacements ${u}_{i}^{a}\left(t\right)$ are known at the end of a time step.  We wish to compute ${u}_{i}^{a}\left(t+\Delta t\right)$ at the end of the next time step.  It is convenient to write

${u}_{i}^{a}\left(t+\Delta t\right)={u}_{i}^{a}\left(t\right)+\Delta {u}_{i}^{a}$

and solve for the displacement increment $\Delta {u}_{i}^{a}$ at each time step.  The finite element solutions are then set up as follows

1.      The displacement increment and the virtual displacement are interpolated in the usual way.

$\Delta {u}_{i}\left(x\right)=\sum _{a=1}^{n}{N}^{a}\left(x\right)\Delta {u}_{i}^{a}$      $\delta {v}_{i}\left(x\right)=\sum _{a=1}^{n}{N}^{a}\left(x\right)\delta {v}_{i}^{a}$

Here, x denotes the coordinates of an arbitrary point in the solid.

2.      The increment in strain during the current load step follows as

$\Delta {\epsilon }_{ij}=\frac{1}{2}\left(\frac{\partial \Delta {u}_{i}}{\partial {x}_{j}}+\frac{\partial \Delta {u}_{j}}{\partial {x}_{i}}\right)=\frac{1}{2}\sum _{a=1}^{n}\left(\frac{\partial {N}^{a}}{\partial {x}_{j}}\Delta {u}_{i}^{a}+\frac{\partial {N}^{a}}{\partial {x}_{i}}\Delta {u}_{j}^{a}\right)$

We now need to find a way to compute the stress field caused by this change in strain during time interval $\Delta t$.  This issue will be addressed shortly.  For now, we just assume that we can do this somehow using the constitutive law (e.g. assign it to a grad student) and write this functional relationship as

${\sigma }_{ij}={\sigma }_{ij}\left[\Delta {\epsilon }_{kl}\left(\Delta {u}_{i}^{a}\right),\Delta t\right]$

where the time interval $\Delta t$ appears in the equation because the material is rate dependent.

3.      Substituting into the principle of virtual work, we see that

$\left\{\underset{R}{\int }{\sigma }_{ij}\left[\Delta {\epsilon }_{kl}\left(\Delta {u}_{i}^{a}\right),\Delta t\right]\frac{\partial {N}^{a}}{\partial {x}_{j}}dV-\underset{R}{\int }{b}_{i}\left(t+\Delta t\right){N}^{a}dV-\underset{{\partial }_{2}R}{\int }{t}_{i}^{*}\left(t+\Delta t\right){N}^{a}dA\right\}\delta {v}_{i}^{a}=0$

and since this must hold for all $\delta {v}_{i}^{a}$ we must ensure that

This is now a routine set of nonlinear equations to be solved for $\Delta {u}_{i}^{a}$.

8.5.4 Integrating the plastic stress-strain law

The crux of FEM for small-strain plasticity problems is to integrate the plastic stress-strain equations to obtain the stress caused by an increment in total strain $\Delta {\epsilon }_{ij}$ applied to the specimen during a time interval $\Delta t$.

There are various ways to do this $–$ here we outline a straightforward and robust technique. The problem we must solve can be posed as follows:

Given:    Values of stress ${\sigma }_{ij}^{\left(n\right)}$, accumulated plastic strain ${\epsilon }_{e}^{\left(n\right)}$ at time ${t}_{n}$

The total strain increment $\Delta {\epsilon }_{ij}$ and time increment $\Delta t$

Compute:  Values of stress ${\sigma }_{ij}^{\left(n+1\right)}$, accumulated plastic strain ${\epsilon }_{e}^{\left(n+1\right)}$ at time ${t}_{n+1}={t}_{n}+\Delta t$

The following procedure can be used to do this:

1.      Calculate the deviatoric strain increment $\Delta {e}_{ij}=\Delta {\epsilon }_{ij}-\Delta {\epsilon }_{kk}{\delta }_{ij}/3$

2.      Calculate the `elastic predictor’ for the deviatoric and effective stress at the end of the increment

${S}_{ij}^{*\left(n+1\right)}={S}_{ij}^{\left(n\right)}+\frac{E}{1+\nu }\Delta {e}_{ij}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}=\sqrt{\frac{3}{2}{S}_{ij}^{*\left(n+1\right)}{S}_{ij}^{*\left(n+1\right)}}$

3.      Calculate the increment in effective plastic strain $\Delta {\epsilon }_{e}$ by solving (numerically) the following equation

$\frac{{\sigma }_{e}^{*\left(n+1\right)}}{Y}-\frac{3E}{2Y\left(1+\nu \right)}\Delta {\epsilon }_{e}-{\left(1+\frac{{\epsilon }_{e}+\Delta {\epsilon }_{e}}{{\epsilon }_{0}}\right)}^{1/n}{\left(\frac{\Delta {\epsilon }_{e}}{\Delta t{\stackrel{˙}{\epsilon }}_{0}\mathrm{exp}\left(-Q/kT\right)}\right)}^{1/m}=0$

4.      The stress at the end of the increment then follows as

${\sigma }_{ij}^{\left(n+1\right)}=\left(1-\frac{3E}{2\left(1+\nu \right){\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}\Delta {\epsilon }_{e}\right)\left({S}_{ij}^{\left(n\right)}+\frac{E}{1+\nu }\Delta {e}_{ij}\right)+{\sigma }_{kk}^{\left(n\right)}+\frac{E}{3\left(1-2\nu \right)}\Delta {\epsilon }_{kk}$

Derivation These expressions can be derived as follows:

1.      Separate the stress ${\sigma }_{ij}^{\left(n+1\right)}$ into deviatoric and hydrostatic components as follows

${p}^{\left(n+1\right)}={\sigma }_{kk}^{\left(n+1\right)}/3$          ${S}_{ij}^{\left(n+1\right)}={\sigma }_{ij}^{\left(n+1\right)}-{p}^{\left(n+1\right)}{\delta }_{ij}$

2.      The elastic stress-strain equation gives the hydrostatic part of the stress a time ${t}_{n+1}={t}_{n}+\Delta t$ as

${p}^{\left(n+1\right)}={p}^{\left(n\right)}+\frac{E}{3\left(1-2\nu \right)}\Delta {\epsilon }_{kk}$

3.      The deviatoric stress at the end of the increment can be expressed in terms of the total deviatoric strain increment $\Delta {e}_{ij}=\Delta {\epsilon }_{ij}-\Delta {\epsilon }_{kk}{\delta }_{ij}/3$ and the increment in plastic strain $\Delta {\epsilon }_{ij}^{p}$ by writing

${S}_{ij}^{\left(n+1\right)}={S}_{ij}^{\left(n\right)}+\frac{E}{1+\nu }\Delta {e}_{ij}^{e}={S}_{ij}^{\left(n\right)}+\frac{E}{1+\nu }\left(\Delta {e}_{ij}-\Delta {\epsilon }_{ij}^{p}\right)$

4.      To calculate the plastic strain increment $\Delta {e}_{ij}^{p}$ we need to integrate the expression for plastic strain rate with respect to time over the interval $\Delta t$.  There are many advantages to using an implicit, or backward-Euler time integration scheme for this purpose, as follows

$\Delta {\epsilon }_{ij}^{p}=\Delta {\epsilon }_{e}\frac{3}{2}\frac{{S}_{ij}^{\left(n+1\right)}}{{\sigma }_{e}^{\left(n+1\right)}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\Delta {\epsilon }_{e}=\Delta t{\stackrel{˙}{\epsilon }}_{0}\mathrm{exp}\left(-Q/kT\right){\left(\frac{{\sigma }_{e}^{\left(n+1\right)}}{{\sigma }_{0}^{\left(n+1\right)}}\right)}^{m}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\sigma }_{0}^{\left(n+1\right)}=Y{\left(1+\frac{{\epsilon }_{e}^{\left(n\right)}+\Delta {\epsilon }_{e}}{{\epsilon }_{0}}\right)}^{1/n}$

This is an implicit scheme, because the strain rate is computed based on values of stress and state variables at the end of the time interval.  It is a bit more cumbersome to deal with than a simple forward-Euler (explicit) scheme, in which the strain rate depends on stresses and state at the start of the increment, but the advantages far outweigh the additional complexity.  The implicit scheme can be shown to be unconditionally stable (you can take large timesteps without encountering numerical instabilities) and also leads to symmetric material tangents, as shown in the next section.

5.      The problem is now algebraic $–$ we need to solve for ${S}_{ij}^{\left(n+1\right)}$ and accumulated plastic strain ${\epsilon }_{e}^{\left(n+1\right)}$.  To this end, define

${S}_{ij}^{*\left(n+1\right)}={S}_{ij}^{\left(n\right)}+\frac{E}{1+\nu }\Delta {e}_{ij}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}=\sqrt{\frac{3}{2}{S}_{ij}^{*\left(n+1\right)}{S}_{ij}^{*\left(n+1\right)}}$

( ${S}_{ij}^{*\left(n+1\right)}$ is the deviatoric stress that you would get in the absence of plasticity).

6.      Now assume that the actual stress will be ${S}_{ij}^{\left(n+1\right)}=\beta {S}_{ij}^{*\left(n+1\right)}$, where $\beta$ is a numerical factor to be determined.  Substitute into the expression for ${S}_{ij}^{\left(n+1\right)}$ and eliminate $\Delta {\epsilon }_{ij}^{p}$ to see that

$\beta {S}_{ij}^{*\left(n+1\right)}={S}_{ij}^{*\left(n+1\right)}-\Delta {\epsilon }_{e}\frac{3E}{2\left(1+\nu \right)}\frac{{S}_{ij}^{*\left(n+1\right)}}{{\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}$

7.      Contracting both sides of this equation with ${S}_{ij}^{*\left(n+1\right)}$ shows that

$\beta =1-\frac{3E}{2\left(1+\nu \right){\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}\Delta {\epsilon }_{e}$

8.      Finally, note that $\beta ={\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}/{\sigma }_{e}^{\left(n+1\right)}$ and eliminate ${\sigma }_{e}^{\left(n+1\right)}$ and ${\sigma }_{0}^{\left(n+1\right)}$ from the remaining equations in step (4) to get

$\frac{{\sigma }_{e}^{*\left(n+1\right)}}{Y}-\frac{3E}{2Y\left(1+\nu \right)}\Delta {\epsilon }_{e}-{\left(1+\frac{{\epsilon }_{e}+\Delta {\epsilon }_{e}}{{\epsilon }_{0}}\right)}^{1/n}{\left(\frac{\Delta {\epsilon }_{e}}{\Delta t{\stackrel{˙}{\epsilon }}_{0}\mathrm{exp}\left(-Q/kT\right)}\right)}^{1/m}=0$

9.      The deviatoric stress at the end of the increment follows by substituting the result of (8) into (7) and recalling that ${S}_{ij}^{\left(n+1\right)}=\beta {S}_{ij}^{*\left(n+1\right)}$, so

${S}_{ij}^{\left(n+1\right)}=\left(1-\frac{3E}{2\left(1+\nu \right){\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}\Delta {\epsilon }_{e}\right)\left({S}_{ij}^{\left(n\right)}+\frac{E}{1+\nu }\Delta {e}_{ij}\right)$

10.  Finally, the formula for stress follows by combining the deviatoric stress in (9) with the hydrostatic stress in (2)

8.5.5 Material Tangent

Since the stress-strain relation is nonlinear, the virtual work equation will need to be solved using Newton-Raphson iteration.  For this purpose we must compute the material tangent $\partial {\sigma }_{ij}/\partial \Delta {\epsilon }_{kl}$.  The result is

$\frac{\partial {\sigma }_{ij}}{\partial \Delta {\epsilon }_{kl}}={C}_{ijkl}^{ep}=\frac{\beta E}{1+\nu }\left(\frac{1}{2}\left({\delta }_{ik}{\delta }_{jl}+{\delta }_{jk}{\delta }_{il}\right)-\frac{1}{3}{\delta }_{ij}{\delta }_{kl}+\frac{9E\left(\Delta {\epsilon }_{e}-1/\gamma \right)}{4\left(1+\nu \right){\sigma }_{e}^{\left(n+1\right)}}\frac{{S}_{ij}^{\left(n+1\right)}}{{\sigma }_{e}^{\left(n+1\right)}}\frac{{S}_{kl}^{\left(n+1\right)}}{{\sigma }_{e\text{\hspace{0.17em}}}^{\left(n+1\right)}}\right)+\frac{E}{3\left(1-2\nu \right)}{\delta }_{ij}{\delta }_{kl}$

where

$\beta ={\left(1+\frac{3E\Delta {\epsilon }_{e}}{2\left(1+\nu \right){\sigma }_{e}^{\left(n+1\right)}}\right)}^{-1}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\gamma =\beta \left\{\frac{3E}{2\left(1+\nu \right){\sigma }_{e}^{\left(n+1\right)}}+\left(\frac{1}{n\left({\epsilon }_{0}+{\epsilon }_{e}+\Delta {\epsilon }_{e}\right)}+\frac{1}{m\Delta {\epsilon }_{e}}\right)\right\}$

Derivation As always calculating the material tangent stiffness is a tiresome algebraic exercise.  We have that

$\begin{array}{l}{\sigma }_{ij}^{\left(n+1\right)}=\beta {S}_{ij}^{*\left(n+1\right)}+{\sigma }_{kk}^{\left(n\right)}+\frac{E}{3\left(1-2\nu \right)}\Delta {\epsilon }_{kk}\\ \beta =\text{\hspace{0.17em}}\left(1-\frac{3E}{2\left(1+\nu \right){\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}\Delta {\epsilon }_{e}\right)\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{S}_{ij}^{*\left(n+1\right)}=\text{\hspace{0.17em}}\left({S}_{ij}^{\left(n\right)}+\frac{E}{1+\nu }\Delta {e}_{ij}\right)\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}=\sqrt{\frac{3}{2}{S}_{ij}^{*\left(n+1\right)}{S}_{ij}^{*\left(n+1\right)}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\end{array}$

Consequently,

$d{\sigma }_{ij}^{\left(n+1\right)}=\beta \frac{E}{1+\nu }d\Delta {e}_{ij}-\frac{3E}{2\left(1+\nu \right)}\frac{{S}_{ij}^{*\left(n+1\right)}}{{\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}d\Delta {\epsilon }_{e}+\frac{3E\Delta {\epsilon }_{e}}{2\left(1+\nu \right)}\frac{{S}_{ij}^{*\left(n+1\right)}}{{\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}\frac{d{\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}{{\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}+\frac{E}{3\left(1-2\nu \right)}{\delta }_{ij}d\Delta {\epsilon }_{kk}$

where

$d{\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}=\frac{\partial {\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}{\partial {\epsilon }_{ij}}d\Delta {\epsilon }_{ij}=\frac{3E}{2\left(1+\nu \right)}\frac{{S}_{ij}^{*\left(n+1\right)}d\Delta {\epsilon }_{ij}}{{\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}=\frac{3E}{2\left(1+\nu \right)}\frac{{S}_{ij}^{\left(n+1\right)}d\Delta {\epsilon }_{ij}}{{\sigma }_{e\text{\hspace{0.17em}}}^{\left(n+1\right)}}$

and $d\Delta {\epsilon }_{e}$ can be computed by differentiating the nonlinear equation for $\Delta {\epsilon }_{e}$ as

$\frac{d{\sigma }_{e\text{\hspace{0.17em}}}^{*\left(n+1\right)}}{Y}-\left\{\frac{3E}{2\left(1+\nu \right)Y}+{\left(1+\frac{{\epsilon }_{e}+\Delta {\epsilon }_{e}}{{\epsilon }_{0}}\right)}^{1/n}{\left(\frac{\Delta {\epsilon }_{e}}{\Delta t{\stackrel{˙}{\epsilon }}_{0}\mathrm{exp}\left(-Q/kT\right)}\right)}^{1/m}\left(\frac{1}{n\left({\epsilon }_{0}+{\epsilon }_{e}+\Delta {\epsilon }_{e}\right)}+\frac{1}{m\Delta {\epsilon }_{e}}\right)\right\}d\Delta {\epsilon }_{e}=0$

Finally noting that

$\frac{d\Delta {e}_{ij}}{d\Delta {\epsilon }_{kl}}=\frac{1}{2}\left({\delta }_{ik}{\delta }_{jl}+{\delta }_{jk}{\delta }_{il}\right)-\frac{1}{3}{\delta }_{ij}{\delta }_{kl}$

we can collect together all the relevant terms to show that

${C}_{ijkl}^{ep}=\frac{\beta E}{1+\nu }\left(\frac{1}{2}\left({\delta }_{ik}{\delta }_{jl}+{\delta }_{jk}{\delta }_{il}\right)-\frac{1}{3}{\delta }_{ij}{\delta }_{kl}+\frac{9E\left(\Delta {\epsilon }_{e}-1/\gamma \right)}{4\left(1+\nu \right){\sigma }_{e}^{\left(n+1\right)}}\frac{{S}_{ij}^{\left(n+1\right)}}{{\sigma }_{e}^{\left(n+1\right)}}\frac{{S}_{kl}^{\left(n+1\right)}}{{\sigma }_{e\text{\hspace{0.17em}}}^{\left(n+1\right)}}\right)+\frac{E}{3\left(1-2\nu \right)}{\delta }_{ij}{\delta }_{kl}$

where

$\gamma =\beta \left\{\frac{3E}{2\left(1+\nu \right){\sigma }_{e}^{\left(n+1\right)}}+\left(\frac{1}{n\left({\epsilon }_{0}+{\epsilon }_{e}+\Delta {\epsilon }_{e}\right)}+\frac{1}{m\Delta {\epsilon }_{e}}\right)\right\}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\beta ={\left(1+\frac{3E\Delta {\epsilon }_{e}}{2\left(1+\nu \right){\sigma }_{e}^{\left(n+1\right)}}\right)}^{-1}$

8.5.6 Solution using Consistent Newton Raphson Iteration

At this point our problem is essentially identical to the hypoelasticity problem we solved earlier, except that we have to account for the history dependence of the solid.  With this in mind, we apply the loads (or impose displacements) in a series of increments, and calculate the change in displacements and stresses during each successive increment.  A generic load step is

Given current values for displacement ${u}_{n}$, accumulated plastic strain ${\epsilon }_{e}$ and stress ${\sigma }_{n}$

Compute the displacement increment $\Delta {u}_{n}$ and increment in plastic strain $\Delta {\epsilon }_{e}$

Update the solution to ${u}_{n}+\Delta {u}_{n}$, ${\epsilon }_{e\text{\hspace{0.17em}}n+1}={\epsilon }_{e\text{\hspace{0.17em}}n}+\Delta {\epsilon }_{e}$, ${\sigma }_{n+1}$

We start the solution for some generic load step with an initial guess for $\Delta {u}_{i}^{a}$ - say ${w}_{i}^{a}$ (we can use the solution at the end of the preceding increment).  We then attempt to correct this guess to bring it closer to the proper solution by setting ${w}_{i}^{a}\to {w}_{i}^{a}+d{w}_{i}^{a}$.  Ideally, of course, we would want the correction to satisfy

$\underset{ℝ}{\int }{\sigma }_{ij}\left[{\epsilon }_{kl}\left({w}_{i}^{a}+d{w}_{i}^{a}\right)\right]\frac{\partial {N}^{a}}{\partial {x}_{j}}dV-\underset{ℝ}{\int }{b}_{i}{N}^{a}dV-\underset{\partial ℝ}{\int }{t}_{i}^{*}{N}^{a}dA=0$

Just as we did for hypoelastic problems, we linearize in $d{w}_{i}^{a}$ to obtain a system of linear equations

${K}_{aibk}d{w}_{k}^{b}+{R}_{i}^{a}-{F}_{i}^{a}=0$

with

${K}_{aibk}=\underset{ℝ}{\int }{C}_{ijkl}^{ep}\frac{\partial {N}^{a}}{\partial {x}_{j}}\frac{\partial {N}^{b}}{\partial {x}_{l}}dV\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{R}_{i}^{a}=\underset{ℝ}{\int }{\sigma }_{ij}\left[{\epsilon }_{kl}\left({w}_{i}^{b}\right)\right]\frac{\partial {N}^{a}}{\partial {x}_{j}}dV\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{F}_{i}^{a}=\underset{ℝ}{\int }{b}_{i}{N}^{a}dV+\underset{\partial ℝ}{\int }{t}_{i}^{*}{N}^{a}dA$

These expressions are essentially identical to those we dealt with in the hypoelasticity problem.

Developing an elastic-plastic FEM code is a chore.  It is conceptually no more difficult than the hypoelasticity problem, but there’s a lot more bookkeeping to do to keep track of the history dependence of the material.  Specifically, it is necessary to store, and to update, the stress and accumulated plastic strain at each integration point of each element, and to pass this information to the routines that calculate element residual and element stiffness information.  Newton-Raphson solution of the equilibrium equations is standard.  Once a convergent solution has been found, the stress and accumulated plastic strain at the element integration points must be updated, before starting the next load step.

8.5.7 Example small-strain plastic FEM code

As always, we provide a simple example FEM code to illustrate actual implementation.

The code is in a file FEM_2Dor3D_viscoplastic.mws

An input file is provided in the file Viscoplastic_quad4.txt

The code and sample input file are set up to solve the problem illustrated in the figure:  the element deforms in plane strain and has the viscoplastic constitutive response described earlier with

$\begin{array}{l}E=10000,\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\nu =0.3\\ Y=15,\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\epsilon }_{0}=0.5\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}n=10,\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\stackrel{˙}{\epsilon }}_{0}=0.1\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}m=10\end{array}$

The program assumes the load increases from zero to 20 over a time period of 2.  The load is applied in a series of increments, and using consistent Newton-Raphson iteration to solve the nonlinear equations at each step.  Element strains and stresses are printed to a file at each load step, and the stress-v-displacement curve for the element is plotted, as shown below.