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 defnition 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"]
"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-93a8b7d198bb16c8ede391afda84489cde607e4f.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"]
"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-93a8b7d198bb16c8ede391afda84489cde607e4f.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(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
-
virtual int getNumberOfRequiredStateVars()
- Returns:
Number of state variables required by the material.
-
virtual void assignStateVars(double *stateVars_, int nStateVars)
Assign state variable array to material.
- Parameters:
stateVars – [inout] Pointer to state variable array.
nStateVars – [in] Number of state variables.
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
-
std::unique_ptr<LinearViscoelasticOrthotropicPowerLawStateVarManager> stateVarManager
-
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.
-
class LinearViscoelasticOrthotropicPowerLawStateVarManager : public MarmotStateVarVectorManager
Inheritance diagram for Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw::LinearViscoelasticOrthotropicPowerLawStateVarManager:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"1" [label="Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw::LinearViscoelasticOrthotropicPowerLawStateVarManager" tooltip="Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw::LinearViscoelasticOrthotropicPowerLawStateVarManager" fillcolor="#BFBFBF"]
"2" [label="MarmotStateVarVectorManager" tooltip="MarmotStateVarVectorManager"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
}](../../_images/graphviz-85c755373988c22b859fbb404535b6900474fdc7.png)
Collaboration diagram for Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw::LinearViscoelasticOrthotropicPowerLawStateVarManager:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"1" [label="Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw::LinearViscoelasticOrthotropicPowerLawStateVarManager" tooltip="Marmot::Materials::LinearViscoelasticOrthotropicPowerLaw::LinearViscoelasticOrthotropicPowerLawStateVarManager" fillcolor="#BFBFBF"]
"2" [label="MarmotStateVarVectorManager" tooltip="MarmotStateVarVectorManager"]
"3" [label="MarmotStateVarVectorManager::StateVarVectorLayout" tooltip="MarmotStateVarVectorManager::StateVarVectorLayout"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [dir=forward tooltip="usage"]
}](../../_images/graphviz-cb083d76b6809c7c916203f786be4878eae2ac69.png)
Public Functions
-
inline LinearViscoelasticOrthotropicPowerLawStateVarManager(double *theStateVarVector, int nKelvinUnits)
Public Members
-
KelvinChain::mapStateVarMatrix kelvinStateVars
Public Static Attributes
-
static const auto layout =
makeLayout( {{ .name = "kelvinStateVars", .length = 0 },} )
-
inline LinearViscoelasticOrthotropicPowerLawStateVarManager(double *theStateVarVector, int nKelvinUnits)
-
LinearViscoelasticOrthotropicPowerLaw(const double *materialProperties, int nMaterialProperties, int materialLabel)