xref: /libCEED/examples/solids/index.md (revision 525f58efad3fdbd516b1ca0b43ee04d6060753fc)
1bcb2dfaeSJed Brown(example-petsc-elasticity)=
2bcb2dfaeSJed Brown
3bcb2dfaeSJed Brown# Solid mechanics mini-app
4bcb2dfaeSJed Brown
5bcb2dfaeSJed BrownThis example is located in the subdirectory {file}`examples/solids`.
6bcb2dfaeSJed BrownIt solves the steady-state static momentum balance equations using unstructured high-order finite/spectral element spatial discretizations.
7bcb2dfaeSJed BrownAs 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.
8bcb2dfaeSJed Brown
9bcb2dfaeSJed BrownIn 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.
10bcb2dfaeSJed BrownWe provide the strong and weak forms of static balance of linear momentum in the small strain and finite strain regimes.
11bcb2dfaeSJed BrownThe stress-strain relationship (constitutive law) for each of the material models is provided.
12bcb2dfaeSJed BrownDue to the nonlinearity of material models in Neo-Hookean hyperelasticity, the Newton linearization of the material models is provided.
13bcb2dfaeSJed Brown
14bcb2dfaeSJed Brown:::{note}
15bcb2dfaeSJed BrownLinear elasticity and small-strain hyperelasticity can both by obtained from the finite-strain hyperelastic formulation by linearization of geometric and constitutive nonlinearities.
16bcb2dfaeSJed BrownThe 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.
17bcb2dfaeSJed Brown
18bcb2dfaeSJed Brown$$
19bcb2dfaeSJed Brown\begin{CD}
20bcb2dfaeSJed Brown  {\overbrace{\bm S(\bm E)}^{\text{Finite Strain Hyperelastic}}}
21bcb2dfaeSJed Brown  @>{\text{constitutive}}>{\text{linearization}}>
22bcb2dfaeSJed Brown  {\overbrace{\bm S = \mathsf C \bm E}^{\text{St. Venant-Kirchoff}}} \\
23bcb2dfaeSJed Brown  @V{\text{geometric}}V{\begin{smallmatrix}\bm E \to \bm \epsilon \\ \bm S \to \bm \sigma \end{smallmatrix}}V
24bcb2dfaeSJed Brown  @V{\begin{smallmatrix}\bm E \to \bm \epsilon \\ \bm S \to \bm \sigma \end{smallmatrix}}V{\text{geometric}}V \\
25bcb2dfaeSJed Brown  {\underbrace{\bm \sigma(\bm \epsilon)}_\text{Small Strain Hyperelastic}}
26bcb2dfaeSJed Brown  @>{\text{constitutive}}>\text{linearization}>
27bcb2dfaeSJed Brown  {\underbrace{\bm \sigma = \mathsf C \bm \epsilon}_\text{Linear Elastic}}
28bcb2dfaeSJed Brown\end{CD}
29bcb2dfaeSJed Brown$$ (hyperelastic-cd)
30bcb2dfaeSJed Brown:::
31bcb2dfaeSJed Brown
32bcb2dfaeSJed Brown(running-elasticity)=
33bcb2dfaeSJed Brown
34bcb2dfaeSJed Brown## Running the mini-app
35bcb2dfaeSJed Brown
36bcb2dfaeSJed Brown```{include} README.md
37*525f58efSJeremy L Thompson:start-after: <!-- solids-inclusion -->
38bcb2dfaeSJed Brown```
39bcb2dfaeSJed Brown
40bcb2dfaeSJed Brown(problem-linear-elasticity)=
41bcb2dfaeSJed Brown
42bcb2dfaeSJed Brown## Linear Elasticity
43bcb2dfaeSJed Brown
44bcb2dfaeSJed BrownThe strong form of the static balance of linear momentum at small strain for the three-dimensional linear elasticity problem is given by {cite}`hughes2012finite`:
45bcb2dfaeSJed Brown
46bcb2dfaeSJed Brown$$
47bcb2dfaeSJed Brown\nabla \cdot \bm{\sigma} + \bm{g} = \bm{0}
48bcb2dfaeSJed Brown$$ (lin-elas)
49bcb2dfaeSJed Brown
50bcb2dfaeSJed Brownwhere $\bm{\sigma}$ and $\bm{g}$ are stress and forcing functions, respectively.
518791656fSJed BrownWe 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
52bcb2dfaeSJed Brown
53bcb2dfaeSJed Brown$$
54bcb2dfaeSJed Brown\int_{\Omega}{ \nabla \bm{v} \tcolon \bm{\sigma}} \, dV
55bcb2dfaeSJed Brown- \int_{\partial \Omega}{\bm{v} \cdot \left(\bm{\sigma} \cdot \hat{\bm{n}}\right)} \, dS
56bcb2dfaeSJed Brown- \int_{\Omega}{\bm{v} \cdot \bm{g}} \, dV
57bcb2dfaeSJed Brown= 0, \quad \forall \bm v \in \mathcal V,
58bcb2dfaeSJed Brown$$ (lin-elas-weak)
59bcb2dfaeSJed Brown
60bcb2dfaeSJed Brownwhere $\bm{\sigma} \cdot \hat{\bm{n}}|_{\partial \Omega}$ is replaced by an applied force/traction boundary condition written in terms of the initial configuration.
61bcb2dfaeSJed BrownWhen inhomogeneous Dirichlet boundary conditions are present, $\mathcal V$ is an affine space that satisfies those boundary conditions.
62bcb2dfaeSJed Brown
63bcb2dfaeSJed Brown### Constitutive modeling
64bcb2dfaeSJed Brown
65bcb2dfaeSJed BrownIn their most general form, constitutive models define $\bm \sigma$ in terms of state variables.
66bcb2dfaeSJed BrownIn 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$.
67bcb2dfaeSJed BrownWe begin by defining the symmetric (small/infintesimal) strain tensor as
68bcb2dfaeSJed Brown
69bcb2dfaeSJed Brown$$
70bcb2dfaeSJed Brown\bm{\epsilon} = \dfrac{1}{2}\left(\nabla \bm{u} + \nabla \bm{u}^T \right).
71bcb2dfaeSJed Brown$$ (small-strain)
72bcb2dfaeSJed Brown
73bcb2dfaeSJed BrownThis 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.
74bcb2dfaeSJed BrownIn 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.
75bcb2dfaeSJed BrownIn particular, given an orthogonal transformation $Q$, we desire
76bcb2dfaeSJed Brown
77bcb2dfaeSJed Brown$$
78bcb2dfaeSJed BrownQ \bm \sigma(\bm \epsilon) Q^T = \bm \sigma(Q \bm \epsilon Q^T),
79bcb2dfaeSJed Brown$$ (elastic-invariance)
80bcb2dfaeSJed Brown
81bcb2dfaeSJed Brownwhich means that we can change our reference frame before or after computing $\bm \sigma$, and get the same result either way.
828791656fSJed BrownConstitutive 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.
83bcb2dfaeSJed BrownHere, we define a strain energy density functional $\Phi(\bm \epsilon) \in \mathbb R$ and obtain the strain energy from its gradient,
84bcb2dfaeSJed Brown
85bcb2dfaeSJed Brown$$
86bcb2dfaeSJed Brown\bm \sigma(\bm \epsilon) = \frac{\partial \Phi}{\partial \bm \epsilon}.
87bcb2dfaeSJed Brown$$ (strain-energy-grad)
88bcb2dfaeSJed Brown
89bcb2dfaeSJed Brown:::{note}
90bcb2dfaeSJed BrownThe strain energy density functional cannot be an arbitrary function $\Phi(\bm \epsilon)$; it can only depend on *invariants*, scalar-valued functions $\gamma$ satisfying
91bcb2dfaeSJed Brown
92bcb2dfaeSJed Brown$$
93bcb2dfaeSJed Brown\gamma(\bm \epsilon) = \gamma(Q \bm \epsilon Q^T)
94bcb2dfaeSJed Brown$$
95bcb2dfaeSJed Brown
96bcb2dfaeSJed Brownfor all orthogonal matrices $Q$.
97bcb2dfaeSJed Brown:::
98bcb2dfaeSJed Brown
99bcb2dfaeSJed BrownFor the linear elasticity model, the strain energy density is given by
100bcb2dfaeSJed Brown
101bcb2dfaeSJed Brown$$
102bcb2dfaeSJed Brown\bm{\Phi} = \frac{\lambda}{2} (\operatorname{trace} \bm{\epsilon})^2 + \mu \bm{\epsilon} : \bm{\epsilon} .
103bcb2dfaeSJed Brown$$
104bcb2dfaeSJed Brown
105bcb2dfaeSJed BrownThe constitutive law (stress-strain relationship) is therefore given by its gradient,
106bcb2dfaeSJed Brown
107bcb2dfaeSJed Brown$$
108bcb2dfaeSJed Brown\bm\sigma = \lambda (\operatorname{trace} \bm\epsilon) \bm I_3 + 2 \mu \bm\epsilon,
109bcb2dfaeSJed Brown$$
110bcb2dfaeSJed Brown
111bcb2dfaeSJed Brownwhere $\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
112bcb2dfaeSJed Brown
113bcb2dfaeSJed Brown$$
114bcb2dfaeSJed Brown\begin{aligned} \lambda &= \frac{E \nu}{(1 + \nu)(1 - 2 \nu)} \\ \mu &= \frac{E}{2(1 + \nu)} \end{aligned}.
115bcb2dfaeSJed Brown$$
116bcb2dfaeSJed Brown
117bcb2dfaeSJed BrownThe constitutive law (stress-strain relationship) can also be written as
118bcb2dfaeSJed Brown
119bcb2dfaeSJed Brown$$
120bcb2dfaeSJed Brown\bm{\sigma} = \mathsf{C} \!:\! \bm{\epsilon}.
121bcb2dfaeSJed Brown$$ (linear-stress-strain)
122bcb2dfaeSJed Brown
123bcb2dfaeSJed BrownFor 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).
124bcb2dfaeSJed BrownHence, the fourth order elasticity tensor $\mathsf C$ (also known as elastic moduli tensor or material stiffness tensor) can be represented as
125bcb2dfaeSJed Brown
126bcb2dfaeSJed Brown$$
127bcb2dfaeSJed Brown\mathsf C = \begin{pmatrix}
128bcb2dfaeSJed Brown\lambda + 2\mu & \lambda & \lambda & & & \\
129bcb2dfaeSJed Brown\lambda & \lambda + 2\mu & \lambda & & & \\
130bcb2dfaeSJed Brown\lambda & \lambda & \lambda + 2\mu & & & \\
131bcb2dfaeSJed Brown& & & \mu & & \\
132bcb2dfaeSJed Brown& & & & \mu & \\
133bcb2dfaeSJed Brown& & & & & \mu
134bcb2dfaeSJed Brown\end{pmatrix}.
135bcb2dfaeSJed Brown$$ (linear-elasticity-tensor)
136bcb2dfaeSJed Brown
137bcb2dfaeSJed BrownNote that the incompressible limit $\nu \to \frac 1 2$ causes $\lambda \to \infty$, and thus $\mathsf C$ becomes singular.
138bcb2dfaeSJed Brown
139bcb2dfaeSJed Brown(problem-hyper-small-strain)=
140bcb2dfaeSJed Brown
141bcb2dfaeSJed Brown## Hyperelasticity at Small Strain
142bcb2dfaeSJed Brown
1438791656fSJed BrownThe strong and weak forms given above, in {eq}`lin-elas` and {eq}`lin-elas-weak`, are valid for Neo-Hookean hyperelasticity at small strain.
144bcb2dfaeSJed BrownHowever, the strain energy density differs and is given by
145bcb2dfaeSJed Brown
146bcb2dfaeSJed Brown$$
147bcb2dfaeSJed Brown\bm{\Phi} = \lambda (1 + \operatorname{trace} \bm{\epsilon}) (\log(1 + \operatorname{trace} \bm\epsilon) - 1) + \mu \bm{\epsilon} : \bm{\epsilon} .
148bcb2dfaeSJed Brown$$
149bcb2dfaeSJed Brown
150bcb2dfaeSJed BrownAs above, we have the corresponding constitutive law given by
151bcb2dfaeSJed Brown
152bcb2dfaeSJed Brown$$
153bcb2dfaeSJed Brown\bm{\sigma} = \lambda \log(1 + \operatorname{trace} \bm\epsilon) \bm{I}_3 + 2\mu \bm{\epsilon}
154bcb2dfaeSJed Brown$$ (eq-neo-hookean-small-strain)
155bcb2dfaeSJed Brown
1568791656fSJed Brownwhere $\bm{\epsilon}$ is defined as in {eq}`small-strain`.
157bcb2dfaeSJed Brown
158bcb2dfaeSJed Brown### Newton linearization
159bcb2dfaeSJed Brown
1608791656fSJed BrownDue to nonlinearity in the constitutive law, we require a Newton linearization of {eq}`eq-neo-hookean-small-strain`.
161bcb2dfaeSJed BrownTo derive the Newton linearization, we begin by expressing the derivative,
162bcb2dfaeSJed Brown
163bcb2dfaeSJed Brown$$
164bcb2dfaeSJed Brown\diff \bm{\sigma} = \dfrac{\partial \bm{\sigma}}{\partial \bm{\epsilon}} \tcolon \diff \bm{\epsilon}
165bcb2dfaeSJed Brown$$
166bcb2dfaeSJed Brown
167bcb2dfaeSJed Brownwhere
168bcb2dfaeSJed Brown
169bcb2dfaeSJed Brown$$
170bcb2dfaeSJed Brown\diff \bm{\epsilon} = \dfrac{1}{2}\left( \nabla \diff \bm{u} + \nabla \diff \bm{u}^T \right)
171bcb2dfaeSJed Brown$$
172bcb2dfaeSJed Brown
173bcb2dfaeSJed Brownand
174bcb2dfaeSJed Brown
175bcb2dfaeSJed Brown$$
176bcb2dfaeSJed Brown\diff \nabla \bm{u} = \nabla \diff \bm{u} .
177bcb2dfaeSJed Brown$$
178bcb2dfaeSJed Brown
179bcb2dfaeSJed BrownTherefore,
180bcb2dfaeSJed Brown
181bcb2dfaeSJed Brown$$
182bcb2dfaeSJed Brown\diff \bm{\sigma}  = \bar{\lambda} \cdot \operatorname{trace} \diff \bm{\epsilon} \cdot \bm{I}_3 + 2\mu \diff \bm{\epsilon}
183bcb2dfaeSJed Brown$$ (derss)
184bcb2dfaeSJed Brown
185bcb2dfaeSJed Brownwhere we have introduced the symbol
186bcb2dfaeSJed Brown
187bcb2dfaeSJed Brown$$
188bcb2dfaeSJed Brown\bar{\lambda} = \dfrac{\lambda}{1 + \epsilon_v }
189bcb2dfaeSJed Brown$$
190bcb2dfaeSJed Brown
191bcb2dfaeSJed Brownwhere volumetric strain is given by $\epsilon_v = \sum_i \epsilon_{ii}$.
192bcb2dfaeSJed Brown
1938791656fSJed BrownEquation {eq}`derss` can be written in Voigt matrix notation as follows:
194bcb2dfaeSJed Brown
195bcb2dfaeSJed Brown$$
196bcb2dfaeSJed Brown\begin{pmatrix}
197bcb2dfaeSJed Brown  \diff \sigma_{11} \\
198bcb2dfaeSJed Brown  \diff \sigma_{22} \\
199bcb2dfaeSJed Brown  \diff \sigma_{33} \\
200bcb2dfaeSJed Brown  \diff \sigma_{23} \\
201bcb2dfaeSJed Brown  \diff \sigma_{13} \\
202bcb2dfaeSJed Brown  \diff \sigma_{12}
203bcb2dfaeSJed Brown\end{pmatrix}  =
204bcb2dfaeSJed Brown\begin{pmatrix}
205bcb2dfaeSJed Brown  2 \mu +\bar{\lambda} & \bar{\lambda} & \bar{\lambda} & & & \\
206bcb2dfaeSJed Brown  \bar{\lambda} & 2 \mu +\bar{\lambda} & \bar{\lambda} & & & \\
207bcb2dfaeSJed Brown  \bar{\lambda} & \bar{\lambda} & 2 \mu +\bar{\lambda} & & & \\
208bcb2dfaeSJed Brown  & & & \mu & & \\
209bcb2dfaeSJed Brown  & & & & \mu & \\
210bcb2dfaeSJed Brown  & & & & & \mu \\
211bcb2dfaeSJed Brown\end{pmatrix}
212bcb2dfaeSJed Brown\begin{pmatrix}
213bcb2dfaeSJed Brown  \diff \epsilon_{11} \\
214bcb2dfaeSJed Brown  \diff \epsilon_{22} \\
215bcb2dfaeSJed Brown  \diff \epsilon_{33} \\
216bcb2dfaeSJed Brown  2 \diff \epsilon_{23} \\
217bcb2dfaeSJed Brown  2 \diff \epsilon_{13} \\
218bcb2dfaeSJed Brown  2 \diff \epsilon_{12}
219bcb2dfaeSJed Brown\end{pmatrix}.
220bcb2dfaeSJed Brown$$ (mdss)
221bcb2dfaeSJed Brown
222bcb2dfaeSJed Brown(problem-hyperelasticity-finite-strain)=
223bcb2dfaeSJed Brown
224bcb2dfaeSJed Brown## Hyperelasticity at Finite Strain
225bcb2dfaeSJed Brown
226bcb2dfaeSJed BrownIn the *total Lagrangian* approach for the Neo-Hookean hyperelasticity problem, the discrete equations are formulated with respect to the initial configuration.
227bcb2dfaeSJed BrownIn this formulation, we solve for displacement $\bm u(\bm X)$ in the reference frame $\bm X$.
228bcb2dfaeSJed BrownThe notation for elasticity at finite strain is inspired by {cite}`holzapfel2000nonlinear` to distinguish between the current and initial configurations.
229bcb2dfaeSJed BrownAs explained in the {ref}`common-notation` section, we denote by capital letters the reference frame and by small letters the current one.
230bcb2dfaeSJed Brown
231bcb2dfaeSJed BrownThe strong form of the static balance of linear-momentum at *finite strain* (total Lagrangian) is given by:
232bcb2dfaeSJed Brown
233bcb2dfaeSJed Brown$$
234bcb2dfaeSJed Brown- \nabla_X \cdot \bm{P} - \rho_0 \bm{g} = \bm{0}
235bcb2dfaeSJed Brown$$ (sblFinS)
236bcb2dfaeSJed Brown
237bcb2dfaeSJed Brownwhere the $_X$ in $\nabla_X$ indicates that the gradient is calculated with respect to the initial configuration in the finite strain regime.
238bcb2dfaeSJed Brown$\bm{P}$ and $\bm{g}$ are the *first Piola-Kirchhoff stress* tensor and the prescribed forcing function, respectively.
239bcb2dfaeSJed Brown$\rho_0$ is known as the *initial* mass density.
240bcb2dfaeSJed BrownThe tensor $\bm P$ is not symmetric, living in the current configuration on the left and the initial configuration on the right.
241bcb2dfaeSJed Brown
242bcb2dfaeSJed Brown$\bm{P}$ can be decomposed as
243bcb2dfaeSJed Brown
244bcb2dfaeSJed Brown$$
245bcb2dfaeSJed Brown\bm{P} = \bm{F} \, \bm{S},
246bcb2dfaeSJed Brown$$ (1st2nd)
247bcb2dfaeSJed Brown
248bcb2dfaeSJed Brownwhere $\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.
249bcb2dfaeSJed BrownDifferent constitutive models can define $\bm S$.
250bcb2dfaeSJed Brown
251bcb2dfaeSJed Brown### Constitutive modeling
252bcb2dfaeSJed Brown
253bcb2dfaeSJed BrownFor the constitutive modeling of hyperelasticity at finite strain, we begin by defining two symmetric tensors in the initial configuration, the right Cauchy-Green tensor
254bcb2dfaeSJed Brown
255bcb2dfaeSJed Brown$$
256bcb2dfaeSJed Brown\bm C = \bm F^T \bm F
257bcb2dfaeSJed Brown$$
258bcb2dfaeSJed Brown
259bcb2dfaeSJed Brownand the Green-Lagrange strain tensor
260bcb2dfaeSJed Brown
261bcb2dfaeSJed Brown$$
262bcb2dfaeSJed Brown\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),
263bcb2dfaeSJed Brown$$ (eq-green-lagrange-strain)
264bcb2dfaeSJed Brown
265bcb2dfaeSJed Brownthe latter of which converges to the linear strain tensor $\bm \epsilon$ in the small-deformation limit.
2668791656fSJed BrownThe 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$.
267bcb2dfaeSJed Brown
268bcb2dfaeSJed BrownRecall that the strain energy density functional can only depend upon invariants.
269bcb2dfaeSJed BrownWe will assume without loss of generality that $\bm E$ is diagonal and take its set of eigenvalues as the invariants.
270bcb2dfaeSJed BrownIt 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.
271bcb2dfaeSJed BrownIt is common in the literature for invariants to be taken from $\bm C = \bm I_3 + 2 \bm E$ instead of $\bm E$.
272bcb2dfaeSJed Brown
273bcb2dfaeSJed BrownFor example, if we take the compressible Neo-Hookean model,
274bcb2dfaeSJed Brown
275bcb2dfaeSJed Brown$$
276bcb2dfaeSJed Brown\begin{aligned}
277bcb2dfaeSJed Brown\Phi(\bm E) &= \frac{\lambda}{2}(\log J)^2 - \mu \log J + \frac \mu 2 (\operatorname{trace} \bm C - 3) \\
278bcb2dfaeSJed Brown  &= \frac{\lambda}{2}(\log J)^2 - \mu \log J + \mu \operatorname{trace} \bm E,
279bcb2dfaeSJed Brown\end{aligned}
280bcb2dfaeSJed Brown$$ (neo-hookean-energy)
281bcb2dfaeSJed Brown
282bcb2dfaeSJed Brownwhere $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.
283bcb2dfaeSJed Brown
2848791656fSJed BrownTo evaluate {eq}`strain-energy-grad`, we make use of
285bcb2dfaeSJed Brown
286bcb2dfaeSJed Brown$$
287bcb2dfaeSJed Brown\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},
288bcb2dfaeSJed Brown$$
289bcb2dfaeSJed Brown
290bcb2dfaeSJed Brownwhere the factor of $\frac 1 2$ has been absorbed due to $\bm C = \bm I_3 + 2 \bm E.$
2918791656fSJed BrownCarrying through the differentiation {eq}`strain-energy-grad` for the model {eq}`neo-hookean-energy`, we arrive at
292bcb2dfaeSJed Brown
293bcb2dfaeSJed Brown$$
294bcb2dfaeSJed Brown\bm S = \lambda \log J \bm C^{-1} + \mu (\bm I_3 - \bm C^{-1}).
295bcb2dfaeSJed Brown$$ (neo-hookean-stress)
296bcb2dfaeSJed Brown
297bcb2dfaeSJed Brown:::{tip}
2988791656fSJed BrownAn equivalent form of {eq}`neo-hookean-stress` is
299bcb2dfaeSJed Brown
300bcb2dfaeSJed Brown$$
301bcb2dfaeSJed Brown\bm S = \lambda \log J \bm C^{-1} + 2 \mu \bm C^{-1} \bm E,
302bcb2dfaeSJed Brown$$ (neo-hookean-stress-stable)
303bcb2dfaeSJed Brown
304bcb2dfaeSJed Brownwhich is more numerically stable for small $\bm E$, and thus preferred for computation.
3058791656fSJed BrownNote that the product $\bm C^{-1} \bm E$ is also symmetric, and that $\bm E$ should be computed using {eq}`eq-green-lagrange-strain`.
306bcb2dfaeSJed Brown
307bcb2dfaeSJed BrownSimilarly, it is preferable to compute $\log J$ using `log1p`, especially in case of nearly incompressible materials.
308bcb2dfaeSJed BrownTo 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)$.
309bcb2dfaeSJed BrownThen we compute
310bcb2dfaeSJed Brown
311bcb2dfaeSJed Brown$$
312bcb2dfaeSJed Brown\log J = \mathtt{log1p}(u_{0,0} + u_{1,1} + u_{0,0} u_{1,1} - u_{0,1} u_{1,0}),
313bcb2dfaeSJed Brown$$ (log1p)
314bcb2dfaeSJed Brown
315bcb2dfaeSJed Brownwhich gives accurate results even in the limit when the entries $u_{i,j}$ are very small.
316bcb2dfaeSJed BrownFor 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.
317bcb2dfaeSJed BrownWhen using the stable choices above, these quantities retain full $\varepsilon_{\text{machine}}$ relative accuracy.
318bcb2dfaeSJed Brown:::
319bcb2dfaeSJed Brown
320bcb2dfaeSJed Brown:::{dropdown} Mooney-Rivlin model
321bcb2dfaeSJed BrownWhile 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)$.
3228791656fSJed BrownA coupled Mooney-Rivlin strain energy density (cf. Neo-Hookean {eq}`neo-hookean-energy`) is {cite}`holzapfel2000nonlinear`
323bcb2dfaeSJed Brown
324bcb2dfaeSJed Brown$$
325bcb2dfaeSJed Brown\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).
326bcb2dfaeSJed Brown$$ (mooney-rivlin-energy_coupled)
327bcb2dfaeSJed Brown
3288791656fSJed BrownWe differentiate $\Phi$ as in the Neo-Hookean case {eq}`neo-hookean-stress` to yield the second Piola-Kirchoff tensor,
329bcb2dfaeSJed Brown
330bcb2dfaeSJed Brown$$
331bcb2dfaeSJed Brown\begin{aligned}
332bcb2dfaeSJed Brown\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) \\
333bcb2dfaeSJed Brown&= (\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,
334bcb2dfaeSJed Brown\end{aligned}
335bcb2dfaeSJed Brown$$ (mooney-rivlin-stress_coupled)
336bcb2dfaeSJed Brown
337bcb2dfaeSJed Brownwhere we have used
338bcb2dfaeSJed Brown
339bcb2dfaeSJed Brown$$
340bcb2dfaeSJed Brown\begin{aligned}
341bcb2dfaeSJed Brown\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}.
342bcb2dfaeSJed Brown\end{aligned}
343bcb2dfaeSJed Brown$$ (None)
344bcb2dfaeSJed Brown
345bcb2dfaeSJed BrownThis 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$.
346bcb2dfaeSJed Brown:::
347bcb2dfaeSJed Brown
348bcb2dfaeSJed Brown:::{dropdown} Mooney-Rivlin strain energy comparison
349bcb2dfaeSJed BrownWe apply traction to a block and plot integrated strain energy $\Phi$ as a function of the loading paramater.
350bcb2dfaeSJed Brown
35168e843eeSJed Brown```{altair-plot}
352bcb2dfaeSJed Brown:hide-code:
353bcb2dfaeSJed Brown
354bcb2dfaeSJed Brownimport altair as alt
355bcb2dfaeSJed Brownimport pandas as pd
35615f4bfc5SJed Browndef source_path(rel):
35715f4bfc5SJed Brown    import os
35815f4bfc5SJed Brown    return os.path.join(os.path.dirname(os.environ["DOCUTILSCONFIG"]), rel)
35915f4bfc5SJed Brown
360ffa5d67cSJeremy L Thompsonnh = pd.read_csv(source_path("examples/solids/tests-output/NH-strain.csv"))
361bcb2dfaeSJed Brownnh["model"] = "Neo-Hookean"
362bcb2dfaeSJed Brownnh["parameters"] = "E=2.8, nu=0.4"
363bcb2dfaeSJed Brown
364ffa5d67cSJeremy L Thompsonmr = pd.read_csv(source_path("examples/solids/tests-output/MR-strain.csv"))
365bcb2dfaeSJed Brownmr["model"] = "Mooney-Rivlin; Neo-Hookean equivalent"
366bcb2dfaeSJed Brownmr["parameters"] = "mu_1=1, mu_2=0, nu=.4"
367bcb2dfaeSJed Brown
368ffa5d67cSJeremy L Thompsonmr1 = pd.read_csv(source_path("examples/solids/tests-output/MR-strain1.csv"))
369bcb2dfaeSJed Brownmr1["model"] = "Mooney-Rivlin"
370bcb2dfaeSJed Brownmr1["parameters"] = "mu_1=0.5, mu_2=0.5, nu=.4"
371bcb2dfaeSJed Brown
372bcb2dfaeSJed Browndf = pd.concat([nh, mr, mr1])
373c70a677fSJed Brownhighlight = alt.selection_point(
374bcb2dfaeSJed Brown   on = "mouseover",
375bcb2dfaeSJed Brown   nearest = True,
376bcb2dfaeSJed Brown   fields=["model", "parameters"],
377bcb2dfaeSJed Brown)
378bcb2dfaeSJed Brownbase = alt.Chart(df).encode(
379bcb2dfaeSJed Brown   alt.X("increment"),
380bcb2dfaeSJed Brown   alt.Y("energy", scale=alt.Scale(type="sqrt")),
381bcb2dfaeSJed Brown   alt.Color("model"),
382bcb2dfaeSJed Brown   alt.Tooltip(("model", "parameters")),
383bcb2dfaeSJed Brown   opacity=alt.condition(highlight, alt.value(1), alt.value(.5)),
384bcb2dfaeSJed Brown   size=alt.condition(highlight, alt.value(2), alt.value(1)),
385bcb2dfaeSJed Brown)
386c70a677fSJed Brownbase.mark_point().add_params(highlight) + base.mark_line()
387bcb2dfaeSJed Brown```
388bcb2dfaeSJed Brown:::
389bcb2dfaeSJed Brown
390bcb2dfaeSJed Brown:::{note}
3918791656fSJed BrownOne 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
392bcb2dfaeSJed Brown
393bcb2dfaeSJed Brown$$
394bcb2dfaeSJed Brown\bm S = \lambda (\trace \bm E) \bm I_3 + 2 \mu \bm E,
395bcb2dfaeSJed Brown$$ (eq-st-venant-kirchoff)
396bcb2dfaeSJed Brown
3978791656fSJed Brownwhich is the St. Venant-Kirchoff model (constitutive linearization without geometric linearization; see {eq}`hyperelastic-cd`).
398bcb2dfaeSJed Brown
399bcb2dfaeSJed BrownThis model can be used for geometrically nonlinear mechanics (e.g., snap-through of thin structures), but is inappropriate for large strain.
400bcb2dfaeSJed Brown
4018791656fSJed BrownAlternatively, 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`).
402bcb2dfaeSJed Brown:::
403bcb2dfaeSJed Brown
404bcb2dfaeSJed Brown### Weak form
405bcb2dfaeSJed Brown
4068791656fSJed BrownWe multiply {eq}`sblFinS` by a test function $\bm v$ and integrate by parts to obtain the weak form for finite-strain hyperelasticity:
407bcb2dfaeSJed Brownfind $\bm u \in \mathcal V \subset H^1(\Omega_0)$ such that
408bcb2dfaeSJed Brown
409bcb2dfaeSJed Brown$$
410bcb2dfaeSJed Brown\int_{\Omega_0}{\nabla_X \bm{v} \tcolon \bm{P}} \, dV
411bcb2dfaeSJed Brown - \int_{\Omega_0}{\bm{v} \cdot \rho_0 \bm{g}} \, dV
412bcb2dfaeSJed Brown - \int_{\partial \Omega_0}{\bm{v} \cdot (\bm{P} \cdot \hat{\bm{N}})} \, dS
413bcb2dfaeSJed Brown = 0, \quad \forall \bm v \in \mathcal V,
414bcb2dfaeSJed Brown$$ (hyperelastic-weak-form-initial)
415bcb2dfaeSJed Brown
416bcb2dfaeSJed Brownwhere $\bm{P} \cdot \hat{\bm{N}}|_{\partial\Omega}$ is replaced by any prescribed force/traction boundary condition written in terms of the initial configuration.
417bcb2dfaeSJed BrownThis 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.
4188791656fSJed BrownDiscretization of {eq}`hyperelastic-weak-form-initial` produces a finite-dimensional system of nonlinear algebraic equations, which we solve using Newton-Raphson methods.
419bcb2dfaeSJed BrownOne 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.
420bcb2dfaeSJed Brown
421bcb2dfaeSJed Brown### Newton linearization
422bcb2dfaeSJed Brown
4238791656fSJed BrownTo derive a Newton linearization of {eq}`hyperelastic-weak-form-initial`, we begin by expressing the derivative of {eq}`1st2nd` in incremental form,
424bcb2dfaeSJed Brown
425bcb2dfaeSJed Brown$$
426bcb2dfaeSJed Brown\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}
427bcb2dfaeSJed Brown$$ (eq-diff-P)
428bcb2dfaeSJed Brown
429bcb2dfaeSJed Brownwhere
430bcb2dfaeSJed Brown
431bcb2dfaeSJed Brown$$
432bcb2dfaeSJed Brown\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)
433bcb2dfaeSJed Brown$$
434bcb2dfaeSJed Brown
435bcb2dfaeSJed Brownand $\diff\bm F = \nabla_X\diff\bm u$.
4368791656fSJed BrownThe 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`.
4378791656fSJed BrownWe now evaluate $\diff \bm S$ for the Neo-Hookean model {eq}`neo-hookean-stress`,
438bcb2dfaeSJed Brown
439bcb2dfaeSJed Brown$$
440bcb2dfaeSJed Brown\diff\bm S = \frac{\partial \bm S}{\partial \bm E} \!:\! \diff \bm E
441bcb2dfaeSJed Brown= \lambda (\bm C^{-1} \!:\! \diff\bm E) \bm C^{-1}
442bcb2dfaeSJed Brown  + 2 (\mu - \lambda \log J) \bm C^{-1} \diff\bm E \, \bm C^{-1},
443bcb2dfaeSJed Brown$$ (eq-neo-hookean-incremental-stress)
444bcb2dfaeSJed Brown
445bcb2dfaeSJed Brownwhere we have used
446bcb2dfaeSJed Brown
447bcb2dfaeSJed Brown$$
448bcb2dfaeSJed Brown\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} .
449bcb2dfaeSJed Brown$$
450bcb2dfaeSJed Brown
451bcb2dfaeSJed Brown:::{note}
4528791656fSJed BrownIn 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`.
453bcb2dfaeSJed Brown:::
454bcb2dfaeSJed Brown
455bcb2dfaeSJed Brown:::{dropdown} Newton linearization of Mooney-Rivlin
4568791656fSJed BrownSimilar to {eq}`eq-neo-hookean-incremental-stress`, we differentiate {eq}`mooney-rivlin-stress_coupled` using variational notation,
457bcb2dfaeSJed Brown
458bcb2dfaeSJed Brown$$
459bcb2dfaeSJed Brown\begin{aligned}
460bcb2dfaeSJed Brown\diff\bm S &= \lambda (\bm C^{-1} \tcolon \diff\bm E) \bm C^{-1} \\
461bcb2dfaeSJed Brown&\quad + 2(\mu_1 + 2\mu_2 - \lambda \log J) \bm C^{-1} \diff\bm E \bm C^{-1} \\
462bcb2dfaeSJed Brown&\quad + 2 \mu_2 \Big[ \trace (\diff\bm E) \bm I_3 - \diff\bm E\Big] .
463bcb2dfaeSJed Brown\end{aligned}
464bcb2dfaeSJed Brown$$ (mooney-rivlin-dS-coupled)
465bcb2dfaeSJed Brown
4668791656fSJed BrownNote that this agrees with {eq}`eq-neo-hookean-incremental-stress` if $\mu_1 = \mu, \mu_2 = 0$.
467bcb2dfaeSJed BrownMoving from Neo-Hookean to Mooney-Rivlin modifies the second term and adds the third.
468bcb2dfaeSJed Brown:::
469bcb2dfaeSJed Brown
470bcb2dfaeSJed Brown:::{dropdown} Cancellation vs symmetry
4718791656fSJed BrownSome cancellation is possible (at the expense of symmetry) if we substitute {eq}`eq-neo-hookean-incremental-stress` into {eq}`eq-diff-P`,
472bcb2dfaeSJed Brown
473bcb2dfaeSJed Brown$$
474bcb2dfaeSJed Brown\begin{aligned}
475bcb2dfaeSJed Brown\diff \bm P &= \diff \bm F\, \bm S
476bcb2dfaeSJed Brown  + \lambda (\bm C^{-1} : \diff \bm E) \bm F^{-T} + 2(\mu - \lambda \log J) \bm F^{-T} \diff\bm E \, \bm C^{-1} \\
477bcb2dfaeSJed Brown&= \diff \bm F\, \bm S
478bcb2dfaeSJed Brown  + \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} \\
479bcb2dfaeSJed Brown&= \diff \bm F\, \bm S
480bcb2dfaeSJed Brown  + \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),
481bcb2dfaeSJed Brown\end{aligned}
482bcb2dfaeSJed Brown$$ (eq-diff-P-dF)
483bcb2dfaeSJed Brown
484bcb2dfaeSJed Brownwhere we have exploited $\bm F \bm C^{-1} = \bm F^{-T}$ and
485bcb2dfaeSJed Brown
486bcb2dfaeSJed Brown$$
487bcb2dfaeSJed Brown\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}
488bcb2dfaeSJed Brown$$
489bcb2dfaeSJed Brown
4908791656fSJed BrownWe 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.
491bcb2dfaeSJed Brown:::
492bcb2dfaeSJed Brown
493bcb2dfaeSJed Brown:::{dropdown} $\diff\bm S$ in index notation
4948791656fSJed BrownIt is sometimes useful to express {eq}`eq-neo-hookean-incremental-stress` in index notation,
495bcb2dfaeSJed Brown
496bcb2dfaeSJed Brown$$
497bcb2dfaeSJed Brown\begin{aligned}
498bcb2dfaeSJed Brown\diff\bm S_{IJ} &= \frac{\partial \bm S_{IJ}}{\partial \bm E_{KL}} \diff \bm E_{KL} \\
499bcb2dfaeSJed Brown  &= \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} \\
500bcb2dfaeSJed Brown  &= \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} \,,
501bcb2dfaeSJed Brown\end{aligned}
502bcb2dfaeSJed Brown$$ (eq-neo-hookean-incremental-stress-index)
503bcb2dfaeSJed Brown
504bcb2dfaeSJed Brownwhere we have identified the effective elasticity tensor $\mathsf C = \mathsf C_{IJKL}$.
505bcb2dfaeSJed BrownIt 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.
506bcb2dfaeSJed BrownThat 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
507bcb2dfaeSJed Brown
508bcb2dfaeSJed Brown1. recover $\bm C^{-1}$ and $\log J$ (either stored at quadrature points or recomputed),
5098791656fSJed Brown2. 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
5108791656fSJed Brown3. conclude by {eq}`eq-diff-P`, where $\bm S$ is either stored or recomputed from its definition exactly as in the nonlinear residual evaluation.
511bcb2dfaeSJed Brown:::
512bcb2dfaeSJed Brown
5138791656fSJed BrownNote 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
514bcb2dfaeSJed Brown
515bcb2dfaeSJed Brown$$
516bcb2dfaeSJed Brown\int_{\Omega_0} \nabla_X \bm v \!:\! \diff\bm P dV = \text{rhs}, \quad \forall \bm v \in \mathcal V_0,
517bcb2dfaeSJed Brown$$
518bcb2dfaeSJed Brown
5198791656fSJed Brownwhere $\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$.
520bcb2dfaeSJed Brown
521bcb2dfaeSJed Brown:::{note}
522bcb2dfaeSJed BrownThe 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.
523bcb2dfaeSJed BrownFor 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.
524bcb2dfaeSJed BrownSimilarly, 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.
5258791656fSJed BrownIn 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.
526bcb2dfaeSJed BrownAlong with 6 entries for $\bm S$, this totals 27 entries of overhead compared to computing everything from $\bm F$.
527bcb2dfaeSJed BrownThis 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.
528bcb2dfaeSJed Brown:::
529