v0.13.1
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++) {
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++) {
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
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
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
Definition: Exceptions.hpp:76
constexpr double t
plate stiffness
Definition: plate.cpp:59
J2 plasticity (Kinematic Isotropic (Linear) Hardening)
virtual PetscErrorCode freeHemholtzEnergy()
Available energy.
virtual PetscErrorCode flowPotential()
Associated flow potential.
virtual PetscErrorCode yieldFunction()
Evaluate yield function.
Small strain plasticity with paraboloidal yield criterion (Isotropic Hardening)
virtual PetscErrorCode yieldFunction()
Evaluate yield function.
virtual PetscErrorCode flowPotential()
Flow potential.
virtual PetscErrorCode freeHemholtzEnergy()
Available energy.
Small strain finite element implementation.