NuTo
Numerics Tool
EngineeringStrainInvariants.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <eigen3/Eigen/Core>
5 
6 namespace NuTo
7 {
8 namespace EngineeringStrainInvariants
9 {
10 using Tensor = Eigen::Matrix3d;
11 
13 {
14  Tensor t = Tensor::Zero();
15  t(0, 0) = v[0];
16  t(1, 1) = v[1];
17  t(2, 2) = v[2];
18 
19  t(1, 0) = 0.5 * v[5];
20  t(0, 1) = 0.5 * v[5];
21 
22  t(2, 0) = 0.5 * v[4];
23  t(0, 2) = 0.5 * v[4];
24 
25  t(2, 1) = 0.5 * v[3];
26  t(1, 2) = 0.5 * v[3];
27  return t;
28 }
29 
32 inline double I1(const EngineeringStrain<3>& v)
33 {
34  return v.segment<3>(0).sum();
35 }
36 
39 inline double I2(const EngineeringStrain<3>& v)
40 {
41  // e_xx = v[0] || e_yy = v[1] || e_zz = v[2]
42  // e_yz = v[3] / 2 || e_zx = v[4] / 2 || e_xy = v[5] / 2
43  return v[0] * v[1] + v[1] * v[2] + v[2] * v[0] - 0.25 * (v[3] * v[3] + v[4] * v[4] + v[5] * v[5]);
44 }
45 
48 inline double I3(const EngineeringStrain<3>& v)
49 {
50  // e_xx = v[0] || e_yy = v[1] || e_zz = v[2]
51  // e_yz = v[3] / 2 || e_zx = v[4] / 2 || e_xy = v[5] / 2
52  return v[0] * v[1] * v[2] + 0.25 * v[3] * v[4] * v[5] -
53  .25 * (v[5] * v[5] * v[2] + v[3] * v[3] * v[0] + v[4] * v[4] * v[1]);
54 }
55 
59 inline double J2(const EngineeringStrain<3>& v)
60 {
61  const double eps_xx = v[0];
62  const double eps_yy = v[1];
63  const double eps_zz = v[2];
64  const double eps_yz = .5 * v[3];
65  const double eps_zx = .5 * v[4];
66  const double eps_xy = .5 * v[5];
67 
68  return 1. / 6. * ((eps_xx - eps_yy) * (eps_xx - eps_yy) + (eps_yy - eps_zz) * (eps_yy - eps_zz) +
69  (eps_zz - eps_xx) * (eps_zz - eps_xx)) +
70  eps_xy * eps_xy + eps_yz * eps_yz + eps_zx * eps_zx;
71 }
72 
73 
76 {
77  double I1_3 = I1(v) / 3.;
78  v[0] -= I1_3;
79  v[1] -= I1_3;
80  v[2] -= I1_3;
81  return v;
82 }
83 
84 } /* TensorCalc */
85 } /* NuTo */
Eigen::Matrix3d Tensor
Definition: EngineeringStrainInvariants.h:10
Engineering strain.
Definition: EngineeringStrain.h:33
double J2(const EngineeringStrain< 3 > &v)
returns J2 - the second deviatoric strain invariant of the characteristic equation Note the minus si...
Definition: EngineeringStrainInvariants.h:59
double I3(const EngineeringStrain< 3 > &v)
returns I3 - the first strain invariant of the characteristic equation
Definition: EngineeringStrainInvariants.h:48
int v
Definition: Quad2DPatchTest.py:9
Definition: Exception.h:6
Tensor ToTensor(EngineeringStrain< 3 > &v)
Definition: EngineeringStrainInvariants.h:12
double I1(const EngineeringStrain< 3 > &v)
returns I1 - the first strain invariant of the characteristic equation
Definition: EngineeringStrainInvariants.h:32
double I2(const EngineeringStrain< 3 > &v)
returns I2 - the first strain invariant of the characteristic equation
Definition: EngineeringStrainInvariants.h:39
EngineeringStrain< 3 > Deviatoric(EngineeringStrain< 3 > v)
returns the deviatoric part
Definition: EngineeringStrainInvariants.h:75