Non-linear statics – small strain

Here we extend the example from Linear statics – small strain to a non-linear constitutive response, which is however still subjected to a small deformations assumption. We treat the constitutive response as a black-box here:

\bm{\varepsilon}
\;
\rightarrow
\;
\bm{\sigma}, \mathbb{K}

where it must be emphasized that \mathbb{K} symmetrizes. To understand more about the constitutive response, please consult the documentation of GooseSolid

Mixed boundary conditions

[source: fixedbnd.cpp]

In summary, our iterative update reads

\underline{\underline{\bm{K}}}_{(i)} \cdot \delta \underline{\vec{x}}
=
\underline{\vec{t}}
-
\underline{\vec{f}}_{(i)}

with

\underline{\underline{\bm{K}}}_{(i)}
=
\int\limits_{\Omega^h_0}
  \big[\, \vec{\nabla}_0 \underline{N} \,\big]
  \cdot
  \bm{K}\big(\vec{x}_{(i)}\big)
  \cdot
  \big[\, \vec{\nabla}_0 \underline{N} \,\big]^\mathsf{T} \;
\mathrm{d}\Omega

and

\underline{\vec{f}}_{(i)}
=
\int\limits_{\Omega^h_0}
  \big[\, \vec{\nabla}_0 \underline{N} \,\big]
  \cdot
  \bm{\sigma}\big(\vec{x}_{(i)}\big) \;
\mathrm{d}\Omega

We will use this to iteratively update

\underline{\vec{x}}_{(i+1)} = \underline{\vec{x}}_{(i)} + \delta \underline{\vec{x}}

From an ‘initial guess’

\underline{\vec{x}}_{(0)} = \underline{\vec{0}}

Note

This is a bit of particular case. We need this iteration to get things going, however typically

\underline{\vec{t}}
-
\underline{\vec{f}}_{(0)}
=
\underline{\vec{0}}

One should not be fooled, this does not mean to an equilibrium has been obtained.

Like before, we introduce DOFs to make the system scalar. We then need to partition the system to deal with the prescribed displacement-components:

\begin{bmatrix}
\underline{\underline{K}}_{uu}^{(i)} && \underline{\underline{K}}_{up}^{(i)} \\
\underline{\underline{K}}_{pu}^{(i)} && \underline{\underline{K}}_{pp}^{(i)}
\end{bmatrix}
\cdot
\begin{bmatrix}
\delta \underline{x}_{u}^{(i)} \\
\delta \underline{x}_{p}^{(i)}
\end{bmatrix}
=
\begin{bmatrix}
\underline{t}_{u}^{(i)} \\
\underline{t}_{p}^{(i)}
\end{bmatrix}
-
\begin{bmatrix}
\underline{f}_{u}^{(i)} \\
\underline{f}_{p}^{(i)}
\end{bmatrix}

From which the update of the unknown DOFs as follows

\delta \underline{x}_{u}^{(i)}
=
\left[
  \underline{\underline{K}}_{uu}^{(i)}
\right]^{-1}
\left[
  \underline{t}_{u}^{(i)} -
  \underline{f}_{u}^{(i)} -
  \underline{\underline{K}}_{up}^{(i)} \delta \underline{x}_{p}^{(i)}
\right]

There a very important concept hidden here. Because we prescribe \delta \underline{x}_{p} directly to the correct value – which we do not iteratively update – we need to set

\delta \underline{x}_{p}^{(i)}
=
\begin{cases}
  \delta \underline{x}_{p} \quad & \mathrm{if}\, i = 0 \\
  0                        \quad & \mathrm{otherwise}
\end{cases}

(Which means that one does not have to compute the product \underline{\underline{K}}_{up}^{(i)} \delta \underline{x}_{p}^{(i)} for i > 0, as it will be zero.)

Note

Reaction forces

To obtain the reaction forces on the prescribed DOFs simply use that

\underline{t}_{p}^{(i)} = \underline{f}_{p}^{(i)}

Which should be evaluated once convergence has been reached (before that, this has no meaning).

Periodic problem

[source: periodic.cpp]

In some ways the periodic example is even easier than the example above. As discussed previously \delta \underline{\vec{x}} only leads to periodic fluctuations. In summary we begin by setting

\underline{\vec{x}}_{(0)}
=
\big[\, \bar{\bm{F}} - \bm{I} \,\big]
\cdot
\big[\, \underline{\vec{X}} - \underline{\vec{X}}_\mathrm{ref} \,\big]

the update

\underline{\vec{x}}_{(i+1)} = \underline{\vec{x}}_{(i)} + \delta \underline{\vec{x}}

then only affects the fluctuations, and not the average. Also we do not need to worry about the above discussion on the prescribed displacements since they are always zero and traction free – as they merely suppress rigid body modes.

Note

The periodic implementation with macroscopic DOFs is identically extended to the non-linear case as above. Here one does have care about properly adding the prescribed displacements.