Compressible Neo Hooke model
Theory
Hyperelastic materials are a class of constitutive models used to describe the elastic behavior of solids. They postulate a strain-energy density function \(\Psi\) from which stresses are obtained by differentiation with respect to appropriate strain measures. In finite strains we take \(\Psi=\Psi(\boldsymbol C)\), where the deformation gradient is \(\boldsymbol F\), the right Cauchy–Green tensor is \(\boldsymbol C=\boldsymbol F^{\mathsf T}\boldsymbol F\), and the Jacobian is \(J=\det\boldsymbol F\). The first invariant is \(I_1=\operatorname{tr}\boldsymbol C\).
The model implemented here is a compressible Neo-Hookean material with the Pence–Gou potential (variant B). An isochoric–volumetric split is defined by
where \(G\) is the shear modulus and \(K\) is the bulk modulus.
The second Piola-Kirchhoff stress tensor follows from the potential as
The Kirchhoff and Cauchy stress tensors are obtained by push-forward operations:
Using the chain rule, the first derivative of \(\Psi\) with respect to \(\boldsymbol C\) is
The resulting second Piola–Kirchhoff stress used in the implementation is
where \(I_1 = \operatorname{tr}\boldsymbol C\).
The resulting Kirchhoff stress, after the push-forward operation \(\boldsymbol{\tau} = \boldsymbol F\,\boldsymbol S\,\boldsymbol F^{\mathsf T}\), is:
where \(\boldsymbol{b} = \boldsymbol F\,\boldsymbol F^{\mathsf T}\) is the left Cauchy-Green tensor.
The consistent tangent with respect to the deformation gradient \(\frac{\partial\boldsymbol{\tau}(\boldsymbol{S}(\boldsymbol{C}(\boldsymbol{F})), \boldsymbol{F})}{\partial\boldsymbol{F}}\) is computed via the chain rule as:
The individual derivatives are:
For infinitesimal strains, this model reduces to linear isotropic elasticity.
Implementation
-
class CompressibleNeoHooke : public MarmotMaterialFiniteStrain
Inheritance diagram for Marmot::Materials::CompressibleNeoHooke:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"1" [label="Marmot::Materials::CompressibleNeoHooke" tooltip="Marmot::Materials::CompressibleNeoHooke" fillcolor="#BFBFBF"]
"2" [label="MarmotMaterialFiniteStrain" tooltip="MarmotMaterialFiniteStrain"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
}](../../_images/graphviz-1be6baf3cbdd8cc285c20d52bc352e262d622968.png)
Collaboration diagram for Marmot::Materials::CompressibleNeoHooke:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"1" [label="Marmot::Materials::CompressibleNeoHooke" tooltip="Marmot::Materials::CompressibleNeoHooke" fillcolor="#BFBFBF"]
"2" [label="MarmotMaterialFiniteStrain" tooltip="MarmotMaterialFiniteStrain"]
"3" [label="MarmotStateLayoutDynamic" tooltip="MarmotStateLayoutDynamic"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [dir=forward tooltip="usage"]
}](../../_images/graphviz-d236c648c6d5999fcb47a2fde47d80cf73fca722.png)
Compressible Neo-Hookean hyperelastic material model (Pence–Gou potential, variant B).
- Material parameters
K - bulk modulus
G - shear modulus
- State variables
No state variables required.
Public Functions
-
CompressibleNeoHooke(const double *materialProperties, int nMaterialProperties, int materialLabel)
Construct a CompressibleNeoHooke material.
- Parameters:
materialProperties – Expects
Kat index 0 andGat index 1.nMaterialProperties – Length of
materialProperties.materialLabel – Material label.
-
virtual void computeStress(ConstitutiveResponse<3>&, AlgorithmicModuli<3>&, const Deformation<3>&, const TimeIncrement&) const override
Compute the Kirchhoff stress and the algorithmic tangent for the current step.
Template parameter
<3>indicates 3D.- Parameters:
response – [inout]
tau- Kirchhoff stress tensor \(\boldsymbol{\tau}\).elasticEnergyDensity- elastic energy density \(\psi\).rho- density (unused here).
tangents – [inout]
dTau_dF- algorithmic tangent \(\partial\boldsymbol{\tau}/\partial\boldsymbol{F}\).
deformation – [in]
F- deformation gradient \(\boldsymbol{F}\).
timeIncrement – [in]
t- old (pseudo-)time.dT- (pseudo-)time increment.
-
inline virtual double getDensity(const double *stateVars) const override
Get material density.
- Returns:
Density value.
-
inline MarmotMaterialFiniteStrain(const double *matProperties_, int nMaterialProperties_, int materialNumber_)
Construct a MarmotMaterialFiniteStrain.
- Parameters:
matProperties_ – [in] Pointer to the array of material property values.
nMaterialProperties_ – [in] Number of material property values.
materialNumber_ – [in] Unique identifier for this material instance.