displacements $\mathbf{u}(\mathbf{x},t)$ of the points on the boundary. To
complete this system, we have to specify the incremental relationship between
the stress and the strain, as follows:
-<a name="step-18.stress-strain"></a>
+<a name="step_18.stress-strain"></a>
@f[
\dot\sigma = C \varepsilon (\dot{\mathbf{u}}),
\qquad
finite element formulation, reads as follows: find $\Delta \mathbf{u}^n \in
\{v\in H^1(\Omega(t_{n-1}))^d: v|_{\Gamma_D}=\mathbf{d}(\cdot,t_n) - \mathbf{d}(\cdot,t_{n-1})\}$
such that
-<a name="step-18.linear-system"></a>
+<a name="step_18.linear-system"></a>
@f{eqnarray*}
(C \varepsilon(\Delta\mathbf{u}^n), \varepsilon(\varphi) )_{\Omega(t_{n-1})}
=
As indicated above, we need to have the stress variable $\sigma^n$ available
when computing time step $n+1$, and we can compute it using
-<a name="step-18.stress-update"></a>
+<a name="step_18.stress-update"></a>
@f[
\sigma^n = \sigma^{n-1} + C \varepsilon (\Delta \mathbf{u}^n).
\qquad
the curl the rotational modes). Since the exact form of $R$ is cumbersome, we
only state it in the program code, and note that the correct updating formula
for the stress variable is then
-<a name="step-18.stress-update+rot"></a>
+<a name="step_18.stress-update+rot"></a>
@f[
\sigma^n
=
<li> <code>assemble_system ()</code> [via <code>solve_timestep ()</code>]:
This first function is also the most interesting one. It assembles the
linear system corresponding to the discretized version of equation
- <a href="#step-18.linear-system">[linear-system]</a>. This leads to a system matrix $A_{ij} = \sum_K
+ <a href="#step_18.linear-system">[linear-system]</a>. This leads to a system matrix $A_{ij} = \sum_K
A^K_{ij}$ built up of local contributions on each cell $K$ with entries
@f[
A^K_{ij} = (C \varepsilon(\varphi_j), \varepsilon(\varphi_i))_K;
\sigma^{n-1}_q : \varepsilon(\varphi_i(\mathbf{x}_q))
\right\}
@f}
- to the right hand side of <a href="#step-18.linear-system">[linear-system]</a> is equally
+ to the right hand side of <a href="#step_18.linear-system">[linear-system]</a> is equally
straightforward (note that we do not consider any boundary tractions $\mathbf{b}$ here). Remember that we only had to store the old stress in the
quadrature points of cells. In the program, we will provide a variable
<code>local_quadrature_points_data</code> that allows to access the stress
<li> <code>update_quadrature_point_history ()</code> [via
<code>solve_timestep ()</code>]: Based on the displacement field $\Delta \mathbf{u}^n$ computed before, we update the stress values in all quadrature points
- according to <a href="#step-18.stress-update">[stress-update]</a> and <a href="#step-18.stress-update+rot">[stress-update+rot]</a>,
+ according to <a href="#step_18.stress-update">[stress-update]</a> and <a href="#step_18.stress-update+rot">[stress-update+rot]</a>,
including the rotation of the coordinate system.
<li> <code>move_mesh ()</code>: Given the solution computed before, in this