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: <!-- solids-inclusion --> 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