Von Mises model (Automatic Differentiation)

An automatic differentiation implementation of classical J2 plasticity with isotropic hardening.

Index

Model Parameter

Description

0

\(E\)

Young’s modulus

1

\(\nu\)

Poisson’s ratio

2

\(f_\mathrm{y}^{0}\)

Initial yield stress

3

\(H_\mathrm{iso,lin}\)

First hardening parameter [1]

4

\(\Delta f_\mathrm{y}^{0,\infty}\)

Second hardening parameter [1]

5

\(\delta\)

Third hardening parameter [1]

State Variable

Name

Description

\(\kappa\)

kappa

Hardening variable [1]

Theory

See Von Mises model.

Implementation

Implementation follows the Von Mises model, however, automatic differentiation is used to compute the consistent algorithmic tangent operator.

class ADVonMises : public MarmotMaterialHypoElasticAD

Inheritance diagram for Marmot::Materials::ADVonMises:

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

Collaboration diagram for Marmot::Materials::ADVonMises:

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

Implementation of a isotropic J2-plasticity material for 3D stress states using automatic differentiation.

Public Functions

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

Public Members

const double &E

Young’s modulus.

const double &nu

Poisson’s ratio.

const double &yieldStress

Initial yield stress.

const double &HLin

First hardening parameter.

const double &deltaYieldStress

Second hardening parameter.

const double &delta

Third hardening parameter.

const double G

Shear modulus.

Protected Functions

virtual void computeStressAD(autodiff::dual *stress, const autodiff::dual *dStrain, const double *timeOld, const double dT, double &pNewDT) override

Compute the Cauchy stress tensor \(\boldsymbol{\sigma}\) given an increment of the linearized strain tensor \(\Delta\boldsymbol{\varepsilon}\).

Dual numbers are used for both the Cauchy stress tensor and the linearized strain increment, such that the algorithmic tangent operator \(\frac{\partial\boldsymbol{\sigma}^{(n+1)}}{\partial\boldsymbol{\varepsilon}^{(n+1)}}\) can be obtained by means of automatic differentiation.

Parameters:
  • stress[inout] Cauchy stress tensor

  • 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 int getNumberOfRequiredStateVars() override
Returns:

Number of state variables required by the material.

virtual void assignStateVars(double *stateVars, int nStateVars) override

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 &result) override

Access material state variables by name.

Parameters:

stateName[in] Name of the requested state variable.

Returns:

A view into the state variable array.

template<typename T>
inline T fy(T kappa_)

Hardening function.

in] kappa Hardening variable.

Tparam :

Returns:

Current yield stress.

template<typename T>
inline T f(const T rho_, const double kappa_)

Yield function.

in] rho Deviatoric radius ( \(\rho = ||s||\)).

Tparam :

Parameters:

kappa[in] Hardening variable.

Returns:

Value of the yield function.

template<typename T>
inline T g(const T rhoTrial, const double kappa, const T deltaKappa)

Objective function for stress update algorithm.

in] rhoTrial Deviatoric radius.

in] deltaKappa Increment of the hardening variable.

Tparam :

Parameters:

kappa[in] Current value of the hardening variable.

Tparam :

Returns:

Value of the yield function.

Protected Attributes

std::unique_ptr<ADVonMisesModelStateVarManager> managedStateVars
class ADVonMisesModelStateVarManager : public MarmotStateVarVectorManager

Inheritance diagram for Marmot::Materials::ADVonMises::ADVonMisesModelStateVarManager:

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

Collaboration diagram for Marmot::Materials::ADVonMises::ADVonMisesModelStateVarManager:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="Marmot::Materials::ADVonMises::ADVonMisesModelStateVarManager" tooltip="Marmot::Materials::ADVonMises::ADVonMisesModelStateVarManager" 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 ADVonMisesModelStateVarManager(double *theStateVarVector)

Public Members

double &kappa

Hardening variable.

Public Static Attributes

static const auto layout = makeLayout( {{ .name = "kappa", .length = 1 },} )