Compressible Finite-Strain Linear Viscoelasticity

A finite-strain viscoelastic material model based on a generalized Maxwell model. The instantaneous hyperelastic response is provided by a selectable compressible hyperelastic base potential, and the viscous contribution is formulated in terms of the second Piola–Kirchhoff stress.

Material parameters

The material parameters are provided as a flat vector with the following layout:

Index

Model Parameter

Description

0

hyperelasticBase

Hyperelastic base model selector: 0 = NeoHooke, 1 = Yeoh, 2 = MooneyRivlin, 3 = PenceGouNeoHooke (variant B)

1

onlyShearCreep

Flag: 1 restricts viscoelastic creep to the deviatoric (shear) part only, 0 applies creep to the full stress

2 … 2+ne−1

elastic properties

Elastic properties of the selected hyperelastic base model (see below)

2+ne

nM

Number of Maxwell elements

2+ne+1 … 2+ne+2nM

\(\gamma_i,\,\tau_i\)

Pairs of relative stiffness weight \(\gamma_i\) and relaxation time \(\tau_i\) for each Maxwell element (\(i=1,\ldots,n_M\))

2+ne+1+2nM (optional)

\(\rho\)

Density

Elastic properties by base model

Base model

selector value

ne

Properties (in order)

NeoHooke

0

2

\(K\) (bulk modulus), \(G\) (shear modulus)

Yeoh

1

4

\(C_{10}\), \(C_{20}\), \(C_{30}\), \(K\)

MooneyRivlin

2

3

\(C_{10}\), \(C_{01}\), \(K\)

PenceGouNeoHooke

3

2

\(K\) (bulk modulus), \(G\) (shear modulus)

State Variable

Description

S0_old (9 components)

Second Piola–Kirchhoff stress from the previous increment

creepStateVars (9 × nM components)

Creep state tensors for each Maxwell element

Theory

The model is a finite-strain generalization of the linear viscoelastic model described, e.g., in Liu et al. (2021). A generalized Maxwell model is employed in which the long-term elastic part is provided by the chosen hyperelastic base potential.

The total second Piola–Kirchhoff stress reads

\[\boldsymbol{S} = \boldsymbol{S}_{\infty} + \sum_{i=1}^{n_M} \boldsymbol{h}_i,\]

where \(\boldsymbol{S}_{\infty}\) is the long-term (hyperelastic) stress and \(\boldsymbol{h}_i\) are the non-equilibrium (viscous) overstresses of each Maxwell element.

The evolution of each overstress is governed by

\[\dot{\boldsymbol{h}}_i + \frac{\boldsymbol{h}_i}{\tau_i} = \gamma_i\,\mathbb{C}_0^{-1} : \dot{\boldsymbol{S}}_0,\]

where \(\tau_i\) is the relaxation time, \(\gamma_i\) the relative stiffness weight, \(\mathbb{C}_0\) the instantaneous (reference) stiffness tensor, and \(\boldsymbol{S}_0\) the instantaneous stress.

The algorithmic update uses a mid-point rule (see Liu et al. 2021):

\[\boldsymbol{h}_i^{n+1} = e^{-\Delta t/\tau_i}\,\boldsymbol{h}_i^n + \gamma_i\,\mathbb{C}_0^{-1} : \frac{1 - e^{-\Delta t/\tau_i}}{\Delta t/\tau_i}\,\Delta\boldsymbol{S}_0.\]

Primary reference: Liu et al. 2021, A continuum and computational framework for viscoelastodynamics: I. Finite deformation linear models, Comput. Meth. Appl. Mech. Engrg. 385, 114059.

Implementation

class CompressibleFiniteStrainLinearViscoelasticity : public MarmotMaterialFiniteStrain

Inheritance diagram for Marmot::Materials::CompressibleFiniteStrainLinearViscoelasticity:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="Marmot::Materials::CompressibleFiniteStrainLinearViscoelasticity" tooltip="Marmot::Materials::CompressibleFiniteStrainLinearViscoelasticity" fillcolor="#BFBFBF"]
    "2" [label="MarmotMaterialFiniteStrain" tooltip="MarmotMaterialFiniteStrain"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Collaboration diagram for Marmot::Materials::CompressibleFiniteStrainLinearViscoelasticity:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "4" [label="Marmot::ContinuumMechanics::FiniteStrain::Viscoelasticity::MaxwellProperties" tooltip="Marmot::ContinuumMechanics::FiniteStrain::Viscoelasticity::MaxwellProperties"]
    "1" [label="Marmot::Materials::CompressibleFiniteStrainLinearViscoelasticity" tooltip="Marmot::Materials::CompressibleFiniteStrainLinearViscoelasticity" fillcolor="#BFBFBF"]
    "2" [label="MarmotMaterialFiniteStrain" tooltip="MarmotMaterialFiniteStrain"]
    "3" [label="MarmotStateLayoutDynamic" tooltip="MarmotStateLayoutDynamic"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
    "1" -> "4" [dir=forward tooltip="usage"]
    "2" -> "3" [dir=forward tooltip="usage"]
}

Finite-strain compressible hyper-viscoelastic material model.

The model combines a selectable hyperelastic base potential with a generalized Maxwell viscoelastic evolution in the second Piola-Kirchhoff stress space.

Material parameters

  • baseModel - hyperelastic base identifier (NeoHooke, Yeoh, MooneyRivlin, PenceGouNeoHooke)

  • onlyShearCreep - flag to restrict viscoelastic evolution to the deviatoric part

  • elasticProperties - coefficients required by the selected base model

  • n_Maxwell - number of Maxwell elements

  • tau[i], beta[i] (i = 1..n_Maxwell) - Maxwell retardation times and relative weights

  • rho - density (optional; read from the last material property entry)

State variables

  • S0_old - previous step stress-like internal variable used in viscoelastic update

  • creepStateVars - internal variables for the generalized Maxwell chain

Public Functions

CompressibleFiniteStrainLinearViscoelasticity(const double *materialProperties, int nMaterialProperties, int materialLabel)

Construct a CompressibleFiniteStrainLinearViscoelasticity material.

Parameters:
  • materialProperties – Pointer to the material properties vector.

  • 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 time.

    • dT - time increment.

virtual double getDensity(const double *stateVars) const override

Get the material density.

Parameters:

stateVars[in] Pointer to state variables (unused).

Returns:

Density from the last entry in materialProperties.

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.

Protected Types

enum HyperelasticBase

Hyperelastic base model type.

Values:

enumerator NeoHooke
enumerator Yeoh
enumerator MooneyRivlin
enumerator PenceGouNeoHooke

Protected Functions

inline void initializeStateLayout()

Define the layout of persistent state variables.

std::tuple<double, FastorStandardTensors::Tensor33d, FastorStandardTensors::Tensor3333d, FastorStandardTensors::Tensor333333d> computeEnergyDensityAndDerivatives(const FastorStandardTensors::Tensor33d &C) const

Compute strain energy density and derivatives with respect to \(\mathbf{C}\).

Parameters:

C[in] Right Cauchy-Green deformation tensor.

Returns:

Tuple containing energy density and first, second and third derivatives.

Protected Attributes

const std::map<HyperelasticBase, int> nElasticPropertiesMap = {{NeoHooke, 2}, {Yeoh, 4}, {MooneyRivlin, 3}, {PenceGouNeoHooke, 2},}

Mapping from hyperelastic base model to required number of elastic properties.

const HyperelasticBase hyperelasticBase

Selected hyperelastic base model.

const double onlyShearCreep

Flag indicating whether viscoelasticity acts on deviatoric stresses only.

const Eigen::Map<const Eigen::VectorXd> elasticProperties

Elastic coefficients of the selected hyperelastic base model.

const ContinuumMechanics::FiniteStrain::Viscoelasticity::MaxwellProperties maxwellProperties

Generalized Maxwell model parameters.

FastorStandardTensors::Tensor3333d initialCompliance

Initial compliance tensor used for viscoelastic stress update.