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"]
"3" [label="MarmotMaterial" tooltip="MarmotMaterial"]
"2" [label="MarmotMaterialFiniteStrain" tooltip="MarmotMaterialFiniteStrain"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
}](../../_images/graphviz-3e3151b64ba518d7e60265826c49d18a038ed7f0.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"]
"3" [label="MarmotMaterial" tooltip="MarmotMaterial"]
"2" [label="MarmotMaterialFiniteStrain" tooltip="MarmotMaterialFiniteStrain"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
}](../../_images/graphviz-3e3151b64ba518d7e60265826c49d18a038ed7f0.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&)
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 int getNumberOfRequiredStateVars()
Number of required state variables.
- Returns:
Always 0 for this model.
-
inline virtual void assignStateVars(double *stateVars, int nStateVars)
Bind external state storage (unused for this model; required for the interface).
- Parameters:
stateVars – Pointer to a contiguous array provided by the caller for internal state.
nStateVars – Number of entries in that array.
Public Static Attributes
-
static int nStateVarsRequired = 0
Number of required state variables (none here).