Linear Elastic model

Theory

The constitutive law is given in total form as

\[\sig = \Cel : \eps\]

relating the nominal stress tensor \(\sig\) to the linearized strain tensor \(\eps\) with the fourth order stiffness tensor \(\Cel\). For the given definitions it is important to note, that the Voigt notation is used. The stiffness tensor can be specified for isotropic, transversely isotropic or orthotropic material behavior as follows:

Isotropic Behavior

Number of independent material parameters: 2

\[\begin{split}\Cel^{-1} = \begin{bmatrix} \frac{1}{E} & \frac{-\nu}{E} & \frac{-\nu}{E} & 0 & 0 & 0 \\ \frac{-\nu}{E} & \frac{1}{E} & \frac{-\nu}{E} & 0 & 0 & 0 \\ \frac{-\nu}{E} & \frac{-\nu}{E} & \frac{1}{E} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{1}{G} & 0 & 0 \\ 0 & 0 & 0 & 0 & \frac{1}{G} & 0 \\ 0 & 0 & 0 & 0 & 0 & \frac{1}{G} \end{bmatrix}\end{split}\]

with

\[\displaystyle G = \frac{E}{2\,(1 + \nu)}\]

Transversely Isotropic Behavior

In case of transversely isotropic behavior, the user defined normal vector specifies the \(x_1\) - axis of a local coordinate system, representing the principal material directions in which the material stiffness tensor is formulated. The isotropic plane is implementend with respect to the local \(x_2\) and \(x_3\) axes. The two required vectors must be orthogonal to each other.

Number of independent material parameters: 5

\[\begin{split}\Cel^{-1} = \begin{bmatrix} \frac{1}{E_1} & \frac{-\nu_{12}}{E_2} & \frac{-\nu_{12}}{E_2} & 0 & 0 & 0 \\ \frac{-\nu_{12}}{E_2} & \frac{1}{E_2} & \frac{-\nu_{23}}{E_2} & 0 & 0 & 0 \\ \frac{-\nu_{12}}{E_2} & \frac{-\nu_{12}}{E_2} & \frac{1}{E_2} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{1}{G_{12}} & 0 & 0 \\ 0 & 0 & 0 & 0 & \frac{1}{G_{12}} & 0 \\ 0 & 0 & 0 & 0 & 0 & \frac{1}{G_{23}} \end{bmatrix}\end{split}\]

with

\[G_{23} = \frac{E_2}{2\,(1 + \nu_{23})}\]

Orthotropic Behavior

In case of orthotropic behavior, the user defined normal vector defines the \(x_1\) - axis of a local coordinate system, representing the principal material directions in which the material stiffness tensor is formulated. The two required vectors must be orthogonal to each other.

Number of independent material parameters: 9

\[\begin{split}\mathbb{ C }^{-1} = \begin{bmatrix} \frac{1}{E_1} & \frac{-\nu_{12}}{E_2} & \frac{-\nu_{13}}{E_3} & 0 & 0 & 0 \\ \frac{-\nu_{12}}{E_2} & \frac{1}{E_2} & \frac{-\nu_{23}}{E_3} & 0 & 0 & 0 \\ \frac{-\nu_{13}}{E_3} & \frac{-\nu_{23}}{E_3} & \frac{1}{E_3} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{1}{G_{12}} & 0 & 0 \\ 0 & 0 & 0 & 0 & \frac{1}{G_{13}} & 0 \\ 0 & 0 & 0 & 0 & 0 & \frac{1}{G_{23}} \end{bmatrix}\end{split}\]

Implementation

class LinearElastic : public MarmotMaterialHypoElastic

Inheritance diagram for Marmot::Materials::LinearElastic:

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

Collaboration diagram for Marmot::Materials::LinearElastic:

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

Implementation of a linear elastic material for 3D stress states.

For further information see linearelastic.

Public Functions

LinearElastic(const double *materialProperties, int nMaterialProperties, int materialNumber)

Protected Types

enum class Type

Type of isotropic and anisotropic behavior.

Type is an enum class which involves the following case:

Values:

enumerator Isotropic

Number of materialProperties equals 2.

enumerator TransverseIsotropic

Number of materialProperties equals 11. 5 parameters describe the material behavior and 6 parameters correspond to two normal vectors. The first vector gives the anisotropic direction (direction \(x_1\)). The second vector (direction \(x_2\)) is the first of the two needed vectors for the isotropic plane (directions \(x_2\) and \(x_3\)). The \(x_3\) axis is obtained as the normalized cross product of the two vectors.

enumerator Orthotropic

Number of materialProperties equals 15. 9 parameters describe the material behaviour and 6 parameters are the components of two vectors that define the principal material directions. The two vectors correspond to the directions \(x_1\) and \(x_2\). The third principal axis \(x_3\) is the unit normal to the plane spanned by those vectors (e.g. the normalized cross product).

Protected Functions

virtual void computeStress(double *stress, double *dStressDDStrain, const double *dStrain, const double *timeOld, const double dT, double &pNewDT)

For a given linearized strain increment \(\Delta\boldsymbol{\varepsilon}\) at the old and the current time, compute the Cauchy stress and the algorithmic tangent \(\frac{\partial\boldsymbol{\sigma}^{(n+1)}}{\partial\boldsymbol{\varepsilon}^{(n+1)}}\).

Parameters:
  • stress[inout] Cauchy stress

  • dStressDDstrain[inout] Algorithmic tangent representing the derivative of the Cauchy stress tensor with respect to the linearized strain

  • dStrain[in] linearized strain increment

  • timeOld[in] Old (pseudo-)time

  • dt[in] (Pseudo-)time increment from the old (pseudo-)time to the current (pseudo-)time

  • pNewDT[inout] Suggestion for a new time increment

inline virtual StateView getStateView(const std::string &result)

Access material state variables by name.

Parameters:

stateName[in] Name of the requested state variable.

Returns:

A view into the state variable array.

inline virtual int getNumberOfRequiredStateVars()
Returns:

Number of state variables required by the material.

virtual double getDensity()

Get material density.

Returns:

Density value (default: 0 if not overridden).

Protected Attributes

enum Marmot::Materials::LinearElastic::Type anisotropicType

anisotropicType represents the directional dependence of the material behavior. It is a representative of the enum class Type.

const double &E1

Young’s modulus in \(x_1\)-direction.

\(E_1\) represents the Young’s modulus effective in the direction of the \(x_1\)-axis of the user-defined local coordinate system. It is a reference variable to materialProperties[0].

const double &E2

Young’s modulus in \(x_2\)-direction.

\(E_2\) represents the Young’s modulus effective in the direction of the \(x_2\)-axis of the user-defined local coordinate system. In case of isotropic behavior it is set to \(E_1\) and does not need to be specified. Otherwise it is a reference variable to materialProperties[1].

const double &E3

Young’s modulus in \(x_3\)-direction.

\(E_3\) represents the Young’s modulus effective in the direction of the \(x_3\)-axis of the user-defined local coordinate system.

  • For orthotropic behavior it must be specified and is a reference variable to materialProperties[2].

  • For transverse-isotropic or isotropic behavior it is automatically set to \(E_2\) and does not need to be specified.

const double &nu12

Poisson’s ratio between axes \(x_1\) and \(x_2\).

\(\nu_{12}\) represents the Poisson’s ratio describing the strain in direction \(x_1\) caused by a load in direction \(x_2\) of the user-defined local coordinate system. Depending on the anisotropic type it is a reference variable to:

  • Isotropic: materialProperties[1]

  • TransverseIsotropic: materialProperties[2]

  • Orthotropic: materialProperties[3]

const double &nu23

Poisson’s ratio between axes \(x_2\) and \(x_3\).

\(\nu_{23}\) represents the Poisson’s ratio describing the strain in direction \(x_2\) caused by a load in direction \(x_3\) of the user-defined local coordinate system. Depending on the anisotropic type it is a reference variable to:

  • TransverseIsotropic: materialProperties[3]

  • Orthotropic: materialProperties[4] For isotropic behaviour it is set to nu12 and does not need to be specified.

const double &nu13

Poisson’s ratio between axes \(x_1\) and \(x_3\).

\(\nu_{13}\) represents the Poisson’s ratio describing the strain in direction \(x_1\) caused by a load in direction \(x_3\) of the user-defined local coordinate system.

  • For orthotropic behaviour it must be specified (materialProperties[5]).

  • For transverse-isotropic and isotropic behaviour it is set to nu23 and does not need to be specified.

const double G12

Shear modulus between axes \(x_1\) and \(x_2\).

\(G_{12}\) represents the shear modulus effective between the \(x_1\)- and \(x_2\)-axes of the user-defined local coordinate system. In case of isotropic behavior it does not need to be specified and is set to \(\tfrac{E_1}{2 \cdot (1 + \nu_{12})}\). Otherwise, depending on the anisotropic type it is a reference variable to:

  • TransverseIsotropic: materialProperties[4]

  • Orthotropic: materialProperties[6]

const double G23

Shear modulus between axes \(x_2\) and \(x_3\).

\(G_{23}\) represents the shear modulus effective between the \(x_2\)- and \(x_3\)-axes of the user-defined local coordinate system. For isotropic behavior it is set to G12. For transverse-isotropic behavior it is set to \(\tfrac{E_2}{2 \cdot (1 + \nu_{23})}\). For orthotropic behavior it is a reference variable to materialProperties[7].

const double &G13

Shear modulus between axes \(x_1\) and \(x_3\).

\(G_{13}\) represents the shear modulus effective between the \(x_1\)- and \(x_3\)-axes of the user-defined local coordinate system.

  • For isotropic and transverse-isotropic behavior it is set to G12.

  • For orthotropic behavior it is a reference variable to materialProperties[8].

Matrix6d globalStiffnessTensor

Material stiffness tensor.

globalStiffnessTensor represents the materials stiffness tensor in voigt notation in the global coordinate system. It is calculated by the functions implemented in MarmotElasticity.h.