Linear Viscoelastic Orthotropic Power Law model

Theory

This is an orthotropic implementation of the isotropic model described in Linear Viscoelastic Power Law model.

Thus, the normalized initial elastic compliance tensor is replaced by an orthotropic one.

\[\DelNu = E_1\, \CelInv,\]

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"]
}

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"]
}

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.

virtual StateView getStateView(const std::string &stateName)

Access material state variables by name.

Parameters:

stateName[in] Name of the requested state variable.

Returns:

A view into the state variable array.

Private Members

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 Vector3d direction1

direction x1 w.r.t the global coordinate system

const Vector3d direction2

direction x2 w.r.t the global coordinate system

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.

Matrix6d CInv

Inverse of the initial elastic stiffness.

Matrix6d Cel

Initial elastic stiffness.

Matrix6d CelUnit

Normalized initial elastic stiffness.

It is normalized by the Young’s modulus in x1 direction E1

Matrix6d CelUnitInv

Inverse of the normalized initial elastic stiffness.

Matrix6d CelUnitGlobal

Initial elastic stiffness in the global coordinate system.

Matrix3d localCoordinateSystem

Local coordinate system of the material.

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"]
}

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"]
}

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 },} )