This article shows how to implement various hyperelastic behaviours in MFront.

A first class of hyperelastic behaviours

In this section, we consider an isotropic hyperelastic behaviour whose potential \(W\) is written in terms of the invariants of the right Cauchy tensor \(\underline{C}\):

\[ W{\left(\underline{C}\right)}=W{\left(I_{1},I_{2},I_{3}\right)} \]

The three invariants are defined by: \[ \left\{ \begin{aligned} I_{1} &= {\mathrm{tr}{\left(\underline{C}\right)}} \\ I_{2} &= {{\displaystyle \frac{\displaystyle 1}{\displaystyle 2}}}\left({\left({\mathrm{tr}{\left(\underline{C}\right)}}\right)}^{2}-{\mathrm{tr}{\left(\underline{C}^{2}\right)}}\right) \\ I_{3} &= \det{\left(\underline{C}\right)} = J^{2} \end{aligned} \right. \]

where \(J\) is the jacobian of the deformation gradient

Computation of the second Piola-Kirchhoff stress

The second Piola-Kirchhoff stress \(\underline{S}\) is then defined by:

\[ \underline{S}=2{\displaystyle \frac{\displaystyle \partial W}{\displaystyle \partial \underline{C}}}=2\,{\displaystyle \frac{\displaystyle \partial W}{\displaystyle \partial I_{1}}}\,{\displaystyle \frac{\displaystyle \partial I_{1}}{\displaystyle \partial \underline{C}}}+2\,{\displaystyle \frac{\displaystyle \partial W}{\displaystyle \partial I_{2}}}\,{\displaystyle \frac{\displaystyle \partial I_{2}}{\displaystyle \partial \underline{C}}}+2\,{\displaystyle \frac{\displaystyle \partial W}{\displaystyle \partial I_{3}}}\,{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}} \]

The derivative of the invariants are classically given by: \[ \left\{ \begin{aligned} {\displaystyle \frac{\displaystyle \partial I_{1}}{\displaystyle \partial \underline{C}}} &= \underline{I}\\ {\displaystyle \frac{\displaystyle \partial I_{2}}{\displaystyle \partial \underline{C}}} &= I_{1}\,\underline{I}-\underline{C}\\ {\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}} &= \underline{C}^{2}-I_{1}\,\underline{C}+I_{2}\,\underline{I} \\ \end{aligned} \right. \]

Computation of consistent tangent operator

The second derivative of the invariants are given by: \[ \left\{ \begin{aligned} {\displaystyle \frac{\displaystyle \partial^{2} I_{1}}{\displaystyle \partial \underline{C}^{2}}} &= \underline{0}\\ {\displaystyle \frac{\displaystyle \partial^{2} I_{2}}{\displaystyle \partial \underline{C}^{2}}} &= \underline{I}\otimes\underline{I}-\underline{\underline{\mathbf{I}}}\\ \end{aligned} \right. \]

In MFront, the fourth order tensors \(\underline{I}\otimes\underline{I}\) and \(\underline{\underline{\mathbf{I}}}\) are computed by Stensor4::IxI() and Stensor4::Id() respectively.

The \({\displaystyle \frac{\displaystyle \partial^{2} I_{3}}{\displaystyle \partial \underline{C}^{2}}}\) term can be computed using the computeDeterminantSecondDerivative function.

A second class of hyperelastic behaviours

More precisely, we consider a hyperelastic behaviour whose potential \(W\) is decomposed into a volumetric part \(W^{v}\) and an isochoric part \(W^{i}\):

\[ W{\left(\underline{C}\right)}=W^{v}{\left(J\right)}+W^{i}{\left(\bar{I}_{1},\bar{I}_{2}\right)} \]

where \(\bar{I}_{1}\) and \(\bar{I}_{2}\) are the first and second invariant of the isochoric right Cauchy tensor \(\underline{\bar{C}}\) defined by:

\[ \underline{\bar{C}}=J^{-2/3}\,\underline{C}= I_{3}^{-1/3}\,\underline{C}= \bar{c}_{I_{3}}\,\underline{C} \]

with \(\bar{c}_{I_{3}}=I_{3}^{-1/3}\)

Derivatives of the invariants of the isochoric right Cauchy tensor

\(\bar{I}_{1}\) and \(\bar{I}_{2}\) are related to the first and second invariants of the right Cauchy tensor by:

\[ \begin{aligned} \bar{I}_{1} &= I_{3}^{-1/3}\,I_{1} = \bar{c}_{I_{3}}\,I_{1}\\ \bar{I}_{2} &= I_{3}^{-2/3}\,I_{2} = \bar{c}_{I_{3}}^{2}\,I_{2}\\ \end{aligned} \]

The following derivatives will be useful in the following: \[ \left\{ \begin{aligned} {\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}} &= {\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial I_{3}}}\,{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}} =-\frac{1}{3}\,\bar{c}_{I_{3}}^{4}\,{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}} \\ {\displaystyle \frac{\displaystyle \partial^{2} \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}^{2}}} &= \frac{4}{9}\,\bar{c}_{I_{3}}^{7}{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}}-\frac{1}{3}\,\bar{c}_{I_{3}}^{4}\,{\displaystyle \frac{\displaystyle \partial^{2} I_{3}}{\displaystyle \partial \underline{C}^{2}}} \\ \end{aligned} \right. \]

\({\displaystyle \frac{\displaystyle \partial \bar{I}_{1}}{\displaystyle \partial \underline{C}}}\) is given by: \[ {\displaystyle \frac{\displaystyle \partial \bar{I}_{1}}{\displaystyle \partial \underline{C}}}=\bar{c}_{I_{3}}\underline{I}+\,I_{1}\,{\displaystyle \frac{\displaystyle \partial iJb}{\displaystyle \partial \underline{C}}} \]

\({\displaystyle \frac{\displaystyle \partial \bar{I}_{2}}{\displaystyle \partial \underline{C}}}\) is given by: \[ {\displaystyle \frac{\displaystyle \partial \bar{I}_{2}}{\displaystyle \partial \underline{C}}}=\bar{c}_{I_{3}}^{2}\,{\displaystyle \frac{\displaystyle \partial I_{2}}{\displaystyle \partial \underline{C}}}+2\,I_{2}\,\bar{c}_{I_{3}}\,{\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}} \]

The second derivative of the first invariant of the isochoric right Cauchy tensor is:

\[ {\displaystyle \frac{\displaystyle \partial^{2} \bar{I}_{1}}{\displaystyle \partial \underline{C}^{2}}}= \underline{I}\otimes{\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}}+ {\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}}\otimes\underline{I}+ I_{1}\,{\displaystyle \frac{\displaystyle \partial^{2} \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}^{2}}} \]

The second derivative of the second invariant of the isochoric right Cauchy tensor is:

\[ \begin{aligned} {\displaystyle \frac{\displaystyle \partial^{2} \bar{I}_{2}}{\displaystyle \partial \underline{C}^{2}}}&= 2\,\bar{c}_{I_{3}}\,{\displaystyle \frac{\displaystyle \partial I_{2}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}}+ \bar{c}_{I_{3}}^{2}\,{\displaystyle \frac{\displaystyle \partial^{2} I_{2}}{\displaystyle \partial \underline{C}^{2}}}+ 2\,\bar{c}_{I_{3}}\,{\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial I_{2}}{\displaystyle \partial \underline{C}}}+ 2\,I_{2}\,{\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}}+ 2\,I_{2}\,\bar{c}_{I_{3}}\,{\displaystyle \frac{\displaystyle \partial^{2} \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}^{2}}} \end{aligned} \]

General derivation of the second Piola-Kirchhoff stress and its derivative

The second Piola-Kirchhoff stress \(\underline{S}\) is defined by:

\[ \underline{S}=2{\displaystyle \frac{\displaystyle \partial W}{\displaystyle \partial \underline{C}}} \]

The more natural expression of the consistent tangent operator in that context is \({\displaystyle \frac{\displaystyle \partial \underline{S}}{\displaystyle \partial \underline{C}}}\). We let MFront make an implicit transformation to the appropriate tangent operator expected by the solver.

The general expression of the second Piola-Kirchhoff stress is:

\[ \underline{S}=2\,{\displaystyle \frac{\displaystyle \partial W^{v}}{\displaystyle \partial \underline{C}}}+2{\displaystyle \frac{\displaystyle \partial W^{i}}{\displaystyle \partial \underline{C}}}=\underline{S}^{v}+\underline{S}^{i} \]

where \(\underline{S}^{v}=2\,{\displaystyle \frac{\displaystyle \partial W^{v}}{\displaystyle \partial \underline{C}}}\) is the volumetric part of the second Piola-Kirchhoff stress and \(\underline{S}^{i}=2\,{\displaystyle \frac{\displaystyle \partial W^{i}}{\displaystyle \partial \underline{C}}}\) is the isochoric part.

Volumetric part of the second Piola-Kirchhoff stress and its derivative

By chain rule, we have: \[ \underline{S}^{v} = 2\,{\displaystyle \frac{\displaystyle \partial W^{v}}{\displaystyle \partial \underline{C}}}=2\,{\displaystyle \frac{\displaystyle \partial W^{v}}{\displaystyle \partial J}}\,{\displaystyle \frac{\displaystyle \partial J}{\displaystyle \partial I3}}{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}} = 2\,{\displaystyle \frac{\displaystyle \partial W^{v}}{\displaystyle \partial J}}{{\displaystyle \frac{\displaystyle 1}{\displaystyle 2\,J}}}\,{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}} = {{\displaystyle \frac{\displaystyle 1}{\displaystyle J}}}\,{\displaystyle \frac{\displaystyle \partial W^{v}}{\displaystyle \partial J}}\,{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}} \]

The computation of \({\displaystyle \frac{\displaystyle \partial \underline{S}^{v}}{\displaystyle \partial \underline{C}}}\) is straightforward:

\[ \begin{aligned} {\displaystyle \frac{\displaystyle \partial \underline{S}^{v}}{\displaystyle \partial \underline{C}}} &={\displaystyle \frac{\displaystyle \partial }{\displaystyle \partial J}}{\left({{\displaystyle \frac{\displaystyle 1}{\displaystyle J}}}\,{\displaystyle \frac{\displaystyle \partial W^{v}}{\displaystyle \partial J}}\right)}\,{\displaystyle \frac{\displaystyle \partial J}{\displaystyle \partial I_{3}}}\,{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}}+{{\displaystyle \frac{\displaystyle 1}{\displaystyle J}}}\,{\displaystyle \frac{\displaystyle \partial W^{v}}{\displaystyle \partial J}}\,{\displaystyle \frac{\displaystyle \partial^{2} I_{3}}{\displaystyle \partial \underline{C}^{2}}}\\ &={\left({\displaystyle \frac{\displaystyle \partial^{2} W^{v}}{\displaystyle \partial J^{2}}}-{{\displaystyle \frac{\displaystyle 1}{\displaystyle J}}}\,{\displaystyle \frac{\displaystyle \partial W^{v}}{\displaystyle \partial J}}\right)}\,\frac{1}{2\,I_{3}}\,{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial I_{3}}{\displaystyle \partial \underline{C}}}+{{\displaystyle \frac{\displaystyle 1}{\displaystyle J}}}\,{\displaystyle \frac{\displaystyle \partial W^{v}}{\displaystyle \partial J}}\,{\displaystyle \frac{\displaystyle \partial^{2} I_{3}}{\displaystyle \partial \underline{C}^{2}}}\\ \end{aligned} \]

Isochoric part of the second Piola-Kirchhoff stress and its derivative

By chain rule, we have: \[ \underline{S}^{i} = 2\,{\displaystyle \frac{\displaystyle \partial W^{i}}{\displaystyle \partial \underline{C}}}=2\,{\displaystyle \frac{\displaystyle \partial W^{i}}{\displaystyle \partial \bar{I}_{1}}}\,{\displaystyle \frac{\displaystyle \partial \bar{I}_{1}}{\displaystyle \partial \underline{C}}}+2\,{\displaystyle \frac{\displaystyle \partial W^{i}}{\displaystyle \partial \bar{I}_{2}}}\,{\displaystyle \frac{\displaystyle \partial \bar{I}_{2}}{\displaystyle \partial \underline{C}}} \]

The second derivative is also straightforward: \[ \begin{aligned} {\displaystyle \frac{\displaystyle \partial^{2} \underline{S}^{i}}{\displaystyle \partial \underline{C}^{2}}}=& 2\,{\displaystyle \frac{\displaystyle \partial^{2} W^{i}}{\displaystyle \partial \bar{I}_{1}^{2}}}\,{\displaystyle \frac{\displaystyle \partial \bar{I}_{1}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial \bar{I}_{1}}{\displaystyle \partial \underline{C}}}+ 2\,{\displaystyle \frac{\displaystyle \partial^{2} W^{i}}{\partial \bar{I}_{1}\partial \bar{I}_{2}}}\,{\displaystyle \frac{\displaystyle \partial \bar{I}_{1}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial \bar{I}_{2}}{\displaystyle \partial \underline{C}}}+ 2\,{\displaystyle \frac{\displaystyle \partial W^{i}}{\displaystyle \partial \bar{I}_{1}}}{\displaystyle \frac{\displaystyle \partial^{2} \bar{I}_{1}}{\displaystyle \partial \underline{C}^{2}}}+\\ & 2\,{\displaystyle \frac{\displaystyle \partial^{2} W^{i}}{\displaystyle \partial \bar{I}_{2}^{2}}}\,{\displaystyle \frac{\displaystyle \partial \bar{I}_{2}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial \bar{I}_{2}}{\displaystyle \partial \underline{C}}}+ 2\,{\displaystyle \frac{\displaystyle \partial^{2} W^{i}}{\partial \bar{I}_{1}\partial \bar{I}_{2}}}\,{\displaystyle \frac{\displaystyle \partial \bar{I}_{2}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial \bar{I}_{1}}{\displaystyle \partial \underline{C}}}+ 2\,{\displaystyle \frac{\displaystyle \partial W^{i}}{\displaystyle \partial \bar{I}_{2}}}{\displaystyle \frac{\displaystyle \partial^{2} \bar{I}_{2}}{\displaystyle \partial \underline{C}^{2}}} \end{aligned} \]

Application to the Signorini behaviour

An implementation of the Signorini behaviour based on the previous developments is available on a dedicated page.

Odgen Hyperelastic behaviours

We now consider another class of hyperelastic behaviour of the form:

\[ W{\left(\underline{C}\right)}=W^{v}{\left(J\right)}+\bar{W}^{i}{\left(\bar{\lambda}_{1},\bar{\lambda}_{2},\bar{\lambda}_{3}\right)} \]

where \({\left(\bar{\lambda}_{i}\right)}_{i\in \{1,2,3\}}\) are the eigenvalues of the isochoric right Cauchy tensor \(\underline{\bar{C}}\).

\[ \bar{\lambda}_{i}=\bar{c}_{I_{3}}\,\lambda_{i} \]

The volumetric part has been treated in the previous section. Let us consider the isochoric part which is assumed to have the following Odgen-type form:

\[ \bar{W}^{i}{\left(\bar{\lambda}_{1},\bar{\lambda}_{2},\bar{\lambda}_{3}\right)}=\sum_{p=1}^{N}\bar{W}^{i}_{p} \]

\[ \bar{W}^{i}_{p}{\left(\bar{\lambda}_{1},\bar{\lambda}_{2},\bar{\lambda}_{3}\right)} ={{\displaystyle \frac{\displaystyle \mu_{p}}{\displaystyle \alpha_{p}}}}{\left(\bar{\lambda}_{1}^{\alpha_{p}/2}+\bar{\lambda}_{2}^{\alpha_{p}/2}+\bar{\lambda}_{3}^{\alpha_{p}/2}-3\right)} ={{\displaystyle \frac{\displaystyle \mu_{p}}{\displaystyle \alpha_{p}}}}\bar{c}_{I_{3}}^{\alpha_{p}/2}\,f{\left(\lambda_{1},\lambda_{2},\lambda_{3}\right)}-{{\displaystyle \frac{\displaystyle 3\,\mu_{p}}{\displaystyle \alpha_{p}}}} \]

with \(f{\left(\lambda_{1},\lambda_{2},\lambda_{3}\right)}=\lambda_{1}^{\alpha_{p}/2}+\lambda_{2}^{\alpha_{p}/2}+\lambda_{3}^{\alpha_{p}/2}\)

Let us focus on the contribution of \(W^{i}_{p}\) to the second Piola-Kirchhoff stress \(\underline{S}_{p}^{i}\): \[ \begin{aligned} \underline{S}_{p}^{i}=2\,{\displaystyle \frac{\displaystyle \partial \bar{W}^{i}_{p}}{\displaystyle \partial \underline{C}}}= \mu_{p}\,\bar{c}_{I_{3}}^{\alpha_{p}/2-1}\,f{\left(\lambda_{1},\lambda_{2},\lambda_{3}\right)}{\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}}+ {{\displaystyle \frac{\displaystyle 2\,\mu_{p}\,\bar{c}_{I_{3}}^{\alpha_{p}/2}}{\displaystyle \alpha_{p}}}}\,{\displaystyle \frac{\displaystyle \partial f}{\displaystyle \partial \underline{C}}}\\ \end{aligned} \]

The associated contribution to the consistent tangent operator is given by the derivative of \(\underline{S}_{p}^{i}\) with respect to the right Cauchy tensor \(\underline{C}\):

\[ \begin{aligned} {{\displaystyle \frac{\displaystyle 1}{\displaystyle \mu_{p}}}}\,{\displaystyle \frac{\displaystyle \partial S_{p}^{i}}{\displaystyle \partial \underline{C}}} &=\frac{\alpha_{p}-2}{2}\,\bar{c}_{I_{3}}^{\alpha_{p}/2-2}\,f{\left(\lambda_{1},\lambda_{2},\lambda_{3}\right)}{\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}}\\ &+\bar{c}_{I_{3}}^{\alpha_{p}/2-1}\,f{\left(\lambda_{1},\lambda_{2},\lambda_{3}\right)}\,{\displaystyle \frac{\displaystyle \partial^{2} \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}^{2}}}+\bar{c}_{I_{3}}^{\alpha_{p}/2-1}\,{\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial f}{\displaystyle \partial \underline{C}}}\\ &+\bar{c}_{I_{3}}^{\alpha_{p}/2-1}\,{\displaystyle \frac{\displaystyle \partial f}{\displaystyle \partial \underline{C}}}\otimes{\displaystyle \frac{\displaystyle \partial \bar{c}_{I_{3}}}{\displaystyle \partial \underline{C}}}+ 2\,{{\displaystyle \frac{\displaystyle \bar{c}_{I_{3}}^{\alpha_{p}/2}}{\displaystyle \alpha_{p}}}}\,{\displaystyle \frac{\displaystyle \partial^{2} f}{\displaystyle \partial \underline{C}^{2}}} \end{aligned} \]

In this expression, we have: \[ {\displaystyle \frac{\displaystyle \partial f}{\displaystyle \partial \underline{C}}}=\sum_{i=1}^{3}{{\displaystyle \frac{\displaystyle \alpha_{p}}{\displaystyle 2}}}\,\lambda_{i}^{\alpha_{p}/2-1}\,\underline{n}_{i} \]

where \({\left(\underline{n}_{i}\right)}_{i\in \{1,2,3\}}\) are the eigentensors of the right Cauchy tensor.

Computing \({\displaystyle \frac{\displaystyle \partial^{2} f}{\displaystyle \partial \underline{C}^{2}}}\) is a non trivial task as one has to take care of the cases where two eigenvalues are equal and repeatedly use L’Hospital’s rule to pass to the limit. For this reason, it is much easier to use the computeIsotropicFunctionAndDerivative static method of the stensor class.

An implementation of the Ogden behaviour based on the previous developments is available on a dedicated page.