Linear Elastic model
Theory
The constitutive law is given in total form as
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
with
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
with
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
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"]
}](../../_images/graphviz-aeeb3c9599a3763fabde736471d6017f88caf520.png)
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"]
}](../../_images/graphviz-aeeb3c9599a3763fabde736471d6017f88caf520.png)
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).
-
enumerator Isotropic
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.
-
LinearElastic(const double *materialProperties, int nMaterialProperties, int materialNumber)