Frameworks#

The (topologic) deformation of a solid body is given by a displacement field. The deformation gradient, the right and left Cauchy-Green deformation tensors as well as related strain tensors are displacement- or deformation-derived kinematic quantities. The kinetics, i.e. the force vector acting on a solid body, is evaluated by the stress tensor and the appropriate area normal vector. The constitutive material model is formulated within a framework which links work-conjugate quantities of stress and strain. The stress tensor of the framework has to be transformed to be consistent with the force and area normal vectors. Here, the first Piola-Kirchhoff stress tensor is used to evaluate the force vector in the deformed configuration by the area normal vector of the undeformed configuration.

Generalized Total-Lagrange Frameworks for isotropic hyperelastic material formulations based on the invariants of the right Cauchy-Green deformation tensor and the principal stretches enable a clean coding of isotropic material formulations.

../_images/frameworks.png
class hyperelastic.frameworks.GeneralizedInvariants(material, fun, nstatevars=0, parallel=False, **kwargs)[source]#

Generalized-invariants isotropic hyperelastic material formulation based on the principal stretches.

(1)#\[\psi = \psi \left( I_1\left( E_1, E_2, E_3 \right), I_2\left( E_1, E_2, E_3 \right), I_3\left( E_1, E_2, E_3 \right) \right)\]

The three principal invariants

(2)#\[ \begin{align}\begin{aligned}J_1 &= E_1 + E_2 + E_3\\J_2 &= E_1 E_2 + E_2 E_3 + E_1 E_3\\J_3 &= E_1 E_2 E_3\end{aligned}\end{align} \]

are formulated on a one-dimensional strain-stretch relation.

(3)#\[ \begin{align}\begin{aligned}E_\alpha &= f(\lambda_\alpha)\\E'_\alpha &= f'(\lambda_\alpha) = \frac{\partial f(\lambda_\alpha)} {\partial \lambda_\alpha}\\E''_\alpha &= f''(\lambda_\alpha) = \frac{\partial^2 f(\lambda_\alpha)} {\partial \lambda_\alpha~\partial \lambda_\alpha}\end{aligned}\end{align} \]

Depending on the strain-stretch relation, the invariants contain deformation- independent values.

(4)#\[ \begin{align}\begin{aligned}J_{1,0} &= J_1(E_\alpha(\lambda_\alpha=1))\\J_{2,0} &= J_2(E_\alpha(\lambda_\alpha=1))\\J_{3,0} &= J_3(E_\alpha(\lambda_\alpha=1))\end{aligned}\end{align} \]

The deformation-dependent parts of the invariants are scaled by deformation- independent coefficients of normalization. The deformation-independent parts are re-added after the scaling.

(5)#\[ \begin{align}\begin{aligned}I_1 &= c_1 (J_1 - J_{1,0}) + J_{1,0}\\I_2 &= c_2 (J_2 - J_{2,0}) + J_{2,0}\\I_3 &= J_3\end{aligned}\end{align} \]

Note that the scaling is only applied to the first and second invariant, as the third invariant does not contribute to the strain energy function at the undeformed state.

(6)#\[ \begin{align}\begin{aligned}E_0 &= E(\lambda=1)\\E'_0 &= E'(\lambda=1)\\E''_0 &= E''(\lambda=1)\end{aligned}\end{align} \]

The second partial derivative of the strain w.r.t. the stretch must be provided for a reference strain, e.g. the Green-Lagrange strain measure (at the undeformed state).

(7)#\[ \begin{align}\begin{aligned}J''_{1,0} &= \frac{3}{2} \left( E''_0 + E'_0 \right)\\J''_{2,0} &= \frac{3}{2} \left( (2 E_0 (E''_0 + E'_0)) - E'^2_0 \right)\end{aligned}\end{align} \]
(8)#\[ \begin{align}\begin{aligned}c_1 &= \frac{J''_{1,0,ref}}{J''_{1,0}}\\c_2 &= \frac{J''_{2,0,ref}}{J''_{2,0}}\end{aligned}\end{align} \]

The first partial derivatives of the strain energy function w.r.t. the invariants

(9)#\[ \begin{align}\begin{aligned}\psi_{,1} &= \frac{\partial \psi}{\partial I_1}\\\psi_{,2} &= \frac{\partial \psi}{\partial I_2}\\\psi_{,3} &= \frac{\partial \psi}{\partial I_3}\end{aligned}\end{align} \]

and the partial derivatives of the invariants w.r.t. the principal stretches are defined. From here on, this is consistent with any invariant-based hyperelastic material formulation, except for the factors of normalization.

(10)#\[ \begin{align}\begin{aligned}\frac{\partial I_1}{\partial E_\alpha} &= c_1\\\frac{\partial I_2}{\partial E_\alpha} &= c_2 \left( E_\beta + E_\gamma \right)\\\frac{\partial I_3}{\partial E_\alpha} &= E_\beta E_\gamma\end{aligned}\end{align} \]

The first partial derivatives of the strain energy density w.r.t. the principal stretches are required for the principal values of the stress.

(11)#\[\frac{\partial \psi}{\partial \lambda_\alpha} = \frac{\partial \psi}{\partial I_1} \frac{\partial I_1}{\partial E_\alpha} \frac{\partial E_\alpha}{\partial \lambda_\alpha} + \frac{\partial \psi}{\partial I_2} \frac{\partial I_2}{\partial E_\alpha} \frac{\partial E_\alpha}{\partial \lambda_\alpha} + \frac{\partial \psi}{\partial I_3} \frac{\partial I_3}{\partial E_\alpha} \frac{\partial E_\alpha}{\partial \lambda_\alpha}\]

Furthermore, the second partial derivatives of the strain energy density w.r.t. the principal stretches, necessary for the principal components of the elastic tangent moduli, are carried out. This is done in two steps: first, the second partial derivatives w.r.t. the principal strain components are carried out, followed by the projection to the derivatives w.r.t. the principal stretches.

(12)#\[ \begin{align}\begin{aligned}\frac{\partial^2 \psi}{\partial E_\alpha~\partial E_\beta} &= \frac{\partial^2 \psi}{\partial I_1~\partial I_1} \frac{\partial I_1}{\partial E_\alpha} \frac{\partial I_1}{\partial E_\beta} + \frac{\partial^2 \psi}{\partial I_2~\partial I_2} \frac{\partial I_2}{\partial E_\alpha} \frac{\partial I_2}{\partial E_\beta} + \frac{\partial^2 \psi}{\partial I_3~\partial I_3} \frac{\partial I_3}{\partial E_\alpha} \frac{\partial I_3}{\partial E_\beta}\\ &+ \frac{\partial^2 \psi}{\partial I_1~\partial I_2} \left( \frac{\partial I_1}{\partial E_\alpha} \frac{\partial I_2}{\partial E_\beta} + \frac{\partial I_2}{\partial E_\alpha} \frac{\partial I_1}{\partial E_\beta} \right)\\ &+ \frac{\partial^2 \psi}{\partial I_2~\partial I_3} \left( \frac{\partial I_2}{\partial E_\alpha} \frac{\partial I_3}{\partial E_\beta} + \frac{\partial I_3}{\partial E_\alpha} \frac{\partial I_2}{\partial E_\beta} \right)\\ &+ \frac{\partial^2 \psi}{\partial I_1~\partial I_3} \left( \frac{\partial I_1}{\partial E_\alpha} \frac{\partial I_3}{\partial E_\beta} + \frac{\partial I_3}{\partial E_\alpha} \frac{\partial I_1}{\partial E_\beta} \right)\\ &+ \frac{\partial \psi}{\partial I_1} \frac{\partial^2 I_1}{\partial E_\alpha~\partial E_\beta} + \frac{\partial \psi}{\partial I_2} \frac{\partial^2 I_1}{\partial E_\alpha~\partial E_\beta} + \frac{\partial \psi}{\partial I_3} \frac{\partial^2 I_1}{\partial E_\alpha~\partial E_\beta}\end{aligned}\end{align} \]
(13)#\[\frac{\partial^2 \psi}{\partial \lambda_\alpha~\partial \lambda_\beta} = \frac{\partial E_\alpha}{\partial \lambda_\alpha} \frac{\partial^2 \psi}{\partial E_\alpha~\partial E_\beta} \frac{\partial E_\beta} {\partial \lambda_\beta} + \left( \frac{\partial \psi}{\partial I_1} \frac{\partial I_1}{\partial E_\alpha} + \frac{\partial \psi}{\partial I_2} \frac{\partial I_2}{\partial E_\alpha} + \frac{\partial \psi}{\partial I_3} \frac{\partial I_3}{\partial E_\alpha} \right) \frac{\partial^2 E_\alpha}{\partial \lambda_\alpha \partial \lambda_\alpha}\]
gradient(C, statevars)#

The gradient as the partial derivative of the strain energy function w.r.t. the right Cauchy-Green deformation tensor (one half of the second Piola Kirchhoff stress tensor).

hessian(C, statevars)#

The hessian as the second partial derivatives of the strain energy function w.r.t. the right Cauchy-Green deformation tensor (a quarter of the Lagrangian fourth-order elasticity tensor associated to the second Piola-Kirchhoff stress tensor).

class hyperelastic.frameworks.Invariants(material, nstatevars=0, parallel=False)[source]#

The Framework for a Total-Lagrangian invariant-based isotropic hyperelastic material formulation provides the material behaviour-independent parts for evaluating the second Piola-Kirchhoff stress tensor as well as its associated fourth-order elasticity tensor.

The gradient as well as the hessian of the strain energy function are carried out w.r.t. the right Cauchy-Green deformation tensor. Hence, the work-conjugate stress tensor is one half of the second Piola-Kirchhoff stress tensor and the fourth-order elasticitiy tensor used here is a quarter of the Total-Lagrangian elasticity tensor.

(14)#\[\psi(\boldsymbol{C}) = \psi(I_1(\boldsymbol{C}), I_2(\boldsymbol{C}), I_3(\boldsymbol{C}))\]

The first and second invariants of the left or right Cauchy-Green deformation tensor are identified as factors of their characteristic polynomial,

(15)#\[ \begin{align}\begin{aligned}I_1 &= \text{tr}(\boldsymbol{C})\\I_2 &= \frac{1}{2} \left( \text{tr}(\boldsymbol{C})^2 - \text{tr}(\boldsymbol{C}^2) \right)\\I_3 &= \det(\boldsymbol{C})\end{aligned}\end{align} \]

where the Cauchy-Green deformation tensors eliminate the rigid body rotations of the deformation gradient and serve as a quadratic change-of-length measure of the deformation.

(16)#\[ \begin{align}\begin{aligned}\boldsymbol{C} &= \boldsymbol{F}^T \boldsymbol{F}\\\boldsymbol{b} &= \boldsymbol{F} \boldsymbol{F}^T\end{aligned}\end{align} \]

The first partial derivatives of the strain energy function w.r.t. the invariants

(17)#\[ \begin{align}\begin{aligned}\psi_{,1} &= \frac{\partial \psi}{\partial I_1}\\\psi_{,2} &= \frac{\partial \psi}{\partial I_2}\\\psi_{,3} &= \frac{\partial \psi}{\partial I_3}\end{aligned}\end{align} \]

and the partial derivatives of the invariants w.r.t. the right Cauchy-Green deformation tensor are defined.

(18)#\[ \begin{align}\begin{aligned}\frac{\partial I_1}{\partial \boldsymbol{C}} &= \boldsymbol{I}\\\frac{\partial I_2}{\partial \boldsymbol{C}} &= \left( I_1 \boldsymbol{I} - \boldsymbol{C} \right)\\\frac{\partial I_3}{\partial \boldsymbol{C}} &= I_3 \boldsymbol{C}^{-1}\end{aligned}\end{align} \]

The second Piola-Kirchhoff stress tensor is formulated by the application of the chain rule.

(19)#\[\frac{\partial \psi}{\partial \boldsymbol{C}} = \frac{\partial \psi}{\partial I_1} \frac{\partial I_1}{\partial \boldsymbol{C}} + \frac{\partial \psi}{\partial I_2} \frac{\partial I_2}{\partial \boldsymbol{C}} + \frac{\partial \psi}{\partial I_3} \frac{\partial I_3}{\partial \boldsymbol{C}}\]

Furthermore, the second partial derivatives of the elasticity tensor are carried out.

(20)#\[ \begin{align}\begin{aligned}\frac{\partial^2 \psi}{\partial \boldsymbol{C}~\partial \boldsymbol{C}} &= \frac{\partial^2 \psi}{\partial I_1~\partial I_1} \left( \frac{\partial I_1}{\partial \boldsymbol{C}} \otimes \frac{\partial I_1}{\partial \boldsymbol{C}} \right)\\ &+ \frac{\partial^2 \psi}{\partial I_2~\partial I_2} \left( \frac{\partial I_2}{\partial \boldsymbol{C}} \otimes \frac{\partial I_2}{\partial \boldsymbol{C}} \right)\\ &+ \frac{\partial^2 \psi}{\partial I_3~\partial I_3} \left( \frac{\partial I_3}{\partial \boldsymbol{C}} \otimes \frac{\partial I_3}{\partial \boldsymbol{C}} \right)\\ &+ \frac{\partial^2 \psi}{\partial I_1~\partial I_2} \left( \frac{\partial I_1}{\partial \boldsymbol{C}} \otimes \frac{\partial I_2}{\partial \boldsymbol{C}} + \frac{\partial I_2}{\partial \boldsymbol{C}} \otimes \frac{\partial I_1}{\partial \boldsymbol{C}} \right)\\ &+ \frac{\partial^2 \psi}{\partial I_2~\partial I_3} \left( \frac{\partial I_2}{\partial \boldsymbol{C}} \otimes \frac{\partial I_3}{\partial \boldsymbol{C}} + \frac{\partial I_3}{\partial \boldsymbol{C}} \otimes \frac{\partial I_2}{\partial \boldsymbol{C}} \right)\\ &+ \frac{\partial^2 \psi}{\partial I_1~\partial I_3} \left( \frac{\partial I_1}{\partial \boldsymbol{C}} \otimes \frac{\partial I_3}{\partial \boldsymbol{C}} + \frac{\partial I_3}{\partial \boldsymbol{C}} \otimes \frac{\partial I_1}{\partial \boldsymbol{C}} \right)\\ &+ \frac{\partial \psi}{\partial I_1} \frac{\partial^2 I_1}{\partial \boldsymbol{C}~\partial \boldsymbol{C}} + \frac{\partial \psi}{\partial I_2} \frac{\partial^2 I_2}{\partial \boldsymbol{C}~\partial \boldsymbol{C}} + \frac{\partial \psi}{\partial I_3} \frac{\partial^2 I_3}{\partial \boldsymbol{C}~\partial \boldsymbol{C}}\end{aligned}\end{align} \]

The only non material behaviour-related terms which are not already defined during stress evaluation are the second partial derivatives of the invariants w.r.t. the right Cauchy-Green deformation tensor.

(21)#\[ \begin{align}\begin{aligned}\frac{\partial^2 I_1}{\partial \boldsymbol{C}~\partial \boldsymbol{C}} &= \mathbb{0}\\\frac{\partial^2 I_2}{\partial \boldsymbol{C}~\partial \boldsymbol{C}} &= \boldsymbol{I} \otimes \boldsymbol{I} - \boldsymbol{I} \odot \boldsymbol{I}\\\frac{\partial^2 I_3}{\partial \boldsymbol{C}~\partial \boldsymbol{C}} &= I_3 \left( \boldsymbol{C}^{-1} \otimes \boldsymbol{C}^{-1} - \boldsymbol{C}^{-1} \odot \boldsymbol{C}^{-1} \right)\end{aligned}\end{align} \]
gradient(C, statevars)[source]#

The gradient as the partial derivative of the strain energy function w.r.t. the right Cauchy-Green deformation tensor (one half of the second Piola Kirchhoff stress tensor).

hessian(C, statevars)[source]#

The hessian as the second partial derivatives of the strain energy function w.r.t. the right Cauchy-Green deformation tensor (a quarter of the Lagrangian fourth-order elasticity tensor associated to the second Piola-Kirchhoff stress tensor).

class hyperelastic.frameworks.Stretches(material, nstatevars=0, parallel=False)[source]#

The Framework for a Total-Lagrangian stretch-based isotropic hyperelastic material formulation provides the material behaviour-independent parts for evaluating the second Piola-Kirchhoff stress tensor as well as its associated fourth-order elasticity tensor.

The gradient as well as the hessian of the strain energy function are carried out w.r.t. the right Cauchy-Green deformation tensor. Hence, the work-conjugate stress tensor is one half of the second Piola-Kirchhoff stress tensor and the fourth-order elasticitiy tensor used here is a quarter of the Total-Lagrangian elasticity tensor.

(22)#\[\psi(\boldsymbol{C}) = \psi(\lambda_\alpha(\boldsymbol{C}))\]

The principal stretches (the square roots of the eigenvalues) of the left or right Cauchy-Green deformation tensor are obtained by the solution of the eigenvalue problem,

(23)#\[\left( \boldsymbol{C} - \lambda^2_\alpha \boldsymbol{I} \right) \boldsymbol{N}_\alpha = \boldsymbol{0}\]

where the Cauchy-Green deformation tensors eliminate the rigid body rotations of the deformation gradient and serve as a quadratic change-of-length measure of the deformation.

(24)#\[ \begin{align}\begin{aligned}\boldsymbol{C} &= \boldsymbol{F}^T \boldsymbol{F}\\\boldsymbol{b} &= \boldsymbol{F} \boldsymbol{F}^T\end{aligned}\end{align} \]

The first partial derivative of the strain energy function w.r.t. a principal stretch

(25)#\[\psi_{,\alpha} = \frac{\partial \psi}{\partial \lambda_\alpha}\]

and the partial derivative of a principal stretch w.r.t. the right Cauchy-Green deformation tensor is defined

(26)#\[\frac{\partial \lambda_\alpha}{\partial \boldsymbol{C}} = \frac{\partial (\lambda^2_\alpha)^{1/2}}{\partial \boldsymbol{C}} = \frac{1}{2 \lambda_\alpha} \boldsymbol{M}_\alpha\]

with the eigenbase as the dyadic (outer vector) product of eigenvectors.

(27)#\[\boldsymbol{M}_\alpha = \boldsymbol{N}_\alpha \otimes \boldsymbol{N}_\alpha\]

The second Piola-Kirchhoff stress tensor is formulated by the application of the chain rule and a sum of all principal stretch contributions.

(28)#\[ \begin{align}\begin{aligned}\frac{\partial \psi}{\partial \boldsymbol{C}} &= \sum_\alpha \frac{\partial \psi}{\partial \lambda_\alpha} \frac{\partial \lambda_\alpha}{\partial \boldsymbol{C}}\\\boldsymbol{S} &= 2 \frac{\partial \psi}{\partial \boldsymbol{C}}\end{aligned}\end{align} \]

Furthermore, the second partial derivatives of the elasticity tensor are carried out.

(29)#\[ \begin{align}\begin{aligned}\frac{\partial^2 \psi}{\partial \boldsymbol{C}~\partial \boldsymbol{C}} &= \sum_\alpha \sum_\beta \frac{\partial^2 \psi} {\partial \lambda_\alpha~\partial \lambda_\beta} \frac{\partial \lambda_\alpha}{\partial \boldsymbol{C}} \otimes \frac{\partial \lambda_\beta}{\partial \boldsymbol{C}}\\ &+ \sum_\alpha \sum_{\beta \ne \alpha} \frac{ \frac{\partial \psi}{\partial \lambda^2_\alpha} - \frac{\partial \psi}{\partial \lambda^2_\beta} }{\lambda^2_\alpha - \lambda^2_\beta} \left( \boldsymbol{M}_\alpha \odot \boldsymbol{M}_\beta + \boldsymbol{M}_\beta \odot \boldsymbol{M}_\alpha \right)\end{aligned}\end{align} \]
(30)#\[\mathbb{C} = 4 \frac{\partial^2 \psi} {\partial \boldsymbol{C}~\partial \boldsymbol{C}}\]

In case of repeated equal principal stretches, the rule of d’Hospital is applied.

(31)#\[\lim_{\lambda^2_\beta \rightarrow \lambda^2_\alpha} \left( \frac{\frac{\partial \psi}{\partial \lambda^2_\alpha} - \frac{\partial \psi}{\partial \lambda^2_\beta} }{\lambda^2_\alpha - \lambda^2_\beta} \right) = \left( - \frac{\partial^2 \psi}{\partial \lambda^2_\alpha~\partial \lambda^2_\beta} + \frac{\partial^2 \psi}{\partial \lambda^2_\beta~\partial \lambda^2_\beta} \right)\]
gradient(C, statevars)[source]#

The gradient as the partial derivative of the strain energy function w.r.t. the right Cauchy-Green deformation tensor (one half of the second Piola Kirchhoff stress tensor).

hessian(C, statevars)[source]#

The hessian as the second partial derivatives of the strain energy function w.r.t. the right Cauchy-Green deformation tensor (a quarter of the Lagrangian fourth-order elasticity tensor associated to the second Piola-Kirchhoff stress tensor).