Source code for pulse.invariants
r"""This module defines invariants of the deformation gradient.
The deformation gradient :math:`\mathbf{F}` is a tensor field that describes the
deformation of a material. The invariants of the deformation gradient are scalar
quantities that are invariant under rigid body motion.
The invariants are defined as follows:
- First principal invariant
:math:`I_1 = \text{tr}(\mathbf{C})`
- Second principal invariant
:math:`I_2 = \left( I_1^2 - \text{tr}(\mathbf{C}\cdot\mathbf{C})\right)`
- Third principal invariant
:math:`I_3 = \text{det}(\mathbf{C})`
- Fourth quasi invariant
:math:`I_{4\mathbf{a_0}} = \mathbf{C}\mathbf{a}_0 \cdot \mathbf{a}_0`
- Fifth quasi invariant
:math:`I_{5\mathbf{a_0}} = \mathbf{C}\mathbf{a}_0 \cdot \mathbf{C}\mathbf{a}_0`
- Eight quasi invariant
:math:`I_{8\mathbf{a_0}\mathbf{b_0}} = \mathbf{F}\mathbf{a}_0 \cdot \mathbf{F}\mathbf{b}_0`
where :math:`\mathbf{C} = \mathbf{F}^T\mathbf{F}` is the right Cauchy-Green tensor.
"""
import ufl
from ._types import FuncConst
[docs]
def I1(C: ufl.core.expr.Expr) -> ufl.core.expr.Expr:
r"""First principal invariant
.. math::
I_1 = \mathrm{tr}(\mathbf{C})
Parameters
----------
C : ufl.core.expr.Expr
The deformation gradient
Returns
-------
ufl.core.expr.Expr
First principal invariant
"""
I1 = ufl.tr(C)
return I1
[docs]
def I2(C: ufl.core.expr.Expr) -> ufl.core.expr.Expr:
r"""Second principal invariant
.. math::
I_2 = \left( I_1^2 - \mathrm{tr}(\mathbf{C}\cdot\mathbf{C})\right)
Parameters
----------
F : ufl.core.expr.Expr
The deformation gradient
Returns
-------
ufl.core.expr.Expr
Second principal invariant
"""
return 0.5 * (I1(C) * I1(C) - ufl.tr(C * C))
[docs]
def I3(C: ufl.core.expr.Expr) -> ufl.core.expr.Expr:
r"""Third principal invariant
.. math::
I_3 = \mathrm{det}(\mathbf{C})
Parameters
----------
C : ufl.core.expr.Expr
The deformation gradient
Returns
-------
ufl.core.expr.Expr
Third principal invariant
"""
return ufl.det(C)
[docs]
def I4(C: ufl.core.expr.Expr, a0: FuncConst) -> ufl.core.expr.Expr:
r"""Fourth quasi invariant
.. math::
I_{4\mathbf{a_0}} = \mathbf{C}\mathbf{a}_0 \cdot \mathbf{a}_0
Parameters
----------
C : ufl.core.expr.Expr
The deformation gradient
a0 : FuncConst
Some direction
Returns
-------
ufl.core.expr.Expr
Fourth quasi invariant in the direction a0
"""
return ufl.inner(C * a0, a0)
[docs]
def I5(C: ufl.core.expr.Expr, a0: FuncConst) -> ufl.core.expr.Expr:
r"""Fifth quasi invariant
.. math::
I_{5\mathbf{a_0}} = \mathbf{C}\mathbf{a}_0 \cdot \mathbf{C}\mathbf{a}_0
Parameters
----------
C : ufl.core.expr.Expr
The deformation gradient
a0 : FuncConst
Some direction
Returns
-------
ufl.core.expr.Expr
Fifth quasi invariant in the direction a0
"""
return ufl.inner(C * a0, C * a0)
[docs]
def I8(C: ufl.core.expr.Expr, a0: FuncConst, b0: FuncConst) -> ufl.core.expr.Expr:
r"""Eight quasi invariant
.. math::
I_{8\mathbf{a_0}\mathbf{b_0}}
= \mathbf{F}\mathbf{a}_0 \cdot \mathbf{F}\mathbf{b}_0
Parameters
----------
C : ufl.core.expr.Expr
The deformation gradient
a0 : FuncConst
Some direction
b0 : FuncConst
Another direction
Returns
-------
ufl.core.expr.Expr
Eight quasi invariant in the direction a0
"""
return ufl.inner(C * a0, b0)