Alamo
J2Plastic.H
Go to the documentation of this file.
1 #ifndef MODEL_SOLID_PLASTIC_J2_H_
2 #define MODEL_SOLID_PLASTIC_J2_H_
3 
4 #include "AMReX.H"
5 #include <AMReX_REAL.H>
6 #include <eigen3/Eigen/Core>
7 #include "Affine.H"
8 #include "Set/Set.H"
10 
11 namespace Model
12 {
13 namespace Solid
14 {
15 namespace Affine
16 {
17 class J2Plastic : public Isotropic
18 {
19 public:
20  J2Plastic() {};
22 
23  J2Plastic(Set::Scalar a_mu, Set::Scalar a_lambda, Set::Scalar a_yield, Set::Scalar a_hardening, Set::Scalar a_theta=1.0)
24  {
25  Define(a_mu, a_lambda, a_yield, a_hardening, a_theta);
26  }
27 
28  void Define(Set::Scalar a_mu, Set::Scalar a_lambda, Set::Scalar a_yield, Set::Scalar a_hardening, Set::Scalar a_theta)
29  {
30  m_mu = a_mu;
31  theta = a_theta;
32  yield_strength = a_yield;
33  hardening_modulus = a_hardening;
34 
35  curr = PlasticState::Zero();
36  prev = PlasticState::Zero();
37 
38  Isotropic::Define(a_mu, a_lambda);
39  }
40 
42  {
43  return yield_strength + curr.alpha*hardening_modulus;
44  }
45 
47  {
48  return (yield_strength*curr.alpha + 0.5*hardening_modulus*curr.alpha*curr.alpha);
49  }
50 
52  {
53  Set::Scalar SQ2O3 = sqrt(1.0 - 1.0/((double)AMREX_SPACEDIM));
54  Set::Matrix sigdev = sigma - (1.0/((double)AMREX_SPACEDIM))*sigma.trace()*Set::Matrix::Identity();
55  Set::Matrix epsdev = strain - strain.trace()*Set::Matrix::Identity();
56 
57  Set::Matrix zeta_trial = sigdev - prev.beta + 2.0*m_mu*epsdev;
58 
59  Set::Scalar f_trial = zeta_trial.norm() - SQ2O3*(yield_strength + theta*hardening_modulus*prev.alpha);
60  if( f_trial <= 0.0)
61  {
62  curr.epsp = prev.epsp; curr.alpha = prev.alpha; curr.beta = prev.beta;
63  return;
64  }
65  Set::Matrix n_new = zeta_trial/zeta_trial.norm();
66  Set::Scalar dGamma = f_trial/(2.0*(m_mu)*(1.0 + (hardening_modulus/(3.0*m_mu))));
67  Set::Scalar dH = SQ2O3*(1.0-theta)*hardening_modulus*dGamma;
68 
69  curr.alpha = prev.alpha + SQ2O3*dGamma;
70  curr.beta = prev.beta + SQ2O3*dH*n_new;
71  curr.epsp = prev.epsp + dGamma*n_new;
72  Isotropic::SetF0(curr.epsp);
73  }
74 
76  {
77  prev = Affine::PlasticState::Zero();
78  curr = Affine::PlasticState::Zero();
79  }
80 
81  void SetPlasticStrains(PlasticState &a_state)
82  {
83  prev = a_state;
84  curr = a_state;
85  Isotropic::SetF0(curr.epsp);
86  }
87 
88  PlasticState GetPlasticState()
89  {
90  return curr;
91  }
92 
93 public:
94  PlasticState curr, prev;
95  Set::Scalar theta; // isotropic and kinematic hardening parameter
96  Set::Scalar yield_strength; // yield strength
97  Set::Scalar hardening_modulus; // hardening modulus
99 
100 public:
101  static void Parse(J2Plastic & value, IO::ParmParse & pp)
102  {
103  Set::Scalar mu, lambda;
104  if (pp.contains("lambda") && pp.contains("mu"))
105  {
106  pp.query("lambda",lambda); // Lame constant
107  pp.query("mu",mu); // Shear modulus
108  }
109  else if (pp.contains("E") && pp.contains("nu"))
110  {
111  Set::Scalar E, nu;
112  pp.query("E",E); // Young's modulus
113  pp.query("nu",nu); // Poisson's ratio
114  lambda = E * nu / (1.0 + nu) / (1.0 - 2.0*nu);
115  mu = E / 2.0 / (1.0 + nu);
116  }
117  Set::Scalar yield = 1.0, hardening = 1.0, theta_tmp = 1.0;
118 
119  pp.query("yield", yield); // Yield strength
120  pp.query("hardening", hardening); // Hardening constant
121  pp.query("theta", theta_tmp); // Hardening theta
122 
123  value.Define(mu, lambda, yield, hardening, theta_tmp);
124  }
125  AMREX_FORCE_INLINE
126  void operator += (const J2Plastic &rhs)
127  {
128  m_mu += rhs.m_mu;
129  curr += rhs.curr;
130  prev += rhs.prev;
131  theta += rhs.theta;
134 
135  ddw += rhs.ddw;
136  F0 += rhs.F0;
137  }
138  AMREX_FORCE_INLINE
139  J2Plastic operator * (const Set::Scalar alpha) const
140  {
141  J2Plastic ret;
142  ret.m_mu = alpha * m_mu;
143  ret.curr = alpha*curr;
144  ret.prev = alpha*prev;
145  ret.theta = alpha*theta;
146  ret.yield_strength = alpha*yield_strength;
148 
149  ret.ddw = ddw*alpha;
150  ret.F0 = F0*alpha;
151 
152  return ret;
153  }
154  friend J2Plastic operator * (const Set::Scalar alpha, const J2Plastic b);
155  friend J2Plastic operator + (const J2Plastic a, const J2Plastic b);
156  friend J2Plastic operator - (const J2Plastic a, const J2Plastic b);
157 
158 };
159 AMREX_FORCE_INLINE
161 {
162  J2Plastic ret;
163  ret.m_mu = alpha * b.m_mu;
164  ret.curr = alpha * b.curr;
165  ret.prev = alpha * b.prev;
166  ret.theta = alpha * b.theta;
167  ret.yield_strength = alpha * b.yield_strength;
168  ret.hardening_modulus = alpha * b.hardening_modulus;
169 
170  ret.ddw = b.ddw*alpha;
171  ret.F0 = b.F0*alpha;
172  return ret;
173 }
174 AMREX_FORCE_INLINE
176 {
177  J2Plastic ret;
178  ret.m_mu = a.m_mu + b.m_mu;
179  ret.curr = a.curr + b.curr;
180  ret.prev = a.prev + b.prev;
181  ret.theta = a.theta + b.theta;
184 
185  ret.ddw = a.ddw + b.ddw;
186  ret.F0 = a.F0 + b.F0;
187  return ret;
188 }
189 AMREX_FORCE_INLINE
191 {
192  J2Plastic ret;
193  ret.m_mu = a.m_mu - b.m_mu;
194  ret.curr = a.curr - b.curr;
195  ret.prev = a.prev - b.prev;
196  ret.theta = a.theta - b.theta;
199 
200  ret.ddw = a.ddw - b.ddw;
201  ret.F0 = a.F0 - b.F0;
202  return ret;
203 }
204 
205 
206 }
207 }
208 }
209 #endif
Model::Solid::Affine::Affine< Set::Sym::Isotropic >::SetF0
void SetF0(Set::Matrix a_F0)
Definition: Affine.H:39
Model::Solid::Affine::J2Plastic::theta
Set::Scalar theta
Definition: J2Plastic.H:95
Model::Solid::Affine::J2Plastic::curr
PlasticState curr
Definition: J2Plastic.H:94
Model::Solid::Affine::J2Plastic::YieldSurface
Set::Scalar YieldSurface()
Definition: J2Plastic.H:41
Model::Solid::Affine::J2Plastic::J2Plastic
J2Plastic()
Definition: J2Plastic.H:20
Model::Solid::Affine::J2Plastic::prev
PlasticState prev
Definition: J2Plastic.H:94
Model::Solid::Affine::J2Plastic::operator-
friend J2Plastic operator-(const J2Plastic a, const J2Plastic b)
Definition: J2Plastic.H:190
Model::Solid::Affine::J2Plastic::Define
void Define(Set::Scalar a_mu, Set::Scalar a_lambda, Set::Scalar a_yield, Set::Scalar a_hardening, Set::Scalar a_theta)
Definition: J2Plastic.H:28
Model::Solid::Affine::Isotropic::Define
void Define(Set::Scalar a_mu, Set::Scalar a_lambda, Set::Matrix a_F0)
Definition: Isotropic.H:25
Model::Solid::Affine::J2Plastic::SetPlasticStrains
void SetPlasticStrains()
Definition: J2Plastic.H:75
Model::Solid::Affine::Isotropic
Definition: Isotropic.H:14
Model::Solid::Affine::J2Plastic::operator+
friend J2Plastic operator+(const J2Plastic a, const J2Plastic b)
Definition: J2Plastic.H:175
Model::Solid::Affine::J2Plastic::EvolvePlasticStrain
void EvolvePlasticStrain(Set::Matrix sigma, Set::Matrix strain, Set::Scalar)
Definition: J2Plastic.H:51
Model::Solid::Affine::J2Plastic::SetPlasticStrains
void SetPlasticStrains(PlasticState &a_state)
Definition: J2Plastic.H:81
Affine.H
Model::Solid::Affine::Affine< Set::Sym::Isotropic >::F0
Set::Matrix F0
Definition: Affine.H:38
Set::Scalar
amrex::Real Scalar
Definition: Base.H:19
Model::Solid::Affine::J2Plastic::J2Plastic
J2Plastic(Set::Scalar a_mu, Set::Scalar a_lambda, Set::Scalar a_yield, Set::Scalar a_hardening, Set::Scalar a_theta=1.0)
Definition: J2Plastic.H:23
Model::Solid::Affine::operator-
AMREX_FORCE_INLINE J2Plastic operator-(const J2Plastic a, const J2Plastic b)
Definition: J2Plastic.H:190
Set::Matrix
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
Definition: Base.H:23
Model::Solid::Affine::J2Plastic::hardening_modulus
Set::Scalar hardening_modulus
Definition: J2Plastic.H:97
Model::Solid::Affine::J2Plastic::m_mu
Set::Scalar m_mu
Definition: J2Plastic.H:98
Model::Solid::Affine::J2Plastic::J2Plastic
J2Plastic(Solid< Set::Sym::Isotropic > base)
Definition: J2Plastic.H:21
IO::ParmParse::contains
bool contains(std::string name)
Definition: ParmParse.H:151
Model::Solid::Affine::J2Plastic
Definition: J2Plastic.H:17
Model::Solid::Affine::operator+
AMREX_FORCE_INLINE J2Plastic operator+(const J2Plastic a, const J2Plastic b)
Definition: J2Plastic.H:175
Model::Solid::Solid< Set::Sym::Isotropic >
Model::Solid::Affine::J2Plastic::operator+=
AMREX_FORCE_INLINE void operator+=(const J2Plastic &rhs)
Definition: J2Plastic.H:126
Set.H
Model::Solid::Affine::Affine< Set::Sym::Isotropic >::ddw
Set::Matrix4< AMREX_SPACEDIM, SYM > ddw
Definition: Affine.H:37
IO::ParmParse
Definition: ParmParse.H:110
Isotropic.H
Model::Solid::Affine::J2Plastic::operator*
AMREX_FORCE_INLINE J2Plastic operator*(const Set::Scalar alpha) const
Definition: J2Plastic.H:139
Model::Solid::Affine::J2Plastic::GetPlasticState
PlasticState GetPlasticState()
Definition: J2Plastic.H:88
Model::Solid::Affine::operator*
AMREX_FORCE_INLINE J2Plastic operator*(const Set::Scalar alpha, const J2Plastic b)
Definition: J2Plastic.H:160
Model::Solid::Affine::J2Plastic::PlasticEnergy
Set::Scalar PlasticEnergy()
Definition: J2Plastic.H:46
Model
Definition: Constant.H:12
Model::Solid::Affine::J2Plastic::Parse
static void Parse(J2Plastic &value, IO::ParmParse &pp)
Definition: J2Plastic.H:101
Model::Solid::Affine::J2Plastic::yield_strength
Set::Scalar yield_strength
Definition: J2Plastic.H:96