This article shows how to implement various hyperelastic behaviours
in MFront
.
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
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}\,C+I_{2}\,\underline{I} \\ \end{aligned} \right. \]
The second derivative of the invariants are given by: \[ \left\{ \begin{aligned} {\displaystyle \frac{\displaystyle \partial^{2} I_{1}}{\displaystyle \partial \underline{C}^{2}}} &= 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.
More precisely, we consider an hyperelastic behaviour whose potential \(W\) is decomposed in an volumetric part \(W^{\text{v}}\) and an isochoric part \(W^{\text{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}\)
\(\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} \]
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 the second Piola-Kirchhoff stress and \(\underline{S}^{i}=2\,{\displaystyle \frac{\displaystyle \partial W^{i}}{\displaystyle \partial \underline{C}}}\) is the isochoric part.
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} \]
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 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} \]
An implementation of the Signorini behaviour based on the previous developments is available on a dedicated page.
We now consider another class of hyperelastic behaviour of the form: More precisely, we consider an hyperelastic behaviour whose potential \(W\) is decomposed in an volumetric part \(W^{\text{v}}\) and an isochoric part \(W^{\text{i}}\):
\[ 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 \(\underline{S}_{p}^{i}\) of \(W^{i}_{p}\) to the second Piola Kirchoff stress: \[ \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 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 eigentenseurs of the right Cauchy tensor.
Computing \({\displaystyle
\frac{\displaystyle \partial^{2} f}{\displaystyle \partial
\underline{C}^{2}}}\) is a non trivial task as one have to take
care of the cases where two eigenvalues are equal and repeatedly use the
Hospital 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.