xref: /libCEED/examples/solids/index.md (revision 6a96780f4d953613bf84434507c5fffdcf1ec0dd)
1(example-petsc-elasticity)=
2
3# Solid mechanics mini-app
4
5This example is located in the subdirectory {file}`examples/solids`.
6It solves the steady-state static momentum balance equations using unstructured high-order finite/spectral element spatial discretizations.
7As for the {ref}`example-petsc-navier-stokes` case, the solid mechanics elasticity example has been developed using PETSc, so that the pointwise physics (defined at quadrature points) is separated from the parallelization and meshing concerns.
8
9In this mini-app, we consider three formulations used in solid mechanics applications: linear elasticity, Neo-Hookean hyperelasticity at small strain, and Neo-Hookean hyperelasticity at finite strain.
10We provide the strong and weak forms of static balance of linear momentum in the small strain and finite strain regimes.
11The stress-strain relationship (constitutive law) for each of the material models is provided.
12Due to the nonlinearity of material models in Neo-Hookean hyperelasticity, the Newton linearization of the material models is provided.
13
14:::{note}
15Linear elasticity and small-strain hyperelasticity can both by obtained from the finite-strain hyperelastic formulation by linearization of geometric and constitutive nonlinearities.
16The effect of these linearizations is sketched in the diagram below, where $\bm \sigma$ and $\bm \epsilon$ are stress and strain, respectively, in the small strain regime, while $\bm S$ and $\bm E$ are their finite-strain generalizations (second Piola-Kirchoff tensor and Green-Lagrange strain tensor, respectively) defined in the initial configuration, and $\mathsf C$ is a linearized constitutive model.
17
18$$
19\begin{CD}
20  {\overbrace{\bm S(\bm E)}^{\text{Finite Strain Hyperelastic}}}
21  @>{\text{constitutive}}>{\text{linearization}}>
22  {\overbrace{\bm S = \mathsf C \bm E}^{\text{St. Venant-Kirchoff}}} \\
23  @V{\text{geometric}}V{\begin{smallmatrix}\bm E \to \bm \epsilon \\ \bm S \to \bm \sigma \end{smallmatrix}}V
24  @V{\begin{smallmatrix}\bm E \to \bm \epsilon \\ \bm S \to \bm \sigma \end{smallmatrix}}V{\text{geometric}}V \\
25  {\underbrace{\bm \sigma(\bm \epsilon)}_\text{Small Strain Hyperelastic}}
26  @>{\text{constitutive}}>\text{linearization}>
27  {\underbrace{\bm \sigma = \mathsf C \bm \epsilon}_\text{Linear Elastic}}
28\end{CD}
29$$ (hyperelastic-cd)
30:::
31
32(running-elasticity)=
33
34## Running the mini-app
35
36```{include} README.md
37:start-after: inclusion-solids-marker
38```
39
40(problem-linear-elasticity)=
41
42## Linear Elasticity
43
44The strong form of the static balance of linear momentum at small strain for the three-dimensional linear elasticity problem is given by {cite}`hughes2012finite`:
45
46$$
47\nabla \cdot \bm{\sigma} + \bm{g} = \bm{0}
48$$ (lin-elas)
49
50where $\bm{\sigma}$ and $\bm{g}$ are stress and forcing functions, respectively.
51We multiply {eq}`lin-elas` by a test function $\bm v$ and integrate the divergence term by parts to arrive at the weak form: find $\bm u \in \mathcal V \subset H^1(\Omega)$ such that
52
53$$
54\int_{\Omega}{ \nabla \bm{v} \tcolon \bm{\sigma}} \, dV
55- \int_{\partial \Omega}{\bm{v} \cdot \left(\bm{\sigma} \cdot \hat{\bm{n}}\right)} \, dS
56- \int_{\Omega}{\bm{v} \cdot \bm{g}} \, dV
57= 0, \quad \forall \bm v \in \mathcal V,
58$$ (lin-elas-weak)
59
60where $\bm{\sigma} \cdot \hat{\bm{n}}|_{\partial \Omega}$ is replaced by an applied force/traction boundary condition written in terms of the initial configuration.
61When inhomogeneous Dirichlet boundary conditions are present, $\mathcal V$ is an affine space that satisfies those boundary conditions.
62
63### Constitutive modeling
64
65In their most general form, constitutive models define $\bm \sigma$ in terms of state variables.
66In the model taken into consideration in the present mini-app, the state variables are constituted by the vector displacement field $\bm u$, and its gradient $\nabla \bm u$.
67We begin by defining the symmetric (small/infintesimal) strain tensor as
68
69$$
70\bm{\epsilon} = \dfrac{1}{2}\left(\nabla \bm{u} + \nabla \bm{u}^T \right).
71$$ (small-strain)
72
73This constitutive model $\bm \sigma(\bm \epsilon)$ is a linear tensor-valued function of a tensor-valued input, but we will consider the more general nonlinear case in other models below.
74In these cases, an arbitrary choice of such a function will generally not be invariant under orthogonal transformations and thus will not admissible as a physical model must not depend on the coordinate system chosen to express it.
75In particular, given an orthogonal transformation $Q$, we desire
76
77$$
78Q \bm \sigma(\bm \epsilon) Q^T = \bm \sigma(Q \bm \epsilon Q^T),
79$$ (elastic-invariance)
80
81which means that we can change our reference frame before or after computing $\bm \sigma$, and get the same result either way.
82Constitutive relations in which $\bm \sigma$ is uniquely determined by $\bm \epsilon$ while satisfying the invariance property {eq}`elastic-invariance` are known as Cauchy elastic materials.
83Here, we define a strain energy density functional $\Phi(\bm \epsilon) \in \mathbb R$ and obtain the strain energy from its gradient,
84
85$$
86\bm \sigma(\bm \epsilon) = \frac{\partial \Phi}{\partial \bm \epsilon}.
87$$ (strain-energy-grad)
88
89:::{note}
90The strain energy density functional cannot be an arbitrary function $\Phi(\bm \epsilon)$; it can only depend on *invariants*, scalar-valued functions $\gamma$ satisfying
91
92$$
93\gamma(\bm \epsilon) = \gamma(Q \bm \epsilon Q^T)
94$$
95
96for all orthogonal matrices $Q$.
97:::
98
99For the linear elasticity model, the strain energy density is given by
100
101$$
102\bm{\Phi} = \frac{\lambda}{2} (\operatorname{trace} \bm{\epsilon})^2 + \mu \bm{\epsilon} : \bm{\epsilon} .
103$$
104
105The constitutive law (stress-strain relationship) is therefore given by its gradient,
106
107$$
108\bm\sigma = \lambda (\operatorname{trace} \bm\epsilon) \bm I_3 + 2 \mu \bm\epsilon,
109$$
110
111where $\bm I_3$ is the $3 \times 3$ identity matrix, the colon represents a double contraction (over both indices of $\bm \epsilon$), and the Lamé parameters are given by
112
113$$
114\begin{aligned} \lambda &= \frac{E \nu}{(1 + \nu)(1 - 2 \nu)} \\ \mu &= \frac{E}{2(1 + \nu)} \end{aligned}.
115$$
116
117The constitutive law (stress-strain relationship) can also be written as
118
119$$
120\bm{\sigma} = \mathsf{C} \!:\! \bm{\epsilon}.
121$$ (linear-stress-strain)
122
123For notational convenience, we express the symmetric second order tensors $\bm \sigma$ and $\bm \epsilon$ as vectors of length 6 using the [Voigt notation](https://en.wikipedia.org/wiki/Voigt_notation).
124Hence, the fourth order elasticity tensor $\mathsf C$ (also known as elastic moduli tensor or material stiffness tensor) can be represented as
125
126$$
127\mathsf C = \begin{pmatrix}
128\lambda + 2\mu & \lambda & \lambda & & & \\
129\lambda & \lambda + 2\mu & \lambda & & & \\
130\lambda & \lambda & \lambda + 2\mu & & & \\
131& & & \mu & & \\
132& & & & \mu & \\
133& & & & & \mu
134\end{pmatrix}.
135$$ (linear-elasticity-tensor)
136
137Note that the incompressible limit $\nu \to \frac 1 2$ causes $\lambda \to \infty$, and thus $\mathsf C$ becomes singular.
138
139(problem-hyper-small-strain)=
140
141## Hyperelasticity at Small Strain
142
143The strong and weak forms given above, in {eq}`lin-elas` and {eq}`lin-elas-weak`, are valid for Neo-Hookean hyperelasticity at small strain.
144However, the strain energy density differs and is given by
145
146$$
147\bm{\Phi} = \lambda (1 + \operatorname{trace} \bm{\epsilon}) (\log(1 + \operatorname{trace} \bm\epsilon) - 1) + \mu \bm{\epsilon} : \bm{\epsilon} .
148$$
149
150As above, we have the corresponding constitutive law given by
151
152$$
153\bm{\sigma} = \lambda \log(1 + \operatorname{trace} \bm\epsilon) \bm{I}_3 + 2\mu \bm{\epsilon}
154$$ (eq-neo-hookean-small-strain)
155
156where $\bm{\epsilon}$ is defined as in {eq}`small-strain`.
157
158### Newton linearization
159
160Due to nonlinearity in the constitutive law, we require a Newton linearization of {eq}`eq-neo-hookean-small-strain`.
161To derive the Newton linearization, we begin by expressing the derivative,
162
163$$
164\diff \bm{\sigma} = \dfrac{\partial \bm{\sigma}}{\partial \bm{\epsilon}} \tcolon \diff \bm{\epsilon}
165$$
166
167where
168
169$$
170\diff \bm{\epsilon} = \dfrac{1}{2}\left( \nabla \diff \bm{u} + \nabla \diff \bm{u}^T \right)
171$$
172
173and
174
175$$
176\diff \nabla \bm{u} = \nabla \diff \bm{u} .
177$$
178
179Therefore,
180
181$$
182\diff \bm{\sigma}  = \bar{\lambda} \cdot \operatorname{trace} \diff \bm{\epsilon} \cdot \bm{I}_3 + 2\mu \diff \bm{\epsilon}
183$$ (derss)
184
185where we have introduced the symbol
186
187$$
188\bar{\lambda} = \dfrac{\lambda}{1 + \epsilon_v }
189$$
190
191where volumetric strain is given by $\epsilon_v = \sum_i \epsilon_{ii}$.
192
193Equation {eq}`derss` can be written in Voigt matrix notation as follows:
194
195$$
196\begin{pmatrix}
197  \diff \sigma_{11} \\
198  \diff \sigma_{22} \\
199  \diff \sigma_{33} \\
200  \diff \sigma_{23} \\
201  \diff \sigma_{13} \\
202  \diff \sigma_{12}
203\end{pmatrix}  =
204\begin{pmatrix}
205  2 \mu +\bar{\lambda} & \bar{\lambda} & \bar{\lambda} & & & \\
206  \bar{\lambda} & 2 \mu +\bar{\lambda} & \bar{\lambda} & & & \\
207  \bar{\lambda} & \bar{\lambda} & 2 \mu +\bar{\lambda} & & & \\
208  & & & \mu & & \\
209  & & & & \mu & \\
210  & & & & & \mu \\
211\end{pmatrix}
212\begin{pmatrix}
213  \diff \epsilon_{11} \\
214  \diff \epsilon_{22} \\
215  \diff \epsilon_{33} \\
216  2 \diff \epsilon_{23} \\
217  2 \diff \epsilon_{13} \\
218  2 \diff \epsilon_{12}
219\end{pmatrix}.
220$$ (mdss)
221
222(problem-hyperelasticity-finite-strain)=
223
224## Hyperelasticity at Finite Strain
225
226In the *total Lagrangian* approach for the Neo-Hookean hyperelasticity problem, the discrete equations are formulated with respect to the initial configuration.
227In this formulation, we solve for displacement $\bm u(\bm X)$ in the reference frame $\bm X$.
228The notation for elasticity at finite strain is inspired by {cite}`holzapfel2000nonlinear` to distinguish between the current and initial configurations.
229As explained in the {ref}`common-notation` section, we denote by capital letters the reference frame and by small letters the current one.
230
231The strong form of the static balance of linear-momentum at *finite strain* (total Lagrangian) is given by:
232
233$$
234- \nabla_X \cdot \bm{P} - \rho_0 \bm{g} = \bm{0}
235$$ (sblFinS)
236
237where the $_X$ in $\nabla_X$ indicates that the gradient is calculated with respect to the initial configuration in the finite strain regime.
238$\bm{P}$ and $\bm{g}$ are the *first Piola-Kirchhoff stress* tensor and the prescribed forcing function, respectively.
239$\rho_0$ is known as the *initial* mass density.
240The tensor $\bm P$ is not symmetric, living in the current configuration on the left and the initial configuration on the right.
241
242$\bm{P}$ can be decomposed as
243
244$$
245\bm{P} = \bm{F} \, \bm{S},
246$$ (1st2nd)
247
248where $\bm S$ is the *second Piola-Kirchhoff stress* tensor, a symmetric tensor defined entirely in the initial configuration, and $\bm{F} = \bm I_3 + \nabla_X \bm u$ is the deformation gradient.
249Different constitutive models can define $\bm S$.
250
251### Constitutive modeling
252
253For the constitutive modeling of hyperelasticity at finite strain, we begin by defining two symmetric tensors in the initial configuration, the right Cauchy-Green tensor
254
255$$
256\bm C = \bm F^T \bm F
257$$
258
259and the Green-Lagrange strain tensor
260
261$$
262\bm E = \frac 1 2 (\bm C - \bm I_3) = \frac 1 2 \Big( \nabla_X \bm u + (\nabla_X \bm u)^T + (\nabla_X \bm u)^T \nabla_X \bm u \Big),
263$$ (eq-green-lagrange-strain)
264
265the latter of which converges to the linear strain tensor $\bm \epsilon$ in the small-deformation limit.
266The constitutive models considered, appropriate for large deformations, express $\bm S$ as a function of $\bm E$, similar to the linear case, shown in equation  {eq}`linear-stress-strain`, which  expresses the relationship between $\bm\sigma$ and $\bm\epsilon$.
267
268Recall that the strain energy density functional can only depend upon invariants.
269We will assume without loss of generality that $\bm E$ is diagonal and take its set of eigenvalues as the invariants.
270It is clear that there can be only three invariants, and there are many alternate choices, such as $\operatorname{trace}(\bm E), \operatorname{trace}(\bm E^2), \lvert \bm E \rvert$, and combinations thereof.
271It is common in the literature for invariants to be taken from $\bm C = \bm I_3 + 2 \bm E$ instead of $\bm E$.
272
273For example, if we take the compressible Neo-Hookean model,
274
275$$
276\begin{aligned}
277\Phi(\bm E) &= \frac{\lambda}{2}(\log J)^2 - \mu \log J + \frac \mu 2 (\operatorname{trace} \bm C - 3) \\
278  &= \frac{\lambda}{2}(\log J)^2 - \mu \log J + \mu \operatorname{trace} \bm E,
279\end{aligned}
280$$ (neo-hookean-energy)
281
282where $J = \lvert \bm F \rvert = \sqrt{\lvert \bm C \rvert}$ is the determinant of deformation (i.e., volume change) and $\lambda$ and $\mu$ are the Lamé parameters in the infinitesimal strain limit.
283
284To evaluate {eq}`strain-energy-grad`, we make use of
285
286$$
287\frac{\partial J}{\partial \bm E} = \frac{\partial \sqrt{\lvert \bm C \rvert}}{\partial \bm E} = \lvert \bm C \rvert^{-1/2} \lvert \bm C \rvert \bm C^{-1} = J \bm C^{-1},
288$$
289
290where the factor of $\frac 1 2$ has been absorbed due to $\bm C = \bm I_3 + 2 \bm E.$
291Carrying through the differentiation {eq}`strain-energy-grad` for the model {eq}`neo-hookean-energy`, we arrive at
292
293$$
294\bm S = \lambda \log J \bm C^{-1} + \mu (\bm I_3 - \bm C^{-1}).
295$$ (neo-hookean-stress)
296
297:::{tip}
298An equivalent form of {eq}`neo-hookean-stress` is
299
300$$
301\bm S = \lambda \log J \bm C^{-1} + 2 \mu \bm C^{-1} \bm E,
302$$ (neo-hookean-stress-stable)
303
304which is more numerically stable for small $\bm E$, and thus preferred for computation.
305Note that the product $\bm C^{-1} \bm E$ is also symmetric, and that $\bm E$ should be computed using {eq}`eq-green-lagrange-strain`.
306
307Similarly, it is preferable to compute $\log J$ using `log1p`, especially in case of nearly incompressible materials.
308To sketch this idea, suppose we have the $2\times 2$ non-symmetric matrix $\bm{F} = \left( \begin{smallmatrix} 1 + u_{0,0} & u_{0,1} \\ u_{1,0} & 1 + u_{1,1} \end{smallmatrix} \right)$.
309Then we compute
310
311$$
312\log J = \mathtt{log1p}(u_{0,0} + u_{1,1} + u_{0,0} u_{1,1} - u_{0,1} u_{1,0}),
313$$ (log1p)
314
315which gives accurate results even in the limit when the entries $u_{i,j}$ are very small.
316For example, if $u_{i,j} \sim 10^{-8}$, then naive computation of $\bm I_3 - \bm C^{-1}$ and $\log J$ will have a relative accuracy of order $10^{-8}$ in double precision and no correct digits in single precision.
317When using the stable choices above, these quantities retain full $\varepsilon_{\text{machine}}$ relative accuracy.
318:::
319
320:::{dropdown} Mooney-Rivlin model
321While the Neo-Hookean model depends on just two scalar invariants, $\mathbb I_1 = \trace \bm C = 3 + 2\trace \bm E$ and $J$, Mooney-Rivlin models depend on the additional invariant, $\mathbb I_2 = \frac 1 2 (\mathbb I_1^2 - \bm C \tcolon \bm C)$.
322A coupled Mooney-Rivlin strain energy density (cf. Neo-Hookean {eq}`neo-hookean-energy`) is {cite}`holzapfel2000nonlinear`
323
324$$
325\Phi(\mathbb{I_1}, \mathbb{I_2}, J) = \frac{\lambda}{2}(\log J)^2 - (\mu_1 + 2\mu_2) \log J + \frac{\mu_1}{2}(\mathbb{I_1} - 3) + \frac{\mu_2}{2}(\mathbb{I_2} - 3).
326$$ (mooney-rivlin-energy_coupled)
327
328We differentiate $\Phi$ as in the Neo-Hookean case {eq}`neo-hookean-stress` to yield the second Piola-Kirchoff tensor,
329
330$$
331\begin{aligned}
332\bm S &=  \lambda \log J \bm{C}^{-1} - (\mu_1 + 2\mu_2) \bm{C}^{-1} + \mu_1\bm I_3 + \mu_2(\mathbb{I_1} \bm I_3 - \bm C) \\
333&= (\lambda \log J - \mu_1 - 2\mu_2) \bm C^{-1} + (\mu_1 + \mu_2 \mathbb I_1) \bm I_3 - \mu_2 \bm C,
334\end{aligned}
335$$ (mooney-rivlin-stress_coupled)
336
337where we have used
338
339$$
340\begin{aligned}
341\frac{\partial \mathbb{I_1}}{\partial \bm E} &= 2 \bm I_3, & \frac{\partial \mathbb{I_2}}{\partial \bm E} &= 2 \mathbb I_1 \bm I_3 - 2 \bm C, & \frac{\partial \log J}{\partial \bm E} &= \bm{C}^{-1}.
342\end{aligned}
343$$ (None)
344
345This is a common model for vulcanized rubber, with a shear modulus (defined for the small-strain limit) of $\mu_1 + \mu_2$ that should be significantly smaller than the first Lamé parameter $\lambda$.
346:::
347
348:::{dropdown} Mooney-Rivlin strain energy comparison
349We apply traction to a block and plot integrated strain energy $\Phi$ as a function of the loading paramater.
350
351```{altair-plot}
352:hide-code:
353
354import altair as alt
355import pandas as pd
356def source_path(rel):
357    import os
358    return os.path.join(os.path.dirname(os.environ["DOCUTILSCONFIG"]), rel)
359
360nh = pd.read_csv(source_path("examples/solids/tests-output/NH-strain.csv"))
361nh["model"] = "Neo-Hookean"
362nh["parameters"] = "E=2.8, nu=0.4"
363
364mr = pd.read_csv(source_path("examples/solids/tests-output/MR-strain.csv"))
365mr["model"] = "Mooney-Rivlin; Neo-Hookean equivalent"
366mr["parameters"] = "mu_1=1, mu_2=0, nu=.4"
367
368mr1 = pd.read_csv(source_path("examples/solids/tests-output/MR-strain1.csv"))
369mr1["model"] = "Mooney-Rivlin"
370mr1["parameters"] = "mu_1=0.5, mu_2=0.5, nu=.4"
371
372df = pd.concat([nh, mr, mr1])
373highlight = alt.selection_point(
374   on = "mouseover",
375   nearest = True,
376   fields=["model", "parameters"],
377)
378base = alt.Chart(df).encode(
379   alt.X("increment"),
380   alt.Y("energy", scale=alt.Scale(type="sqrt")),
381   alt.Color("model"),
382   alt.Tooltip(("model", "parameters")),
383   opacity=alt.condition(highlight, alt.value(1), alt.value(.5)),
384   size=alt.condition(highlight, alt.value(2), alt.value(1)),
385)
386base.mark_point().add_params(highlight) + base.mark_line()
387```
388:::
389
390:::{note}
391One can linearize {eq}`neo-hookean-stress` around $\bm E = 0$, for which $\bm C = \bm I_3 + 2 \bm E \to \bm I_3$ and $J \to 1 + \operatorname{trace} \bm E$, therefore {eq}`neo-hookean-stress` reduces to
392
393$$
394\bm S = \lambda (\trace \bm E) \bm I_3 + 2 \mu \bm E,
395$$ (eq-st-venant-kirchoff)
396
397which is the St. Venant-Kirchoff model (constitutive linearization without geometric linearization; see {eq}`hyperelastic-cd`).
398
399This model can be used for geometrically nonlinear mechanics (e.g., snap-through of thin structures), but is inappropriate for large strain.
400
401Alternatively, one can drop geometric nonlinearities, $\bm E \to \bm \epsilon$ and $\bm C \to \bm I_3$, while retaining the nonlinear dependence on $J \to 1 + \operatorname{trace} \bm \epsilon$, thereby yielding {eq}`eq-neo-hookean-small-strain` (see {eq}`hyperelastic-cd`).
402:::
403
404### Weak form
405
406We multiply {eq}`sblFinS` by a test function $\bm v$ and integrate by parts to obtain the weak form for finite-strain hyperelasticity:
407find $\bm u \in \mathcal V \subset H^1(\Omega_0)$ such that
408
409$$
410\int_{\Omega_0}{\nabla_X \bm{v} \tcolon \bm{P}} \, dV
411 - \int_{\Omega_0}{\bm{v} \cdot \rho_0 \bm{g}} \, dV
412 - \int_{\partial \Omega_0}{\bm{v} \cdot (\bm{P} \cdot \hat{\bm{N}})} \, dS
413 = 0, \quad \forall \bm v \in \mathcal V,
414$$ (hyperelastic-weak-form-initial)
415
416where $\bm{P} \cdot \hat{\bm{N}}|_{\partial\Omega}$ is replaced by any prescribed force/traction boundary condition written in terms of the initial configuration.
417This equation contains material/constitutive nonlinearities in defining $\bm S(\bm E)$, as well as geometric nonlinearities through $\bm P = \bm F\, \bm S$, $\bm E(\bm F)$, and the body force $\bm g$, which must be pulled back from the current configuration to the initial configuration.
418Discretization of {eq}`hyperelastic-weak-form-initial` produces a finite-dimensional system of nonlinear algebraic equations, which we solve using Newton-Raphson methods.
419One attractive feature of Galerkin discretization is that we can arrive at the same linear system by discretizing the Newton linearization of the continuous form; that is, discretization and differentiation (Newton linearization) commute.
420
421### Newton linearization
422
423To derive a Newton linearization of {eq}`hyperelastic-weak-form-initial`, we begin by expressing the derivative of {eq}`1st2nd` in incremental form,
424
425$$
426\diff \bm P = \frac{\partial \bm P}{\partial \bm F} \!:\! \diff \bm F = \diff \bm F\, \bm S + \bm F \underbrace{\frac{\partial \bm S}{\partial \bm E} \!:\! \diff \bm E}_{\diff \bm S}
427$$ (eq-diff-P)
428
429where
430
431$$
432\diff \bm E = \frac{\partial \bm E}{\partial \bm F} \!:\! \diff \bm F = \frac 1 2 \Big( \diff \bm F^T \bm F + \bm F^T \diff \bm F \Big)
433$$
434
435and $\diff\bm F = \nabla_X\diff\bm u$.
436The quantity ${\partial \bm S} / {\partial \bm E}$ is known as the incremental elasticity tensor, and is analogous to the linear elasticity tensor $\mathsf C$ of {eq}`linear-elasticity-tensor`.
437We now evaluate $\diff \bm S$ for the Neo-Hookean model {eq}`neo-hookean-stress`,
438
439$$
440\diff\bm S = \frac{\partial \bm S}{\partial \bm E} \!:\! \diff \bm E
441= \lambda (\bm C^{-1} \!:\! \diff\bm E) \bm C^{-1}
442  + 2 (\mu - \lambda \log J) \bm C^{-1} \diff\bm E \, \bm C^{-1},
443$$ (eq-neo-hookean-incremental-stress)
444
445where we have used
446
447$$
448\diff \bm C^{-1} = \frac{\partial \bm C^{-1}}{\partial \bm E} \!:\! \diff\bm E = -2 \bm C^{-1} \diff \bm E \, \bm C^{-1} .
449$$
450
451:::{note}
452In the small-strain limit, $\bm C \to \bm I_3$ and $\log J \to 0$, thereby reducing {eq}`eq-neo-hookean-incremental-stress` to the St. Venant-Kirchoff model {eq}`eq-st-venant-kirchoff`.
453:::
454
455:::{dropdown} Newton linearization of Mooney-Rivlin
456Similar to {eq}`eq-neo-hookean-incremental-stress`, we differentiate {eq}`mooney-rivlin-stress_coupled` using variational notation,
457
458$$
459\begin{aligned}
460\diff\bm S &= \lambda (\bm C^{-1} \tcolon \diff\bm E) \bm C^{-1} \\
461&\quad + 2(\mu_1 + 2\mu_2 - \lambda \log J) \bm C^{-1} \diff\bm E \bm C^{-1} \\
462&\quad + 2 \mu_2 \Big[ \trace (\diff\bm E) \bm I_3 - \diff\bm E\Big] .
463\end{aligned}
464$$ (mooney-rivlin-dS-coupled)
465
466Note that this agrees with {eq}`eq-neo-hookean-incremental-stress` if $\mu_1 = \mu, \mu_2 = 0$.
467Moving from Neo-Hookean to Mooney-Rivlin modifies the second term and adds the third.
468:::
469
470:::{dropdown} Cancellation vs symmetry
471Some cancellation is possible (at the expense of symmetry) if we substitute {eq}`eq-neo-hookean-incremental-stress` into {eq}`eq-diff-P`,
472
473$$
474\begin{aligned}
475\diff \bm P &= \diff \bm F\, \bm S
476  + \lambda (\bm C^{-1} : \diff \bm E) \bm F^{-T} + 2(\mu - \lambda \log J) \bm F^{-T} \diff\bm E \, \bm C^{-1} \\
477&= \diff \bm F\, \bm S
478  + \lambda (\bm F^{-T} : \diff \bm F) \bm F^{-T} + (\mu - \lambda \log J) \bm F^{-T} (\bm F^T \diff \bm F + \diff \bm F^T \bm F) \bm C^{-1} \\
479&= \diff \bm F\, \bm S
480  + \lambda (\bm F^{-T} : \diff \bm F) \bm F^{-T} + (\mu - \lambda \log J) \Big( \diff \bm F\, \bm C^{-1} + \bm F^{-T} \diff \bm F^T \bm F^{-T} \Big),
481\end{aligned}
482$$ (eq-diff-P-dF)
483
484where we have exploited $\bm F \bm C^{-1} = \bm F^{-T}$ and
485
486$$
487\begin{aligned} \bm C^{-1} \!:\! \diff \bm E = \bm C_{IJ}^{-1} \diff \bm E_{IJ} &= \frac 1 2 \bm F_{Ik}^{-1} \bm F_{Jk}^{-1} (\bm F_{\ell I} \diff \bm F_{\ell J} + \diff \bm F_{\ell I} \bm F_{\ell J}) \\ &= \frac 1 2 \Big( \delta_{\ell k} \bm F_{Jk}^{-1} \diff \bm F_{\ell J} + \delta_{\ell k} \bm F_{Ik}^{-1} \diff \bm F_{\ell I} \Big) \\ &= \bm F_{Ik}^{-1} \diff \bm F_{kI} = \bm F^{-T} \!:\! \diff \bm F. \end{aligned}
488$$
489
490We prefer to compute with {eq}`eq-neo-hookean-incremental-stress` because {eq}`eq-diff-P-dF` is more expensive, requiring access to (non-symmetric) $\bm F^{-1}$ in addition to (symmetric) $\bm C^{-1} = \bm F^{-1} \bm F^{-T}$, having fewer symmetries to exploit in contractions, and being less numerically stable.
491:::
492
493:::{dropdown} $\diff\bm S$ in index notation
494It is sometimes useful to express {eq}`eq-neo-hookean-incremental-stress` in index notation,
495
496$$
497\begin{aligned}
498\diff\bm S_{IJ} &= \frac{\partial \bm S_{IJ}}{\partial \bm E_{KL}} \diff \bm E_{KL} \\
499  &= \lambda (\bm C^{-1}_{KL} \diff\bm E_{KL}) \bm C^{-1}_{IJ} + 2 (\mu - \lambda \log J) \bm C^{-1}_{IK} \diff\bm E_{KL} \bm C^{-1}_{LJ} \\
500  &= \underbrace{\Big( \lambda \bm C^{-1}_{IJ} \bm C^{-1}_{KL} + 2 (\mu - \lambda \log J) \bm C^{-1}_{IK} \bm C^{-1}_{JL} \Big)}_{\mathsf C_{IJKL}} \diff \bm E_{KL} \,,
501\end{aligned}
502$$ (eq-neo-hookean-incremental-stress-index)
503
504where we have identified the effective elasticity tensor $\mathsf C = \mathsf C_{IJKL}$.
505It is generally not desirable to store $\mathsf C$, but rather to use the earlier expressions so that only $3\times 3$ tensors (most of which are symmetric) must be manipulated.
506That is, given the linearization point $\bm F$ and solution increment $\diff \bm F = \nabla_X (\diff \bm u)$ (which we are solving for in the Newton step), we compute $\diff \bm P$ via
507
5081. recover $\bm C^{-1}$ and $\log J$ (either stored at quadrature points or recomputed),
5092. proceed with $3\times 3$ matrix products as in {eq}`eq-neo-hookean-incremental-stress` or the second line of {eq}`eq-neo-hookean-incremental-stress-index` to compute $\diff \bm S$ while avoiding computation or storage of higher order tensors, and
5103. conclude by {eq}`eq-diff-P`, where $\bm S$ is either stored or recomputed from its definition exactly as in the nonlinear residual evaluation.
511:::
512
513Note that the Newton linearization of {eq}`hyperelastic-weak-form-initial` may be written as a weak form for linear operators: find $\diff\bm u \in \mathcal V_0$ such that
514
515$$
516\int_{\Omega_0} \nabla_X \bm v \!:\! \diff\bm P dV = \text{rhs}, \quad \forall \bm v \in \mathcal V_0,
517$$
518
519where $\diff \bm P$ is defined by {eq}`eq-diff-P` and {eq}`eq-neo-hookean-incremental-stress`, and $\mathcal V_0$ is the homogeneous space corresponding to $\mathcal V$.
520
521:::{note}
522The decision of whether to recompute or store functions of the current state $\bm F$ depends on a roofline analysis {cite}`williams2009roofline,brown2010` of the computation and the cost of the constitutive model.
523For low-order elements where flops tend to be in surplus relative to memory bandwidth, recomputation is likely to be preferable, where as the opposite may be true for high-order elements.
524Similarly, analysis with a simple constitutive model may see better performance while storing little or nothing while an expensive model such as Arruda-Boyce {cite}`arruda1993largestretch`, which contains many special functions, may be faster when using more storage to avoid recomputation.
525In the case where complete linearization is preferred, note the symmetry $\mathsf C_{IJKL} = \mathsf C_{KLIJ}$ evident in {eq}`eq-neo-hookean-incremental-stress-index`, thus $\mathsf C$ can be stored as a symmetric $6\times 6$ matrix, which has 21 unique entries.
526Along with 6 entries for $\bm S$, this totals 27 entries of overhead compared to computing everything from $\bm F$.
527This compares with 13 entries of overhead for direct storage of $\{ \bm S, \bm C^{-1}, \log J \}$, which is sufficient for the Neo-Hookean model to avoid all but matrix products.
528:::
529