v0.14.0
SmallStrainPlasticityMaterialModels.hpp
Go to the documentation of this file.
1 /** \file SmallStrainPlasticityMaterialModels.hpp
2  * \ingroup small_strain_plasticity
3  * \brief Small Strain plasticity material models
4  * \example SmallStrainPlasticityMaterialModels.hpp
5  */
6 
7 /*
8  * This file is part of MoFEM.
9  * MoFEM is free software: you can redistribute it and/or modify it under
10  * the terms of the GNU Lesser General Public License as published by the
11  * Free Software Foundation, either version 3 of the License, or (at your
12  * option) any later version.
13  *
14  * MoFEM is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17  * License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with MoFEM. If not, see <http://www.gnu.org/licenses/>. */
21 
22 #ifndef __SMALL_STRAIN_PLASTICITY_MATERIAL_MODELS_HPP
23 #define __SMALL_STRAIN_PLASTICITY_MATERIAL_MODELS_HPP
24 
25 #ifndef WITH_ADOL_C
26  #error "MoFEM need to be compiled with ADOL-C"
27 #endif
28 
29 /** \brief J2 plasticity (Kinematic Isotropic (Linear) Hardening)
30 * \ingroup small_strain_plasticity
31 */
33 
36  internalVariables.resize(7,false);
37  internalVariables.clear();
38  }
39 
40  double mu; //< Lamé parameter
41  double lambda; //< Lamé parameters
42  double H; //< Isotropic hardening
43  double K; //< Kinematic hardening
44  double phi; //< Combined isotropic/kinematic hardening
45  double sIgma_y; //< Yield stress
46 
47  /** \brief Available energy
48 
49  \f[
50  \psi =
51  \frac{1}{2} \lambda \textrm{tr}[\varepsilon]^2 + \mu \varepsilon : \varepsilon
52  +
53  \sigma_y\alpha
54  +
55  \frac{1}{2} \phi H \alpha^2
56  +
57  \frac{1}{2} (1-\phi)K \beta^2
58  \f]
59 
60  Isotropic hardening variable \f$\alpha\f$ is in first index of
61  internal variables vector. Kinematic hardening variable is in
62  the remaining indices of internal variables vector.
63 
64  */
65  virtual PetscErrorCode freeHemholtzEnergy() {
66  PetscFunctionBegin;
67  //elastic part
68  adouble tR = 0;
69  for(int dd = 0;dd<3;dd++) {
70  tR += a_sTrain[dd]-a_plasticStrain[dd];
71  }
72  a_w = 0.5*lambda*tR*tR;
73  adouble t;
74  int dd = 0;
75  for(;dd<3;dd++) {
77  a_w += mu*t*t;
78  }
79  for(;dd<6;dd++) {
81  a_w += 0.5*mu*t*t;
82  }
83  //plastic part
84  //isotropic
86  //kinematic
87  for(unsigned int dd = 1;dd<a_internalVariables.size();dd++) {
89  }
90  PetscFunctionReturn(0);
91  }
92 
93  /** \brief Auxiliary function
94 
95  \f[
96  \eta=\textrm{dev}[\sigma]-\overline{\beta}
97  \f]
98 
99  \f[
100  f = \frac{3}{2} \eta:\eta
101  \f]
102 
103  This is \f$3J_2\f$.
104 
105  */
107  PetscErrorCode evalF() {
108  PetscFunctionBegin;
109  adouble tR = 0;
110  for(int dd = 0;dd<3;dd++) {
111  tR += a_sTress[dd];
112  }
113  // Fix the constant to mach uniaxial test
114  const double c = 3./2.;
115  tR /= 3.;
116  f = 0;
117  for(int dd = 0;dd<3;dd++) {
118  t = (a_sTress[dd]-tR)-a_internalFluxes[dd+1];
119  f += c*t*t;
120  }
121  for(int dd = 3;dd<6;dd++) {
123  f += c*2.*t*t; // s:s off diagonal terms need to go twice
124  }
125  PetscFunctionReturn(0);
126  }
127 
128  /** \brief Evaluate yield function
129 
130  \f[
131  y = \sqrt{f} - \overline{\alpha}
132  \f]
133  where \f$f\f$ is defined in \ref evalF.
134 
135  */
136  virtual PetscErrorCode yieldFunction() {
137  PetscFunctionBegin;
138  ierr = evalF(); CHKERRQ(ierr);
139  a_y = sqrt(f) - a_internalFluxes[0];
140  PetscFunctionReturn(0);
141  }
142 
143  /** \brief Associated flow potential
144 
145  See \ref yieldFunction.
146 
147  */
148  virtual PetscErrorCode flowPotential() {
149  PetscFunctionBegin;
150  ierr = evalF(); CHKERRQ(ierr);
151  a_h = sqrt(f) - a_internalFluxes[0];
152  PetscFunctionReturn(0);
153  }
154 
155 };
156 
157 
158 
159 /** \brief Small strain plasticity with paraboloidal yield criterion (Isotropic Hardening)
160 * \ingroup small_strain_plasticity
161 */
163 
166  internalVariables.resize(2,false);
167  internalVariables.clear();
168  }
169 
170  double mu; //< Lamé parameter
171  double lambda; //< Lamé parameters
172  double nup; //< Plastic Poisson’s ratio
173  double Ht, Hc; //< Isotropic hardening for tension and compression
174  double sIgma_yt, sIgma_yc; //< Yield stress in tension and compression
175  double nt, nc; //< Hardening parameters for tension and compression
176 
177 
178 
179  /** \brief Available energy
180 
181  \f[
182  \psi =
183  \frac{1}{2} \lambda \textrm{tr}[\varepsilon]^2 + \mu \varepsilon : \varepsilon
184  +
185  \sigma_{yt}\alpha_0
186  +
187  \frac{1}{2} H_t \alpha_0^2
188  +
189  \sigma_{yc}\alpha_1
190  +
191  \frac{1}{2} H_c \alpha_1^2
192  \f]
193 
194  //Energy with linear hardening
195 // */
196 // virtual PetscErrorCode freeHemholtzEnergy() {
197 // PetscFunctionBegin;
198 // //elastic part
199 // adouble tR = 0;
200 // for(int dd = 0;dd<3;dd++) {
201 // tR += a_sTrain[dd]-a_plasticStrain[dd];
202 // }
203 // a_w = 0.5*lambda*tR*tR;
204 // adouble t;
205 // int dd = 0;
206 // for(;dd<3;dd++) {
207 // t = a_sTrain[dd]-a_plasticStrain[dd];
208 // a_w += mu*t*t;
209 // }
210 // for(;dd<6;dd++) {
211 // t = a_sTrain[dd]-a_plasticStrain[dd];
212 // a_w += 0.5*mu*t*t;
213 // }
214 // //plastic part
215 // //isotropic
216 // a_w += a_internalVariables[0]*sIgma_yt + 0.5*Ht*a_internalVariables[0]*a_internalVariables[0];
217 // a_w += a_internalVariables[1]*sIgma_yc + 0.5*Hc*a_internalVariables[1]*a_internalVariables[1];
218 // PetscFunctionReturn(0);
219 // }
220 
221 
222  //Energy with exponential hardening
223  // */
224  virtual PetscErrorCode freeHemholtzEnergy() {
225  PetscFunctionBegin;
226  //elastic part
227  adouble tR = 0;
228  for(int dd = 0;dd<3;dd++) {
229  tR += a_sTrain[dd]-a_plasticStrain[dd];
230  }
231  a_w = 0.5*lambda*tR*tR;
232  adouble t;
233  int dd = 0;
234  for(;dd<3;dd++) {
236  a_w += mu*t*t;
237  }
238  for(;dd<6;dd++) {
240  a_w += 0.5*mu*t*t;
241  }
242  //plastic part
243  //isotropic
244 // a_w += a_internalVariables[0]*sIgma_yt + 0.5*Ht*a_internalVariables[0]*a_internalVariables[0];
245 // a_w += a_internalVariables[1]*sIgma_yc + 0.5*Hc*a_internalVariables[1]*a_internalVariables[1];
248 
249  PetscFunctionReturn(0);
250  }
251 
252 
253 
254  /** \brief Auxiliary function
255  \f[
256  I_1 = \textrm{tr} (\boldsymbol{\sigma})
257  \f]
258 
259  \f[
260  \eta=\textrm{dev}[\boldsymbol{\sigma}]
261  \f]
262 
263  \f[
264  J_2 = \frac{1}{2} \eta:\eta
265  \f]
266 
267  */
269  PetscErrorCode evalF() {
270  PetscFunctionBegin;
271  adouble tR = 0;
272  for(int dd = 0;dd<3;dd++) {
273  tR += a_sTress[dd];
274  }
275  I1=tR;
276 
277  tR /= 3.;
278  J2 = 0;
279  adouble t;
280  for(int dd = 0;dd<3;dd++) {
281  t = (a_sTress[dd]-tR);
282  J2 += t*t;
283  }
284  for(int dd = 3;dd<6;dd++) {
285  J2 += 2.*a_sTress[dd]*a_sTress[dd]; // s:s off diagonal terms need to go twice
286  }
287  J2=0.5*J2;
288 
289  PetscFunctionReturn(0);
290  }
291 
292  /** \brief Evaluate yield function
293 
294  \f[
295  y = 6J_2 + 2I_1\left(\overline{\alpha_1}-\overline{\alpha_0}\right) - 2\overline{\alpha_0} \,\overline{\alpha_1}
296  \f]
297  where
298 
299  \f[
300  \overline{\alpha_0}=\frac{\partial \psi}{\partial \alpha_0}=\sigma_{yt} + H_t \alpha_0
301  \f]
302 
303  \f[
304  \overline{\alpha_1}=\frac{\partial \psi}{\partial \alpha_1}=\sigma_{yc} + H_c \alpha_1
305  \f]
306 
307 
308  */
309  virtual PetscErrorCode yieldFunction() {
310  PetscFunctionBegin;
311  ierr = evalF(); CHKERRQ(ierr);
313  PetscFunctionReturn(0);
314  }
315 
316  /** \brief Flow potential
317 
318  \f[
319  \Psi = 6J_2 + 2\alpha I_1 \left(\overline{\alpha_1}-\overline{\alpha_0}\right) - 2\overline{\alpha_0} \,\overline{\alpha_1}
320  \f]
321  \f[
322  \alpha= \frac{1-2\nu_p}{1+\nu_p}
323  \f]
324 
325 
326  */
327  virtual PetscErrorCode flowPotential() {
328  PetscFunctionBegin;
329  ierr = evalF(); CHKERRQ(ierr);
330  double alpha= (1-2*nup)/(1+nup); //relation between alpha and plastic Poission's ratio
332  PetscFunctionReturn(0);
333  }
334 };
335 
336 
337 #endif //__SMALL_STRAIN_PLASTICITY_MATERIAL_MODELS_HPP
SmallStrainParaboloidalPlasticity::J2
adouble J2
Definition: SmallStrainPlasticityMaterialModels.hpp:268
SmallStrainParaboloidalPlasticity::nt
double nt
Definition: SmallStrainPlasticityMaterialModels.hpp:175
SmallStrainPlasticity::ClosestPointProjection::a_plasticStrain
ublas::vector< adouble > a_plasticStrain
Definition: SmallStrainPlasticity.hpp:517
SmallStrainParaboloidalPlasticity::lambda
double lambda
Definition: SmallStrainPlasticityMaterialModels.hpp:171
SmallStrainParaboloidalPlasticity
Small strain plasticity with paraboloidal yield criterion (Isotropic Hardening)
Definition: SmallStrainPlasticityMaterialModels.hpp:162
SmallStrainJ2Plasticity::sIgma_y
double sIgma_y
Definition: SmallStrainPlasticityMaterialModels.hpp:45
SmallStrainParaboloidalPlasticity::freeHemholtzEnergy
virtual PetscErrorCode freeHemholtzEnergy()
Available energy.
Definition: SmallStrainPlasticityMaterialModels.hpp:224
SmallStrainPlasticity::ClosestPointProjection
Closest point projection algorithm.
Definition: SmallStrainPlasticity.hpp:482
SmallStrainJ2Plasticity::f
adouble f
Definition: SmallStrainPlasticityMaterialModels.hpp:106
SmallStrainJ2Plasticity::freeHemholtzEnergy
virtual PetscErrorCode freeHemholtzEnergy()
Available energy.
Definition: SmallStrainPlasticityMaterialModels.hpp:65
SmallStrainJ2Plasticity::evalF
PetscErrorCode evalF()
Definition: SmallStrainPlasticityMaterialModels.hpp:107
SmallStrainPlasticity::ClosestPointProjection::a_internalFluxes
ublas::vector< adouble > a_internalFluxes
Definition: SmallStrainPlasticity.hpp:518
c
const double c
speed of light (cm/ns)
Definition: initial_diffusion.cpp:39
SmallStrainParaboloidalPlasticity::SmallStrainParaboloidalPlasticity
SmallStrainParaboloidalPlasticity()
Definition: SmallStrainPlasticityMaterialModels.hpp:164
SmallStrainParaboloidalPlasticity::sIgma_yt
double sIgma_yt
Definition: SmallStrainPlasticityMaterialModels.hpp:174
SmallStrainParaboloidalPlasticity::nc
double nc
Definition: SmallStrainPlasticityMaterialModels.hpp:175
SmallStrainJ2Plasticity::phi
double phi
Definition: SmallStrainPlasticityMaterialModels.hpp:44
SmallStrainJ2Plasticity::t
adouble t
Auxiliary function.
Definition: SmallStrainPlasticityMaterialModels.hpp:106
SmallStrainJ2Plasticity
J2 plasticity (Kinematic Isotropic (Linear) Hardening)
Definition: SmallStrainPlasticityMaterialModels.hpp:32
SmallStrainParaboloidalPlasticity::evalF
PetscErrorCode evalF()
Definition: SmallStrainPlasticityMaterialModels.hpp:269
SmallStrainJ2Plasticity::SmallStrainJ2Plasticity
SmallStrainJ2Plasticity()
Definition: SmallStrainPlasticityMaterialModels.hpp:34
SmallStrainJ2Plasticity::mu
double mu
Definition: SmallStrainPlasticityMaterialModels.hpp:40
SmallStrainPlasticity::ClosestPointProjection::a_internalVariables
ublas::vector< adouble > a_internalVariables
Definition: SmallStrainPlasticity.hpp:517
t
constexpr double t
plate stiffness
Definition: plate.cpp:59
SmallStrainParaboloidalPlasticity::I1
adouble I1
Auxiliary function.
Definition: SmallStrainPlasticityMaterialModels.hpp:268
SmallStrainPlasticity
Small strain finite element implementation.
Definition: SmallStrainPlasticity.hpp:320
SmallStrainParaboloidalPlasticity::yieldFunction
virtual PetscErrorCode yieldFunction()
Evaluate yield function.
Definition: SmallStrainPlasticityMaterialModels.hpp:309
SmallStrainJ2Plasticity::lambda
double lambda
Definition: SmallStrainPlasticityMaterialModels.hpp:41
SmallStrainPlasticity::ClosestPointProjection::a_sTress
ublas::vector< adouble > a_sTress
Definition: SmallStrainPlasticity.hpp:518
SmallStrainParaboloidalPlasticity::flowPotential
virtual PetscErrorCode flowPotential()
Flow potential.
Definition: SmallStrainPlasticityMaterialModels.hpp:327
SmallStrainPlasticity::ClosestPointProjection::internalVariables
VectorDouble internalVariables
Definition: SmallStrainPlasticity.hpp:486
SmallStrainParaboloidalPlasticity::nup
double nup
Definition: SmallStrainPlasticityMaterialModels.hpp:172
SmallStrainPlasticity::ClosestPointProjection::a_w
adouble a_w
Definition: SmallStrainPlasticity.hpp:519
adouble
FTensor::dd
const Tensor2_symmetric_Expr< const ddTensor0< T, Dim, i, j >, typename promote< T, double >::V, Dim, i, j > dd(const Tensor0< T * > &a, const Index< i, Dim > index1, const Index< j, Dim > index2, const Tensor1< int, Dim > &d_ijk, const Tensor1< double, Dim > &d_xyz)
Definition: ddTensor0.hpp:33
SmallStrainParaboloidalPlasticity::mu
double mu
Definition: SmallStrainPlasticityMaterialModels.hpp:170
SmallStrainJ2Plasticity::H
double H
Definition: SmallStrainPlasticityMaterialModels.hpp:42
SmallStrainPlasticity::ClosestPointProjection::ClosestPointProjection
ClosestPointProjection()
Definition: SmallStrainPlasticity.hpp:508
SmallStrainParaboloidalPlasticity::Hc
double Hc
Definition: SmallStrainPlasticityMaterialModels.hpp:173
SmallStrainPlasticity::ClosestPointProjection::a_h
adouble a_h
Definition: SmallStrainPlasticity.hpp:519
MoFEM::Exceptions::ierr
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
Definition: Exceptions.hpp:76
SmallStrainParaboloidalPlasticity::Ht
double Ht
Definition: SmallStrainPlasticityMaterialModels.hpp:173
SmallStrainJ2Plasticity::K
double K
Definition: SmallStrainPlasticityMaterialModels.hpp:43
SmallStrainParaboloidalPlasticity::sIgma_yc
double sIgma_yc
Definition: SmallStrainPlasticityMaterialModels.hpp:174
SmallStrainPlasticity::ClosestPointProjection::a_sTrain
ublas::vector< adouble > a_sTrain
Definition: SmallStrainPlasticity.hpp:517
SmallStrainJ2Plasticity::yieldFunction
virtual PetscErrorCode yieldFunction()
Evaluate yield function.
Definition: SmallStrainPlasticityMaterialModels.hpp:136
SmallStrainPlasticity::ClosestPointProjection::a_y
adouble a_y
Definition: SmallStrainPlasticity.hpp:519
SmallStrainJ2Plasticity::flowPotential
virtual PetscErrorCode flowPotential()
Associated flow potential.
Definition: SmallStrainPlasticityMaterialModels.hpp:148