NuTo
Numerics Tool
LinearElasticDamage.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "nuto/base/Exception.h"
5 #include "EngineeringTangent.h"
6 #include "EngineeringStrain.h"
7 #include "EngineeringStress.h"
9 
10 namespace NuTo
11 {
12 namespace Laws
13 {
15 {
18 };
19 
26 template <int TDim>
28 {
30 
31 public:
32  LinearElasticDamage(double E, double nu, eDamageApplication damageApplication = FULL,
34  : m3K(3 * E / (3 - 6 * nu))
35  , m2G(2 * E / (2 + 2 * nu))
36  , mDamageApplication(damageApplication)
37  , mPlaneState(planeState)
38  {
39  if (TDim == 1)
40  {
41  m3K = E;
42  m2G = E;
43  }
44 
45  mD.setZero();
46  mD.head(TDim) = Eigen::VectorXd::Ones(TDim);
47 
48  mD2 = mD;
49  if (TDim == 2 && mPlaneState == ePlaneState::PLANE_STRESS)
50  mD2 *= (1 + nu / (nu - 1));
51 
52  mPinvDiag = EigenVDim::Constant(0.5);
53  mPinvDiag.head(TDim) = Eigen::VectorXd::Ones(TDim);
54 
55  mIv = 1. / 3. * mD * mD2.transpose();
57  }
58 
60  : LinearElasticDamage::LinearElasticDamage(m.E, m.nu, damageApplication, m.planeState)
61  {
62  }
63 
64 
66  {
67  const double eV = 1. / 3. * mD2.transpose() * strain;
68  const EngineeringStrain<TDim> e = strain - mD * eV;
69 
70  const double sV = (1. - omega * H(eV)) * m3K * eV;
71  return mD * sV + (1. - omega) * m2G * mPinvDiag.asDiagonal() * e;
72  }
73 
75  {
76  const double eV = 1. / 3. * mD2.transpose() * strain;
77 
78  const EngineeringTangent<TDim> dSigma_deV = m3K * (1. - omega * H(eV)) * mIv;
79  const EngineeringTangent<TDim> dSigma_de = (1. - omega) * m2G * mPinvId;
80 
81  return dSigma_deV + dSigma_de;
82  }
83 
85  {
86  const double eV = 1. / 3. * mD2.transpose() * strain;
87  const EngineeringStrain<TDim> e = strain - mD * eV;
88  const double dsigmaV_dOmega = -m3K * eV * H(eV);
89 
90  return mD * dsigmaV_dOmega - m2G * mPinvDiag.asDiagonal() * e;
91  }
92 
93  double H(double eV) const
94  {
96  return eV < 0 ? 0 : 1;
97  else
98  return 1;
99  }
100 
101 public:
103  double m3K;
104 
106  double m2G;
107 
110 
113 
117 
120 
123 
126 };
127 
128 } /* Laws */
129 } /* NuTo */
Definition: LinearElasticDamage.h:16
ePlaneState
Definition: ConstitutivePlaneStateEnum.h:4
EigenVDim mPinvDiag
diagonal scaling matrix to account for (voigt) gamma_xy == (tensor) 2 * epsilon_xy ...
Definition: LinearElasticDamage.h:119
LinearElasticDamage(double E, double nu, eDamageApplication damageApplication=FULL, ePlaneState planeState=ePlaneState::PLANE_STRAIN)
Definition: LinearElasticDamage.h:32
Engineering strain.
Definition: EngineeringStrain.h:33
EngineeringStress< TDim > Stress(EngineeringStrain< TDim > strain, double omega) const
Definition: LinearElasticDamage.h:65
EigenVDim mD
Kronecker delta in engineering (voigt) notation.
Definition: LinearElasticDamage.h:112
LinearElasticDamage(Material::Softening m, eDamageApplication damageApplication=FULL)
Definition: LinearElasticDamage.h:59
EngineeringTangent< TDim > DstressDstrain(EngineeringStrain< TDim > strain, double omega) const
Definition: LinearElasticDamage.h:74
const double nu
Definition: LinearElasticDamageBenchmark.cpp:7
const double omega
Definition: LinearElasticDamageBenchmark.cpp:8
EngineeringTangent< TDim > mIv
volumetric projection tensor I_v in engineering (voigt) notation
Definition: LinearElasticDamage.h:122
Common material parameters for softening materials.
Definition: SofteningMaterial.h:12
ePlaneState mPlaneState
Definition: LinearElasticDamage.h:109
double m2G
two times the shear modulus G
Definition: LinearElasticDamage.h:106
EngineeringStress< TDim > DstressDomega(EngineeringStrain< TDim > strain, double) const
Definition: LinearElasticDamage.h:84
eDamageApplication mDamageApplication
Definition: LinearElasticDamage.h:108
EigenVDim mD2
modified Kronecker delta that gives the volumetric strain
Definition: LinearElasticDamage.h:116
eDamageApplication
Definition: LinearElasticDamage.h:14
double m3K
three times the bulk modulus K
Definition: LinearElasticDamage.h:103
double H(double eV) const
Definition: LinearElasticDamage.h:93
Definition: LinearElasticDamage.h:17
Engineering stress.
Definition: EngineeringStress.h:31
Definition: Exception.h:6
EngineeringTangent< TDim > mPinvId
product of mPinv and the deviatoric projection tensor I_d in engineering (voigt) notation ...
Definition: LinearElasticDamage.h:125
Applies an isotropic damage variable to the linear elastic hookes law.
Definition: LinearElasticDamage.h:27
const double E
Definition: LinearElasticDamageBenchmark.cpp:6
const NuTo::EngineeringStrain< 3 > strain
Definition: LinearElasticDamageBenchmark.cpp:9