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