Hyperelastic materials

Isotropic models

Neo-Hookean

Constitutive theory

In the total Lagrangian approach for the neo-Hookean constitutive model, the model is formulated with respect to the initial configuration. Our notation for the neo-Hookean constitutive model is inspired by [Hol00] to distinguish between the current and initial configurations. As explained in the Continuum Mechanics section, we denote coordinates in the reference frame by capital letters and the current frame by lowercase letters.

For the constitutive modeling of neo-Hookean hyperelasticity at finite strain, we will assume without loss of generality that \(\bm{E}\) is diagonal and take its set of eigenvalues as the invariants. It is clear that there can be only three invariants, and there are many alternate choices, such as \(\trace \left( \bm{E} \right), \trace\left( \bm{E}^2 \right), \lvert \bm{E} \rvert\), and combinations thereof. It is common in the literature for invariants to be taken from \(\bm{C} = \bm{I} + 2 \bm{E}\) instead of \(\bm{E}\).

The compressible neo-Hookean model is a function of two invariants \(\mathbb{I}_1(\bm{C})\) and \(J\)

(83)\[ \begin{aligned} \psi \left(\bm{E} \right) &= \firstlame V(J) - \secondlame \log J + \frac \secondlame 2 \left( \trace \bm{C} - 3 \right) \\ &= \frac{\firstlame}{4} \left( J^2 - 1 -2 \log J \right) - \secondlame \log J + \secondlame \trace \bm{E}, \end{aligned} \]

where \(J = \lvert \bm{F} \rvert = \sqrt{\lvert \bm{C} \rvert}\) is the determinant of deformation (i.e., volume change (9)) and \(\firstlame\) and \(\secondlame\) are the Lamé parameters in the infinitesimal strain limit.

Convex and non-convex energy comparison

The global existence theory of the solution in elasticity is based on the polyconvexity of the strain energy function [Hol00]. To require this condition, the volumetric part of the strain energy function has to satisfy the convexity condition

\[ \frac{\partial^2 \psi_{\text{vol}}}{\partial J^2} \geq 0. \]

One of the commonly used form for \(\psi_{\text{vol}}\) is

\[ \psi_{\text{vol}}(J) = \firstlame V(J) = \frac{\firstlame}{2} (\log J)^2 \]

which is valid when \(J \approx 1\). We apply traction and slip boundary conditions on the faces of the block so the deformation is volumetric only. The convex strain energy (83) and the non-convex form are plotted vs time increment.

Click to show code
import altair as alt
import pandas as pd
def source_path(rel):
    import os
    return os.path.join(os.path.dirname(os.environ["DOCUTILSCONFIG"]), rel)

nh_convex = pd.read_csv(source_path("doc/data/NH-convex-energy.csv"))
nh_convex["model"] = "Convex neo-Hookean"
nh_convex["parameters"] = "E=2.8, nu=0.4"

nh_nonconvex = pd.read_csv(source_path("doc/data/NH-nonconvex-energy.csv"))
nh_nonconvex["model"] = "Non-convex neo-Hookean"
nh_nonconvex["parameters"] = "E=2.8, nu=0.4"

df = pd.concat([nh_convex, nh_nonconvex])
highlight = alt.selection_point(
   on = "mouseover",
   nearest = True,
   fields=["model", "parameters"],
)
base = alt.Chart(df).encode(
   alt.X("increment"),
   alt.Y("energy", scale=alt.Scale(type="sqrt")),
   alt.Color("model"),
   alt.Tooltip(("model", "parameters")),
   opacity=alt.condition(highlight, alt.value(1), alt.value(.5)),
   size=alt.condition(highlight, alt.value(2), alt.value(1)),
)
base.mark_point().add_params(highlight) + base.mark_line()

To evaluate the gradient of the strain energy density functional (69) for the model (83), we make use of (70), (146) and (147) to derive

(84)\[ \bm{S} = \firstlame J V' \bm{C}^{-1} + \secondlame \left( \bm{I} - \bm{C}^{-1} \right) = \frac{\firstlame}{2} \left( J^2 - 1 \right)\bm{C}^{-1} + \secondlame \left( \bm{I} - \bm{C}^{-1} \right), \]

which is the second Piola-Kirchoff tensor for neo-Hookean materials.

Note

One can linearize (84) around \(\bm{E} = 0\), for which \(\bm{C} = \bm{I} + 2 \bm{E} \to \bm{I}\) and \(J \to 1 + \trace \bm{E}\), therefore (84) reduces to

(85)\[ \bm{S} = \firstlame \trace \bm{E} \bm{I} + 2 \secondlame \bm{E}, \]

which is the St. Venant-Kirchoff model (constitutive linearization without geometric linearization). This model can be used for geometrically nonlinear mechanics (e.g., snap-through of thin structures), but is inappropriate for large strain.

Tip

In most of the constitutive models we have \(f(J) = \log J\) and \(g(J) = J -1\) functions with the condition numbers

(86)\[ \kappa_f(J) = \frac{1}{\lvert \log J \rvert}, \quad \kappa_g(J) = \frac{\lvert J \rvert}{\lvert J-1 \rvert} \]

where in the case of nearly incompressible materials, (86) becomes very large and thus ill-conditioned. To compute these functions in a numerically stable way, 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)\). Then we compute

(87)\[ \mathtt{J_{-1}} = J-1 = u_{0,0} + u_{1,1} + u_{0,0} u_{1,1} - u_{0,1} u_{1,0}, \]

and if \(\log J\) appears in a stress we use log1p as

(88)\[ \log J = \mathtt{log1p} \left( \mathtt{J_{-1}} \right), \]

which gives accurate results even in the limit when the entries \(u_{i,j}\) are very small or \(J\approx 1\).

Another source of error in constitutive models is loss of significance which occurs in \(\bm{I} - \bm{C}^{-1}\) term. We use an equivalent form of (84) for neo-Hookean materials as

(89)\[ \bm{S} = \frac{\firstlame}{2} \mathtt{J_{-1}} \left(\mathtt{J_{-1}} + 2 \right) \bm{C}^{-1} + 2 \secondlame \bm{C}^{-1} \bm{E}, \]

which is more numerically stable for small \(\bm{E}\), and thus preferred for computation. Note that the product \(\bm{C}^{-1} \bm{E}\) is also symmetric, and that \(\bm{E}\) should be computed using (17). For example, if \(u_{i,j} \sim 10^{-8}\), then naive computation of \(\bm{I} - \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. When using the stable choices above, these quantities retain full \(\varepsilon_{\text{machine}}\) relative accuracy.

The neo-Hookean stress relation can be represented in current configuration by pushing forward (84) using (25)

(90)\[ \bm{\tau} = \bm{F}\bm{S}\bm{F}^T = \firstlame J V' \bm{I} + \secondlame \left( \bm{b} - \bm{I} \right) = \frac{\firstlame}{2} \left( J^2 - 1 \right) \bm{I} + \secondlame \left( \bm{b} - \bm{I} \right), \]

One can arrive at the same relation (90) by expressing (83) in terms of current configuration invariant \(\trace \bm{e}\) and use equation (71).

Tip

In our simulation we use the stable version of Kirchhoff stress tensor (90) as

(91)\[ \bm{\tau} = \frac{\firstlame}{2} \mathtt{J_{-1}} \left(\mathtt{J_{-1}} + 2 \right) \bm{I} + 2 \secondlame \bm{e}. \]

where \(\mathtt{J_{-1}}\) is computed by (87).

Strong and weak formulations: initial configuration

In the total Lagrangian approach for the neo-Hookean hyperelasticity problem, the discrete equations are formulated with respect to the initial configuration. In this formulation, we solve for displacement \(\bm{u} \left( \bm{X} \right)\) in the initial frame \(\bm{X}\). The notation for elasticity at finite strain is inspired by [Hol00] to distinguish between the current and initial configurations. As explained in the Continuum Mechanics section, we denote by capital letters the initial frame and by small letters the current one.

We can state the hyperelastic strong form as follow: Given body force \(\rho_0 \bm g\), Dirichlet boundary \(\bar{\bm u}\) and applied traction \(\bar{\bm t}\), find the displacement variable \(\bm u \in \mathcal{V}\) such that:

(92)\[ \begin{aligned} -\nabla_X \cdot \bm P - \rho_0 \bm g &= 0. \qquad \text{in $\Omega_0$} \\ \bm{u} &= \bar{\bm u}, \quad \text{on $\partial \Omega^{D}_0$} \\ \bm P \cdot \bm N &= \bar{\bm t}. \qquad \text{on $\partial \Omega^{N}_0$} \end{aligned} \]

and its weak formulation as:

(93)\[ R(\bm u) \coloneqq \int_{\Omega_0} \nabla_X \bm v \tcolon \bm P \, dV - \int_{\Omega_0}\bm v \cdot \rho_0 \bm g \,dV - \int_{\partial \Omega^{N}_0} \bm v \cdot \bar{\bm t} \, dA = 0, \qquad \forall \in \bm{v} \in \mathcal{V} \]

where \((.)_0\) indicates the initial configuration, \(\bm P = \bm F \bm S\) is the first Piola-Kirchhoff stress tensor (see (22) and (24)), \(\bm N\) is the unit normal vector, and \(_X\) in \(\nabla_X\) indicates that the gradient is calculated with respect to the initial configuration. This 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.

Note

Linear elasticity and small-strain hyperelasticity can both by obtained from the finite-strain hyperelastic formulation by linearization of geometric and constitutive nonlinearities. The effect of these linearizations is sketched in the diagram below, where \(\bm{\sigma}\) and \(\bm{\varepsilon}\) 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.

(94)\[ \begin{CD} {\overbrace{\bm{S} \left( \bm{E} \right)}^{\text{Finite Strain Hyperelastic}}} @>{\text{constitutive}}>{\text{linearization}}> {\overbrace{\bm{S} = \mathsf{C} \bm{E}}^{\text{St. Venant-Kirchoff}}} \\ @V{\text{geometric}}V{\begin{smallmatrix}\bm{E} \to \bm{\varepsilon} \\ \bm{S} \to \bm{\sigma} \end{smallmatrix}} V @V{\begin{smallmatrix}\bm{E} \to \bm{\varepsilon} \\ \bm{S} \to \bm{\sigma} \end{smallmatrix}}V{\text{geometric}} V \\ {\underbrace{\bm{\sigma} \left( \bm{\varepsilon} \right)}_\text{Small Strain Hyperelastic}} @>{\text{constitutive}}>\text{linearization}> {\underbrace{\bm{\sigma} = \mathsf{C} \bm{\varepsilon}}_\text{Linear Elastic}} \end{CD} \]

Linearization: initial configuration

Discretization of (93) produces a finite-dimensional system of nonlinear algebraic equations, which we solve using Newton-Raphson methods. One 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. In general for solving a nonlinear equation \(R(\bm u) = 0\), we use the first-order (Taylor’s) expansion

\[ 0 = R(\bm u) + \diff R(\bm u; \diff \bm u) + o(\diff \bm u), \]

where \(\diff\) and \(\diff \bm u\) denote the linearization operator and the increment of the displacement field \(\bm u\). The reminder \(o(\diff \bm u)\) is a small error that tends to zero faster than \(\diff \bm u \to 0\). The second term \(\diff R\) is the linear change in \(R\) due to \(\diff \bm u\) at \(\bm u\). In fact, it is the directional derivative of \(R\) at a given \(\bm u\) (fixed) in the direction of the incremental displacement field.

The linearized form of (93) (assume constant traction and body force) may be stated as: Find \(\diff \bm u \in \mathcal{V}\) such that

(95)\[ \int_{\Omega_0} \nabla_X \bm v \tcolon \diff \bm P \, dV = -R(\bm u), \qquad \forall \in \bm{v} \in \mathcal{V} \]

where

(96)\[ \diff \bm{P} = \frac{\partial \bm{P}}{\partial \bm{F}} \tcolon \diff \bm{F} = \diff \bm{F}\, \bm{S} + \bm{F} \underbrace{\frac{\partial \bm{S}}{\partial \bm{E}} \tcolon \diff \bm{E}}_{\diff \bm{S}} \]

and the linearization of deformation gradient and Green-Lagrange strain tensors are

(97)\[ \diff \bm{E} = \frac{\partial \bm{E}}{\partial \bm{F}} \tcolon \diff \bm{F} = \frac{1}{2} \left(\diff \bm{F}^T \bm{F} + \bm{F}^T \diff \bm{F} \right), \qquad \diff \bm{F} = \nabla_X\diff \bm{u}. \]

The linearization of the second Piola-Kirchhoff stress tensor, \(\diff \bm{S}\), depends upon the material model and derived for different materials in the following.

Deriving \(\diff\bm{S}\) for neo-Hookean material

For the neo-Hookean model (84),

(98)\[ \diff \bm{S} = \frac{\partial \bm{S}}{\partial \bm{E}} \tcolon \diff \bm{E} = \left( \lambda J^2 V^{''} + \lambda J \, V'\right) (\bm{C}^{-1} \tcolon \diff \bm{E}) \bm{C}^{-1} + \left( \lambda J \, V' - \mu \right) \diff \bm{C}^{-1}, \]

where

\[ \diff \bm{C}^{-1} = \frac{\partial \bm{C}^{-1}}{\partial \bm{E}} \tcolon \diff \bm{E} = -2 \bm{C}^{-1} \diff \bm{E} \, \bm{C}^{-1}, \]

and for \(V(J) = \frac{1}{4} \left( J^2 - 1 - 2 \log J \right)\) given in strain energy (83), the derivatives are

\[ V'(J) = \frac{1}{2J} \left( J^2 - 1 \right), \, \, V^{''}(J) = \frac{1}{2 J^2} \left( J^2 + 1 \right). \]

The quantity \({\partial \bm{S}} / {\partial \bm{E}}\) is known as the incremental elasticity tensor, and is analogous to the linear elasticity tensor \(\mathsf C\).

\(\diff \bm{S}\) in index notation

It is sometimes useful to express (98) in index notation,

(99)\[ \begin{aligned} \diff \bm{S}_{IJ} &= \frac{\partial \bm{S}_{IJ}}{\partial \bm{E}_{KL}} \diff \bm{E}_{KL} \\ &= \lambda J^2 \left( \bm{C}^{-1}_{KL} \diff \bm{E}_{KL} \right) \bm{C}^{-1}_{IJ} + 2 \left( \mu - \frac{\lambda}{2} \left(J^2 - 1 \right) \right) \bm{C}^{-1}_{IK} \diff \bm{E}_{KL} \bm{C}^{-1}_{LJ} \\ &= \underbrace{\left( \lambda J^2 \bm{C}^{-1}_{IJ} \bm{C}^{-1}_{KL} + 2 \left( \mu - \frac{\lambda}{2} \left(J^2 - 1 \right) \right) \bm{C}^{-1}_{IK} \bm{C}^{-1}_{JL} \right)}_{\mathsf C_{IJKL}} \diff \bm{E}_{KL} , \end{aligned} \]

where we have identified the effective elasticity tensor \(\mathsf C = \mathsf C_{IJKL}\). It 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. That 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

  1. recover \(\bm C^{-1}\) and \(J-1\) (either stored at quadrature points or recomputed),

  2. proceed with \(3\times 3\) matrix products as in (98) or the second line of (99) to compute \(\diff \bm S\) while avoiding computation or storage of higher order tensors, and

  3. conclude by (96), where \(\bm S\) is either stored or recomputed from its definition exactly as in the nonlinear residual evaluation.

Cancellation vs symmetry

Some cancellation is possible (at the expense of symmetry) if we substitute (98) into (96),

(100)\[ \begin{aligned} \diff \bm P &= \diff \bm F\, \bm S - \lambda J^2 \left(\bm C^{-1} : \diff \bm E \right) \bm F^{-T} + 2\left(\mu - \frac{\lambda}{2} \left(J^2 - 1 \right) \right) \bm F^{-T} \diff\bm E \, \bm C^{-1} \\ &= \diff \bm F\, \bm S - \lambda J^2 \left(\bm F^{-T} : \diff \bm F \right) \bm F^{-T} + \left(\mu - \frac{\lambda}{2} \left(J^2 - 1 \right) \right) \bm F^{-T} \left( \bm F^T \diff \bm F + \diff \bm F^T \bm F \right) \bm C^{-1} \\ &= \diff \bm F\, \bm S - \lambda J^2 \left( \bm F^{-T} : \diff \bm F \right) \bm F^{-T} + \left(\mu - \frac{\lambda}{2} \left(J^2 - 1 \right) \right) \Big( \diff \bm F\, \bm C^{-1} + \bm F^{-T} \diff \bm F^T \bm F^{-T} \Big), \end{aligned} \]

where we have exploited \(\bm F \bm C^{-1} = \bm F^{-T}\) and

\[ \begin{aligned} \bm C^{-1} \tcolon \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} \tcolon \diff \bm F. \end{aligned} \]

We prefer to compute with (98) because (100) 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.

Strong and weak formulations: current configuration

In the preceding discussion, all equations have been formulated in the initial configuration. This may feel convenient in that the computational domain is clearly independent of the solution, but there are some advantages to defining the equations in the current configuration.

  1. Body forces (such as gravity), traction, and contact are more easily defined in the current configuration.

  2. Mesh quality in the initial configuration can be very bad for large deformation.

  3. The required storage and numerical representation can be smaller in the current configuration.

Most of the benefit in case 3 can be attained solely by moving the Jacobian representation to the current configuration [DPA+20], though residual evaluation may also be slightly faster in current configuration. There are multiple commuting paths from the nonlinear weak form in initial configuration (93) to the Jacobian weak form in current configuration (106). One may push forward to the current configuration and then linearize or linearize in initial configuration and then push forward, as summarized below.

(101)\[ \begin{CD} {\overbrace{\nabla_X \bm{v} \tcolon \bm{FS}}^{\text{Initial Residual}}} @>{\text{push forward}}>{}> {\overbrace{\nabla_x \bm{v} \tcolon \bm{\tau}}^{\text{Current Residual}}} \\ @V{\text{linearize}}V{\begin{smallmatrix} \diff \bm{F} = \nabla_X\diff \bm{u} \\ \diff \bm{S} \left( \diff \bm{E} \right) \end{smallmatrix}}V @V{\begin{smallmatrix} \diff\nabla_x\bm{v} = -\nabla_x\bm{v} \nabla_x \diff \bm{u} \\ \diff \bm{\tau} \left( \diff \bm{\epsilon} \right) \end{smallmatrix}}V{\text{linearize}}V \\ {\underbrace{\nabla_X\bm{v}\tcolon \left( \diff \bm{F}\bm{S} + \bm{F}\diff \bm{S} \right)}_\text{Initial Jacobian}} @>{\text{push forward}}>{}> {\underbrace{\nabla_x\bm{v}\tcolon \left( \diff \bm{\tau} -\bm{\tau} \left( \nabla_x \diff \bm{u} \right)^T \right)}_\text{Current Jacobian}} \end{CD} \]

We will follow both paths for consistency and because both intermediate representations may be useful for implementation.

Push forward, then linearize

The first term of (93) can be rewritten in terms of the symmetric Kirchhoff stress tensor \(\bm{\tau} = J \bm{\sigma} = \bm{P} \bm{F}^T = \bm{F} \bm{S} \bm{F}^T\) as

(102)\[ \nabla_X \bm{v} \tcolon \bm{P} = \nabla_X \bm{v} \tcolon \bm{\tau} \bm{F}^{-T} = \nabla_X \bm{v} \bm{F}^{-1} \tcolon \bm{\tau} = \nabla_x \bm{v} \tcolon \bm{\tau} \]

therefore, the weak form in terms of \(\bm{\tau}\) and \(\nabla_x\) with integral over \(\Omega_0\) is

(103)\[ r(\bm u) \coloneqq \int_{\Omega_0}{\nabla_x \bm{v} \tcolon \bm{\tau}} \, dV - \int_{\Omega_0}{\bm{v} \cdot \rho_0 \bm{g}} \, dV - \int_{\partial \Omega_0}{\bm{v} \cdot \bar{\bm t}} \, dA = 0, \quad \forall \bm{v} \in \mathcal{V}. \]

Linearize in current configuration

To derive a Newton linearization of (103), first we define

(104)\[ \nabla_x \diff \bm{u} = \nabla_X \diff \bm{u} \ \bm{F}^{-1} = \diff \bm{F} \bm{F}^{-1} \]

Then by expanding the directional derivative of \(\nabla_x \bm{v} \tcolon \bm{\tau}\), we arrive at

(105)\[ \diff \ \left(\nabla_x \bm{v} \tcolon \bm{\tau} \right) = \diff \ \left( \nabla_x \bm{v} \right) \tcolon \bm{\tau} + \nabla_x \bm{v} \tcolon \diff \bm{\tau} . \]

The first term of (105) can be written as

\[ \begin{aligned} \diff \ (\nabla_x \bm{v})\tcolon \bm{\tau} &= \diff \ \left( \nabla_X \bm{v} \bm{F}^{-1} \right) \tcolon \bm{\tau} = \left( \underbrace{\nabla_X \left(\diff \bm{v}\right)}_{0}\bm{F}^{-1} + \nabla_X \bm{v}\diff \bm{F}^{-1} \right) \tcolon \bm{\tau}\\ &= \left( -\nabla_X \bm{v} \bm{F}^{-1}\diff \bm{F}\bm{F}^{-1} \right) \tcolon \bm{\tau} = \left( -\nabla_x \bm{v} \diff \bm{F}\bm{F}^{-1} \right) \tcolon \bm{\tau}\\ &= \left( -\nabla_x \bm{v} \nabla_x \diff \bm{u} \right) \tcolon \bm{\tau} = -\nabla_x \bm{v}\tcolon\bm{\tau} \left( \nabla_x \diff \bm{u} \right)^T \,, \end{aligned} \]

where we have used \(\diff \bm{F}^{-1}=-\bm{F}^{-1} \diff \bm{F} \bm{F}^{-1}\) and (104). Using this and (105) in (103) yields the Jacobian form in the current configuration: find \(\diff \bm{u} \in \mathcal{V}\) such that

(106)\[ \int_{\Omega_0} \nabla_x \bm{v} \tcolon \left( \diff \bm{\tau} - \bm{\tau} \left( \nabla_x \diff \bm{u} \right)^T \right) = -r(\bm u). \]
Deriving \(\diff\bm\tau\) for neo-Hookean material

To derive a useful expression of \(\diff\bm\tau\) for neo-Hookean materials, we will use the representations

\[ \begin{aligned} \diff \bm{b} &= \diff \bm{F} \bm{F}^T + \bm{F} \diff \bm{F}^T \\ &= \nabla_x \diff \bm{u} \ \bm{b} + \bm{b} \ (\nabla_x \diff \bm{u})^T \\ &= (\nabla_x \diff\bm u)(\bm b - \bm{I}) + (\bm b - \bm{I}) (\nabla_x \diff\bm u)^T + 2 \diff\bm\epsilon \end{aligned} \]

where

(107)\[ \diff\bm\epsilon \equiv \frac{1}{2}\Big(\nabla_x \diff\bm{u} + (\nabla_x \diff\bm{u})^T \Big) . \]

and

\[ \begin{aligned} \diff \, (J^2 -1) &= 2 J \frac{\partial J}{\partial b} \tcolon \diff \bm{b} = J^2 \bm{b}^{-1}\tcolon \diff \bm{b}\\ &= J^2 \bm b^{-1} \tcolon \Big(\nabla_x \diff\bm u \ \bm b + \bm b (\nabla_x \diff\bm u)^T \Big) \\ &= 2 J^2 \trace (\nabla_x \diff\bm u) \\ &= 2 J^2 \trace \diff\bm\epsilon . \end{aligned} \]

Substituting into (90) gives

(108)\[ \begin{aligned} \diff \bm{\tau} &= \mu \diff \bm{b} + \lambda J^2 \trace (\diff\bm\epsilon) \bm{I} \\ &= \underbrace{2 \mu \diff\bm\epsilon + \lambda J^2 \trace \left( \diff\bm\epsilon \right) \bm{I} - \lambda \left( J^2 -1 \right) \diff\bm\epsilon}_{\bm F \diff\bm S \bm F^T} \\ &\quad + \left( \nabla_x \diff\bm u \right) \underbrace{\Big( \mu \left( \bm b - \bm{I} \right) + \frac{\lambda}{2} \left( J^2 -1 \right) \bm{I} \Big)}_{\bm\tau} \\ &\quad + \underbrace{\Big( \mu \left( \bm b - \bm{I} \right) + \frac{\lambda}{2} \left( J^2 -1 \right) \bm{I} \Big)}_{\bm\tau} \left( \nabla_x \diff\bm u \right)^T , \end{aligned} \]

where the final expression has been identified according to

(109)\[ \diff\bm\tau = \diff\ \left( \bm F \bm S \bm F^T \right) = \left( \nabla_x \diff\bm u \right) \bm\tau + \bm F \diff\bm S \bm F^T + \bm\tau\left( \nabla_x \diff\bm u \right)^T. \]

Collecting terms, we may thus opt to use either of the two forms

(110)\[ \begin{aligned} \diff \bm{\tau} -\bm{\tau}(\nabla_x \diff\bm{u})^T &= (\nabla_x \diff\bm u)\bm\tau + \bm F \diff\bm S \bm F^T \\ &= (\nabla_x \diff\bm u)\bm\tau + \lambda J^2 \trace(\diff\bm\epsilon) \bm{I} + 2 \left( \mu - \frac{\lambda}{2} \left( J^2 -1\right) \right) \diff\bm\epsilon, \end{aligned} \]

with the last line showing the especially compact representation available for neo-Hookean materials.

Linearize, then push forward

We can move the derivatives to the current configuration via

\[ \nabla_X \bm{v} \tcolon \diff \bm{P} = \left( \nabla_X \bm{v} \right) \bm{F}^{-1} \tcolon \diff \bm{P} \bm{F}^T = \nabla_x \bm{v} \tcolon \diff \bm{P} \bm{F}^T \]

and expand

(111)\[ \begin{aligned} \diff \bm{P} \bm{F}^T &= \diff \bm{F} \bm{S} \bm{F}^T + \bm{F} \diff \bm{S} \bm{F}^T \\ &= \underbrace{\diff \bm{F} \bm{F}^{-1}}_{\nabla_x \diff \bm{u}} \underbrace{\bm{F} \bm{S} \bm{F}^T}_{\bm{\tau}} + \bm{F} \diff \bm{S} \bm{F}^T . \end{aligned} \]
Representation of \(\bm F \diff\bm S \bm F^T\) for neo-Hookean materials

Now we push (98) forward via

(112)\[ \begin{aligned} \bm F \diff\bm S \bm F^T &= \left( \lambda J^2 V^{''} + \lambda J \, V'\right) (\bm{C}^{-1} \tcolon \diff \bm{E}) \bm F \bm C^{-1} \bm F^T - \left( \lambda J \, V' - \mu \right) \bm F \diff \bm C^{-1} \, \bm F^T \\ &= \left( \lambda J^2 V^{''} + \lambda J \, V'\right) \left( \bm C^{-1} \tcolon \diff\bm E \right) \bm{I} - 2 \left( \lambda J \, V' - \mu \right) \bm F^{-T} \diff\bm E \, \bm F^{-1} \\ &= \left( \lambda J^2 V^{''} + \lambda J \, V'\right) \trace(\nabla_x \diff\bm u) \bm{I} - 2 \left( \lambda J \, V' - \mu \right) \diff\bm \epsilon \end{aligned} \]

where we have used

(113)\[ \begin{aligned} \bm C^{-1} \tcolon \diff\bm E &= \bm F^{-1} \bm F^{-T} \tcolon \bm F^T \diff\bm F \\ &= \trace(\bm F^{-1} \bm F^{-T} \bm F^T \diff \bm F) \\ &= \trace(\bm F^{-1} \diff\bm F) \\ &= \trace(\diff \bm F \bm F^{-1}) \\ &= \trace(\nabla_x \diff\bm u) \end{aligned} \]

and

(114)\[ \begin{aligned} \bm F^{-T} \diff\bm E \, \bm F^{-1} &= \frac 1 2 \bm F^{-T} \left(\bm F^T \diff\bm F + \diff\bm F^T \bm F\right) \bm F^{-1} \\ &= \frac 1 2 \left(\diff \bm F \bm F^{-1} + \bm F^{-T} \diff\bm F^T\right) \\ &= \frac 1 2 \Big(\nabla_x \diff\bm u + (\nabla_x\diff\bm u)^T \Big) \equiv \diff\bm\epsilon. \end{aligned} \]

Collecting terms, the weak form of the Newton linearization for neo-Hookean materials in the current configuration is

(115)\[ \int_{\Omega_0} \nabla_x \bm v \tcolon \left( (\nabla_x \diff\bm u) \bm\tau + \left( \lambda J^2 V^{''} + \lambda J \, V'\right) \trace(\diff\bm\epsilon)\bm{I} - 2 \left( \lambda J \, V' - \mu \right) \diff \bm\epsilon \right) dV = \text{rhs}, \]

which equivalent to Algorithm 2 of [DPA+20] and requires only derivatives with respect to the current configuration. Note that (110) and (115) have recovered the same representation using different algebraic manipulations.

Command-line interface

To enable the hyperelastic neo-Hookean model, use the model option -model elasticity-neo-hookean-current or -model elasticity-neo-hookean-initial and set the material parameters listed in Neo-Hookean model options. Any parameter without a default option is required.

Table 18 Neo-Hookean model options

Option

Description

-model elasticity-neo-hookean-current | elasticity-neo-hookean-initial

Required to enable the neo-Hookean model, | denotes an option for the user.

-E [real]

Young’s modulus, \(E > 0\)

-nu [real]

Poisson’s ratio, \(\nu \leq 0.5\).

An example using the neo-Hookean model can be run via

$ ./bin/ratel-quasistatic -options_file examples/ymls/ex02-quasistatic-elasticity-neo-hookean-current-face-forces.yml

Mooney-Rivlin

Constitutive theory

While 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\) defined in (68). A coupled Mooney-Rivlin strain energy density (cf. neo-Hookean (83)) is [Hol00]

(116)\[ \begin{aligned} \psi \left( \mathbb{I_1}, \mathbb{I_2}, J \right) &= \firstlame V(J) - \left( \secondlame_1 + 2\secondlame_2 \right) \log J + \frac{\secondlame_1}{2} \left( \mathbb{I_1} - 3 \right) + \frac{\secondlame_2}{2} \left( \mathbb{I_2} - 3 \right), \\ &= \frac{\firstlame}{4} \left( J^2 - 1 -2 \log J \right) - \left( \secondlame_1 + 2\secondlame_2 \right) \log J + \frac{\secondlame_1}{2} \left( \mathbb{I_1} - 3 \right) + \frac{\secondlame_2}{2} \left( \mathbb{I_2} - 3 \right). \end{aligned} \]

We differentiate \(\psi\) as in the neo-Hookean case (84) to yield the second Piola-Kirchoff tensor,

(117)\[ \begin{aligned} \bm{S} &= \firstlame J V' \bm{C}^{-1} - \left( \secondlame_1 + 2\secondlame_2 \right) \bm{C}^{-1} + \secondlame_1\bm{I} + \secondlame_2 \left( \mathbb{I_1} \bm{I} - \bm{C} \right) \\ &= \frac{\firstlame}{2} \left( J^2 - 1 \right)\bm{C}^{-1} + \secondlame_1 \left( \bm{I} - \bm{C}^{-1} \right) + \secondlame_2 \left( \mathbb{I_1} \bm{I} - 2 \bm{C}^{-1} - \bm{C} \right), \end{aligned} \]

where we have used (70). This is a common model for vulcanized rubber, with a shear modulus (defined for the small-strain limit) of \(\secondlame_1 + \secondlame_2\) that should be significantly smaller than the first Lamé parameter \(\firstlame\).

Mooney-Rivlin strain energy comparison

We apply traction to a block and plot integrated strain energy \(\psi\) as a function of the loading parameter.

Click to show code
import altair as alt
import pandas as pd
def source_path(rel):
    import os
    return os.path.join(os.path.dirname(os.environ["DOCUTILSCONFIG"]), rel)

nh = pd.read_csv(source_path("doc/data/NH-strain.csv"))
nh["model"] = "Neo-Hookean"
nh["parameters"] = "E=2.8, nu=0.4"

mr = pd.read_csv(source_path("doc/data/MR-strain.csv"))
mr["model"] = "Mooney-Rivlin; neo-Hookean equivalent"
mr["parameters"] = "mu_1=1, mu_2=0, nu=.4"

mr1 = pd.read_csv(source_path("doc/data/MR-strain1.csv"))
mr1["model"] = "Mooney-Rivlin"
mr1["parameters"] = "mu_1=0.5, mu_2=0.5, nu=.4"

df = pd.concat([nh, mr, mr1])
highlight = alt.selection_point(
   on = "mouseover",
   nearest = True,
   fields=["model", "parameters"],
)
base = alt.Chart(df).encode(
   alt.X("increment"),
   alt.Y("energy", scale=alt.Scale(type="sqrt")),
   alt.Color("model"),
   alt.Tooltip(("model", "parameters")),
   opacity=alt.condition(highlight, alt.value(1), alt.value(.5)),
   size=alt.condition(highlight, alt.value(2), alt.value(1)),
)
base.mark_point().add_params(highlight) + base.mark_line()

Tip

Similar to the neo-Hookean materials, the stable form for the Mooney-Rivlin model in initial configuration (117) can be written as

(118)\[ \bm{S} = \frac{\firstlame}{2} \mathtt{J_{-1}} \left(\mathtt{J_{-1}} + 2 \right) \bm{C}^{-1} + 2 \left( \secondlame_1 + 2\secondlame_2 \right)\bm{C}^{-1} \bm{E} + 2\secondlame_2 \left(\trace \left(\bm{E} \right) \bm{I} - \bm{E} \right). \]

The Kirchhoff stress tensor \(\bm{\tau}\) for Mooney-Rivlin model is given by

(119)\[ \begin{aligned} \bm{\tau} = \bm{F}\bm{S}\bm{F}^T &= \firstlame J V' \bm{I} + \secondlame_1 \left( \bm{b} - \bm{I} \right) + \secondlame_2 \left( \mathbb{I_1} \bm{b} - 2 \bm{I} - \bm{b}^2 \right), \\ &= \frac{\firstlame}{2} \left( J^2 - 1 \right)\bm{I} + \secondlame_1 \left( \bm{b} - \bm{I} \right) + \secondlame_2 \left( \mathbb{I_1} \bm{b} - 2 \bm{I} - \bm{b}^2 \right). \end{aligned} \]

Tip

The stable Kirchhoff stress tensor version of (119) is given by

(120)\[ \bm{\tau} = \frac{\firstlame}{2} \mathtt{J_{-1}} \left(\mathtt{J_{-1}} + 2 \right) \bm{I} + 2 \left( \secondlame_1 + 2\secondlame_2 \right)\bm{e} + 2\secondlame_2 \left(\trace \left(\bm{e}\right) \bm{I} - \bm{e} \right) \bm{b}. \]

where \(\mathtt{J_{-1}}\) is computed by (87)

The strong and weak formulation for current and initial configurations are described in Strong and weak formulations: current configuration and Strong and weak formulations: initial configuration, respectively. Herein, we have only changed \(\bm{S} = \frac{\partial\psi}{\partial\bm{E}}\), thus only the linearization needs to be updated from the neo-Hookean model.

Linearization: initial configuration

General process for Newton linearization in the initial configuration is described for the neo-Hookean model (Linearization: initial configuration).

Deriving \(\diff\bm{S}\) for Mooney-Rivlin material

Similar to the linearization of the constitutive relationship for neo-Hookean materials (98), we differentiate (117) using variational notation,

(121)\[ \begin{aligned} \diff \bm{S} &= \left( \lambda J^2 V^{''} + \lambda J \, V'\right) (\bm{C}^{-1} \tcolon \diff \bm{E}) \bm{C}^{-1} \\ &\quad + \left( \lambda J \, V' - (\mu_1 + 2 \mu_2) \right) \diff \bm{C}^{-1} \\ &\quad + 2 \mu_2 \left( \trace \left( \diff \bm{E} \right) \bm{I} - \diff \bm{E} \right) . \end{aligned} \]

Note that this agrees with the linearization of the neo-Hookean constitutive relationship {eq}eq-neo-hookean-incremental-stress if \(\mu_1 = \mu, \mu_2 = 0\). Moving from neo-Hookean to Mooney-Rivlin modifies the second term and adds the third.

Linearization: current configuration

General process for Newton linearization in the current configuration is described for the neo-Hookean model (Strong and weak formulations: current configuration).

Representation of \(\bm F \diff\bm S \bm F^T\) for Mooney-Rivlin materials

We push forward \(\diff\bm S\) (121) which yields to

\[ \begin{aligned} \bm F \diff\bm S \bm F^T &= \left( \lambda J^2 V^{''} + \lambda J \, V'\right) (\bm{C}^{-1} \tcolon \diff \bm{E}) \bm F \bm C^{-1} \bm F^T + \left( \lambda J \, V' - (\mu_1 + 2\mu_2) \right) \bm F \diff \bm C^{-1} \, \bm F^T \\ &\quad + 2 \mu_2 \left( \trace \left( \diff \bm{E} \right) \bm{b} - \bm{F} \diff \bm{E} \bm{F}^T \right) \\ &= \left( \lambda J^2 V^{''} + \lambda J \, V'\right) \trace(\nabla_x \diff\bm u) \bm{I} - 2 \left( \lambda J \, V' - (\mu_1 + 2\mu_2) \right) \diff\bm \epsilon \\ &\quad + 2 \mu_2 \left( \frac{1}{2} \trace \left( \diff \bm{b} \right) \bm{I} - \bm{b} \diff \bm{\epsilon} \right)\bm{b} \end{aligned} \]

where we have used

(122)\[ \begin{aligned} \trace\left(\diff\bm E \right)&= \trace\left(\bm{F}^T \diff\bm{F} \right) = \trace\left(\bm{F} \diff\bm{F}^T \right) \\ &= \trace\left(\diff\bm F \bm{F}^T \right) = \trace\left(\diff \bm e \right) \\ \end{aligned} \]

and

(123)\[ \begin{aligned} \bm{F} \diff\bm{E} \, \bm F^{T} &= \frac{1}{2} \bm{F} \left(\bm{F}^T \diff\bm{F} + \diff\bm{F}^T \bm{F} \right) \bm{F}^{T} \\ &= \frac{1}{2} \left(\bm{F}\bm{F}^T \diff\bm{F}\bm{F}^{-1}\bm{F}\bm{F}^{T} + \bm{F}\bm{F}^{T}\bm{F}^{-T}\diff\bm{F}^T \bm{F}\bm{F}^T \right) \\ &= \frac 1 2 \bm{b}\Big(\nabla_x \diff\bm u + (\nabla_x\diff\bm u)^T \Big)\bm{b} =\bm{b} \, \diff\bm\epsilon \, \bm{b}. \end{aligned} \]

Collecting terms, we arrive at

(124)\[ \begin{aligned} \diff \bm{P} \bm{F}^T &= \left(\nabla_x \diff \bm{u} \right) \bm{\tau} + \bm{F} \diff \bm{S} \bm{F}^T \\ &= \left( \nabla_x \diff \bm{u} \right) \bm{\tau} + \left( \lambda J^2 V^{''} + \lambda J \, V'\right) \trace(\nabla_x \diff\bm u) \bm{I} \\ &\quad - 2 \left( \lambda J \, V' - (\mu_1 + 2\mu_2) \right) \diff\bm \epsilon + \mu_2 \trace \left( \diff \bm{b} \right) \bm{b} - 2 \mu_2 \bm{b} \diff \bm{\epsilon} \bm{b} \end{aligned} \]

Note that (126) and (124) have recovered the same representation using different algebraic manipulations.

Deriving \(\diff\bm\tau\) for Mooney-Rivlin material

To derive a useful expression of \(\diff\bm\tau\) for Mooney-Rivlin materials, we will use the representations of \(\diff \bm{b}, \diff (J^2 -1)\) as derived in previous section and

\[ \begin{aligned} \diff \mathbb{I_1} &= \frac{\partial \mathbb{I_1}}{\partial \bm{b}}\tcolon \diff \bm{b} = \bm{I} \tcolon \diff \bm{b} = \trace (\diff \bm{b})\\ \end{aligned} \]

Substituting into (119) gives

(125)\[ \begin{aligned} \diff \bm{\tau} &= \mu_1 \diff \bm{b} + \lambda J^2 \trace (\diff\bm\epsilon) \bm{I} + \mu_2 \left(\trace (\diff \bm{b}) \bm{b} + \mathbb{I_1}\diff \bm{b} - \bm{b}\diff \bm{b} - \diff \bm{b} \bm{b}\right)\\ &=2 \mu_1 \diff\bm\epsilon + \lambda J^2 \trace (\diff\bm\epsilon) \bm{I} - \lambda \left( J^2 -1 \right) \diff\bm\epsilon + \left(\nabla_x \diff\bm u \right) \Big( \mu_1 (\bm b - \bm{I}) +\frac{\lambda}{2} \left( J^2 -1 \right) \bm{I} \Big)\\ &\quad + \Big( \mu_1 (\bm b - \bm{I}) + \frac{\lambda}{2} \left( J^2 -1 \right) \bm{I} \Big) (\nabla_x \diff\bm u)^T + \mu_2 \trace (\diff \bm{b}) \bm{b} \\ &\quad + \mu_2\mathbb{I_1} \left(\nabla_x \diff\bm u \right) \bm{b} + \mu_2\mathbb{I_1} \bm{b} \left(\nabla_x \diff\bm u \right)^T - \mu_2 \left(\nabla_x \diff\bm u \right) \bm{b}^2 - \mu_2 \bm{b} \left(\nabla_x \diff\bm u \right)^T \bm{b} \\ &\quad - \mu_2 \bm{b} \left(\nabla_x \diff\bm u \right) \bm{b} - \mu_2 \bm{b}^2 \left(\nabla_x \diff\bm u \right)^T + 4\mu_2 \diff\bm\epsilon - 4\mu_2 \diff\bm\epsilon \\ &= \underbrace{\lambda J^2 \trace(\diff\bm \epsilon) \bm{I} + 2 \left( \mu_1 + 2\mu_2 - \frac{\lambda}{2} \left( J^2 -1 \right) \right) \diff \bm{\epsilon} + \mu_2 \trace \left( \diff \bm{b} \right) \bm{b} - 2\mu_2 \bm{b} \diff \bm{\epsilon} \bm{b}}_{\bm F \diff\bm S \bm F^T} \\ &\quad + (\nabla_x \diff\bm u)\underbrace{\Big( \frac{\lambda}{2} \left( J^2 -1 \right) \bm{I} + \mu_1 \left( \bm{b} - \bm{I} \right) + \mu_2 \left( \mathbb{I_1} \bm{b} - 2 \bm{I} - \bm{b}^2 \right) \Big)}_{\bm\tau} \\ &\quad + \underbrace{\Big( \frac{\lambda}{2} \left( J^2 -1 \right) \bm{I} + \mu_1 \left( \bm{b} - \bm{I} \right) + \mu_2 \left( \mathbb{I_1} \bm{b} - 2 \bm{I} - \bm{b}^2 \right) \Big)}_{\bm\tau} (\nabla_x \diff\bm u)^T , \end{aligned} \]

where the final expression has been identified according to

\[ \diff\bm\tau = \diff\ (\bm F \bm S \bm F^T) = (\nabla_x \diff\bm u) \bm\tau + \bm F \diff\bm S \bm F^T + \bm\tau(\nabla_x \diff\bm u)^T. \]

Collecting terms, we may thus opt to use either of the two forms

(126)\[ \begin{aligned} \diff \bm{\tau} -\bm{\tau}(\nabla_x \diff\bm{u})^T &= (\nabla_x \diff\bm u)\bm\tau + \bm F \diff\bm S \bm F^T \\ &= (\nabla_x \diff\bm u)\bm\tau + \lambda J^2 \trace(\diff\bm \epsilon) \bm{I} + 2 \left( \mu_1 + 2\mu_2 - \frac{\lambda}{2} \left( J^2 -1 \right) \right) \diff \bm{\epsilon} \\ &\quad + \mu_2 \trace \left( \diff \bm{b} \right) \bm{b} - 2\mu_2 \bm{b} \diff \bm{\epsilon} \bm{b}.\\ \end{aligned} \]

with the last line showing the especially compact representation available for Mooney-Rivlin materials.

Command-line interface

To enable the hyperelastic Mooney-Rivlin model, use the model option -model elasticity-mooney-rivlin-current or -model elasticity-mooney-rivlin-initial and set the material parameters listed in Mooney-Rivlin model options. Any parameter without a default option is required.

Table 19 Mooney-Rivlin model options

Option

Description

-model elasticity-mooney-rivlin-current | elasticity-mooney-rivilin-initial

Required to enable the Mooney-Rivlin model, | denotes an option for the user.

-E [real]

Young’s modulus, \(E > 0\)

-nu [real]

Poisson’s ratio, \(\nu \leq 0.5\).

-mu_1 [real]

Mooney-Rivlin material constant, \(\mu_1 > 0\)

-mu_2 [real]

Mooney-Rivlin material constant, \(\mu_2 > 0\)

An example using the Mooney-Rivlin model can be run via

$ ./bin/ratel-quasistatic -options_file examples/ymls/ex02-quasistatic-elasticity-mooney-rivlin-initial-slip.yml

Hencky hyperelasticity

In Hencky-type hyperelasticity, the strain energy \(\psi\) is expressed as a function of the (Eulerian) logarithmic strain tensor \(\textbf{e}^e\), following the classical quadratic form of small-strain elasticity,

(127)\[ \psi(\textbf{e}^e)=\frac{1}{2}\textbf{e}^e:\mathsf C:\textbf{e}^e \]

where \(\mathsf C\) is the fourth order elasticity tensor in (80). As shown in (14), \(\textbf{e}^e\) can be equally defined via the (elastic) left stretch tensor \(\textbf{v}^e\) or the (elastic) left Cauchy-Green strain tensor \(\bm{b}^e=(\textbf{v}^e)^2=\bm{F}^e(\bm{F}^e)^T\)

(128)\[ \textbf{e}^e \equiv \log{\textbf{v}^e}=\frac{1}{2}\log\bm{b}^e = \frac{1}{2}\sum_{i=1}^3\log(\lambda^b_i)\hat{\bm{n}}_i \otimes \hat{\bm{n}}_i \]

with eigenvalues \(\lambda^b_i=\lambda^2_i\) and eigenvectors \(\hat{\bm{n}}_i\). To ensure numerical stability when \(\lambda^b_i \approx 1\), we compute \(\textbf{e}^e\) using the eigenvalues of the Green-Euler strain tensor \(\lambda^e_i\) as [SGTB24]

(129)\[ \frac{1}{2}\sum_{i=1}^3\log(\lambda^b_i)\hat{\bm{n}}_i \otimes \hat{\bm{n}}_i = \frac{1}{2} \sum_{i=1}^3 \log\big(1 + 2 \lambda_i^e \big) \hat{\bm{n}}_i \otimes \hat{\bm{n}}_i = \frac{1}{2} \sum_{i=1}^3 \mathtt{log1p}\big(2 \lambda_i^e \big) \hat{\bm{n}}_i \otimes \hat{\bm{n}}_i \]

The (symmetric) Kirchhoff stress tensor \(\bm{\tau}\) can thus be expressed as

(130)\[ \bm{\tau}\coloneqq 2\frac{\partial\psi}{\partial\bm{b}^e}\bm{b}^e=\frac{\partial\psi}{\partial\textbf{e}^e}:\frac{\partial\log\bm{b}^e}{\partial\bm{b}^e}\bm{b}^e \]

Assuming isotropic elastic response and taking advantage of certain properties of derivatives of isotropic tensor functions, the following identity can be derived [dSNEARJ98]

(131)\[ \frac{\partial\psi}{\partial\textbf{e}^e}:\frac{\partial\log\bm{b}^e}{\partial\bm{b}^e}\bm{b}^e=\frac{\partial\psi}{\partial\textbf{e}^e} \]

Substituting (131) into (130) finally gives

(132)\[ \bm{\tau}=\frac{\partial\psi}{\partial\textbf{e}^e}=\mathsf C:\textbf{e}^e \]

which similarly retains the functional format of linear elasticity.

Note

[NEM16] discuss the physical interpretation and appealing properties of the quadratic Hencky free energy, making a case for its use in moderate strain applications. However, at very large strains (principal stretches \(\lambda_i>1\)), the loss of convexity and inconsistencies with experimental observations have led to a preference for alternative free energy formulations that involve additional elastic constants, such as the Ogden material. For this regime, the same authors introduce the exponentiated Hencky free energy that maintain convexity at the cost of two additional elastic constants.

The strong and weak formulation for current and initial configurations are described in Strong and weak formulations: current configuration and Strong and weak formulations: initial configuration, respectively. Herein, we have only changed \(\bm{S} = \frac{\partial\psi}{\partial\bm{E}}\), thus only the linearization needs to be updated from the neo-Hookean model.

Linearization

The consistent tangent for Hencky materials can be conveniently expressed as the double contraction of three fourth-order tensors [dSNEARJ98]

(133)\[ \frac{\partial{\bm{\tau}}}{\partial\bm{F}}=\mathsf C:\mathsf N:\mathsf B \]

with

(134)\[ \mathsf C=\frac{\partial{\bm{\tau}}}{\partial\textbf{e}} \quad, \quad \mathsf N=\frac{1}{2}\frac{\partial\log\bm{b}}{\partial\bm{b}} \quad, \space \text{and} \quad \mathsf B=\frac{\partial\bm{b}}{\partial\bm{F}} \]

In (133), \(\mathsf C\) is the linear elasticity tensor in (80). Also note that \(\mathsf N\) is the derivative of tensor-valued function of symmetric tensor, for details see [C98] [BJ16],

Expression for \(\mathsf{B}\)

The change of \(\bm{b}\) with \(\bm{F}\) is obtained as,

(135)\[ \diff\bm{b} = \diff(\bm{F} \bm{F}^T) = \diff \bm{F}\bm{F}^T + \bm{F} \diff\bm{F}^T \]
Expression for \(\mathsf{N}\)

The change \(\diff\textbf{e}\) due to a perturbation \(\diff\bm{b}\) can be computed from (128) as

(136)\[ \diff\textbf{e}= \frac{1}{2}\sum_{i=1}^3(\frac{1}{\lambda^b_i}\diff\lambda^b_i\hat{\bm{n}}_i \otimes \hat{\bm{n}}_i +\log(\lambda^b_i){\diff(\hat{\bm{n}}_i \otimes \hat{\bm{n}}_i)}) = \\ \frac{1}{2}\sum_{i=1}^3( \frac{\hat{\bm{n}}_i ^T \diff\bm{b} \space \hat{\bm{n}}_i }{\lambda^b_i}\hat{\bm{n}}_i \otimes \hat{\bm{n}}_i + \log(\lambda^b_i)(\diff\hat{\bm{n}}_i \otimes \hat{\bm{n}}_i + \hat{\bm{n}}_i \otimes \diff\hat{\bm{n}}_i )) \]

Note

Helper Qfunctions are implemented in Ratel to perform the spectral decomposition of a \(3\times3\) symmetric matrix and compute the increments \(\diff\lambda^b_i\) and \(\diff\hat{\bm{n}}_i\) (136), as described for mixed elasticity (see derivation of terms in (205)).

Expression for \(\mathsf{C}\)

Following (132), the change of \(\tau\) as a function of \(\textbf{e}^{e}\) increment takes the form

(137)\[ \diff\bm{\tau} = 2\secondlame\diff\textbf{e}_{\text{dev}} + \bulk\trace(\diff \textbf{e}) \]

where \(\textbf{e}_{\text{dev}}\) is the deviatoric part of \(\textbf{e}^{e}\).

Command-line interface

To enable the hyperelastic Hencky model, use the model option -model elasticity-hencky-current or model elasticity-hencky-initial and set the material parameters listed in Hencky hyperelasticity model options. Any parameter without a default option is required.

Table 20 Hencky hyperelasticity model options

Option

Description

-model elasticity-hencky-current | elasticity-hencky-initial

Required to enable the Hencky hyperelasticity model, | denotes an option for the user.

-E [real]

Young’s modulus, \(E > 0\)

-nu [real]

Poisson’s ratio, \(\nu \leq 0.5\).

An example using the Hencky hyperelasticity model can be run via

$ ./bin/ratel-quasistatic -options_file examples/ymls/ex02-quasistatic-elasticity-hencky-initial-principal.yml