Linear Viscoelastic Orthotropic Power Law model
Theory
This is an orthotropic implementation of the isotropic model described in Linear Viscoelastic Power Law model. By contrast to the isotropic model, an additional scaling factor is used for scaling the stiffness tensor. This is helpful because the experimentally determined Young’s moduli and shear moduli are in general not equal to the initial elastic moduli of the viscoelastic model. By using this scaling factor, the experimentally determined Young’s moduli and shear moduli can be used as input parameters for the viscoelastic model and the initial elastic moduli are automatically adjusted. In the following, the scaling factor is denoted as \(s\) which is usually larger than one.
For the formulation of the viscoelastic model in Linear Viscoelastic Power Law model, the initial elastic stiffness tensor \(\Cel\) is replaced by
where the Young’s moduli \(E_1\), \(E_2\), and \(E_3\) and the shear moduli \(G_{12}\), \(G_{23}\), and \(G_{31}\) are given in the material directions \(x_1\), \(x_2\), and \(x_3\). Additionally, the Poisson’s ratios \(\nu_{12}\), \(\nu_{23}\), and \(\nu_{31}\) are used.
Note
The scaling factor \(s\) is applied to all initial elastic moduli. This means that the ratios between the Young’s moduli and shear moduli remain unchanged. Only the absolute values of the initial elastic moduli are scaled.
Warning
The definition of Poisson’s ratio in Marmot differs from the standard definition.
In Marmot, Poisson’s ratio \(\nu_{ij}\) is defined as the ratio of the lateral strain in direction \(x_j\)
to the axial strain in direction \(x_i\) when a uniaxial stress is applied in direction \(x_i\).
See namespace Marmot::ContinuumMechanics::Elasticity for more details.
Accordingly, the normalized initial elastic compliance tensor now reads
with the Young’s modulus \(E_1\) as the Young’s modulus in the \(x_1\) material direction. Constant Poisson’s ratios are assumed in all material directions.
Implementation
-
class LinearViscoelasticOrthotropicPowerLaw : public MarmotMaterialHypoElastic
Inheritance diagram for Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"1" [label="Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw" tooltip="Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw" fillcolor="#BFBFBF"]
"2" [label="MarmotMaterialHypoElastic" tooltip="MarmotMaterialHypoElastic"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
}](../../_images/graphviz-4d726ba83a07e1dacdde80b3fcc92547f9665ba9.png)
Collaboration diagram for Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"1" [label="Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw" tooltip="Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw" fillcolor="#BFBFBF"]
"2" [label="MarmotMaterialHypoElastic" tooltip="MarmotMaterialHypoElastic"]
"3" [label="MarmotStateLayoutDynamic" tooltip="MarmotStateLayoutDynamic"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [dir=forward tooltip="usage"]
}](../../_images/graphviz-bfaf6852a18fccf0bd8c61bfe03f491d081b480f.png)
Implementation of an orthotropic linear viscoelastic material model following a Power Law compliance function and assuming constant Poisson’s ratios generalized for 3D stress states.
Public Functions
-
LinearViscoelasticOrthotropicPowerLaw(const double *materialProperties, int nMaterialProperties, int materialLabel)
-
virtual void computeStress(state3D &state, Marmot::Matrix6d &dStressDDStrain, const Marmot::Vector6d &dStrain, const timeInfo &timeInfo) const override
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:
state – [inout] A state3D instance carrying stress, strain energy, and state variables
dStress_dStrain – [inout] Algorithmic tangent representing the derivative of the Cauchy stress tensor with respect to the linearized strain
dStrain – [in] linearized strain increment
timeInfo – Structure carrying the current (pseudo-)time and the (pseudo-)time increment
-
virtual double getDensity(const double *stateVars) const override
Get the mass density of the material.
- Parameters:
stateVars – Pointer to the state variable array
- Returns:
Mass density of the material
-
inline MarmotMaterialHypoElastic(const double *matProperties_, int nMaterialProperties_, int materialNumber_)
Constructs the material with a given set of material properties and an identifier.
- Parameters:
matProperties_ – [in] Pointer to the array of material properties.
nMaterialProperties_ – [in] Number of entries in
matProperties_.materialNumber_ – [in] Integer identifying this material instance.
Private Members
-
const double &stiffnessScaleFactor
Factor to scale elastic stiffness.
-
const double &E1
Young’s modulus in x1 direction.
-
const double &E2
Young’s modulus in x2 direction.
-
const double &E3
Young’s modulus in x3 direction.
-
const double &nu12
Poisson’s ratio.
-
const double &nu23
Poisson’s ratio.
-
const double &nu13
Poisson’s ratio.
-
const double &G12
Shear modulus in x1-x2 plane.
-
const double &G23
Shear modulus in x2-x3 plane.
-
const double &G13
Shear modulus in x1-x3 plane.
-
const double &m
power law compliance parameter
-
const double &n
power law exponent
-
const int powerLawApproximationOrder
approximation order for the retardation spectrum (must be 2, 3, 4, or 7)
-
const size_t nKelvin
number of Kelvin units to approximate the viscoelastic compliance
-
const double &minTau
minimal retardation time used in the viscoelastic Kelvin chain
-
const double &spacing
log spacing between the retardation times of the Kelvin Chain
-
const double &timeToDays
ratio of simulation time to days
-
const std::map<std::string, std::pair<int, int>> stateVarInfo = {{"kelvinStateVars", std::make_pair(0, 6 * nKelvin)},}
-
KelvinChain::Properties elasticModuli
Elastic moduli of the Kelvin chain units.
-
KelvinChain::Properties retardationTimes
Retardation times of the Kelvin chain units.
-
double zerothKelvinChainCompliance
Zeroth Kelvin chain compliance.
-
LinearViscoelasticOrthotropicPowerLaw(const double *materialProperties, int nMaterialProperties, int materialLabel)