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\) |
|
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"]
}](../../_images/graphviz-542c8701b39dedefea06a5123484c89896815029.png)
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"]
}](../../_images/graphviz-542c8701b39dedefea06a5123484c89896815029.png)
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"]
}](../../_images/graphviz-43f2c4a5cc82588a00287d578a3a55295ff7fb90.png)
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"]
}](../../_images/graphviz-44555bcd1ba80d245880ecfa0e8843989b5d8d13.png)
Public Functions
-
inline ADVonMisesModelStateVarManager(double *theStateVarVector)
Public Members
-
double &kappa
Hardening variable.
Public Static Attributes
-
static const auto layout =
makeLayout( {{ .name = "kappa", .length = 1 },} )
-
inline ADVonMisesModelStateVarManager(double *theStateVarVector)
-
ADVonMises(const double *materialProperties, int nMaterialProperties, int materialNumber)