GetFEM++  5.3
getfem_plasticity.h
Go to the documentation of this file.
1 /* -*- c++ -*- (enables emacs c++ mode) */
2 /*===========================================================================
3 
4  Copyright (C) 2002-2017 Konstantinos Poulios, Amandine Cottaz, Yves Renard
5 
6  This file is a part of GetFEM++
7 
8  GetFEM++ is free software; you can redistribute it and/or modify it
9  under the terms of the GNU Lesser General Public License as published
10  by the Free Software Foundation; either version 3 of the License, or
11  (at your option) any later version along with the GCC Runtime Library
12  Exception either version 3.1 or (at your option) any later version.
13  This program is distributed in the hope that it will be useful, but
14  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15  or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16  License and GCC Runtime Library Exception for more details.
17  You should have received a copy of the GNU Lesser General Public License
18  along with this program; if not, write to the Free Software Foundation,
19  Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
20 
21  As a special exception, you may use this file as it is a part of a free
22  software library without restriction. Specifically, if other files
23  instantiate templates or use macros or inline functions from this file,
24  or you compile this file and link it with other files to produce an
25  executable, this file does not by itself cause the resulting executable
26  to be covered by the GNU Lesser General Public License. This exception
27  does not however invalidate any other reasons why the executable file
28  might be covered by the GNU Lesser General Public License.
29 
30 ===========================================================================*/
31 
32 /**@file getfem_plasticity.h
33  @author Yves Renard <Yves.Renard@insa-lyon.fr>,
34  @author Julien Pommier <Julien.Pommier@insa-toulouse.fr>
35  @author Amandine Cottaz
36  @date June 2, 2010.
37  @brief Plasticty bricks.
38 */
39 #ifndef GETFEM_PLASTICITY_H__
40 #define GETFEM_PLASTICITY_H__
41 
42 #include "getfem_models.h"
44 #include "getfem_derivatives.h"
45 #include "getfem_interpolation.h"
46 #include "gmm/gmm_dense_qr.h"
47 
48 namespace getfem {
49 
50  enum plasticity_unknowns_type {
51  DISPLACEMENT_ONLY = 0,
52  DISPLACEMENT_AND_PLASTIC_MULTIPLIER = 1,
53  DISPLACEMENT_AND_PRESSURE = 2,
54  DISPLACEMENT_AND_PLASTIC_MULTIPLIER_AND_PRESSURE = 3
55  };
56 
57  //=================================================================
58  // Small strain Elastoplasticity Brick
59  //=================================================================
60 
61  /**
62  Adds a small strain plasticity term to the model `md`. This is the
63  main GetFEM++ brick for small strain plasticity. `lawname` is the name
64  of an implemented plastic law, `unknowns_type` indicates the choice
65  between a discretization where the plastic multiplier is an unknown of
66  the problem or (return mapping approach) just a data of the model
67  stored for the next iteration. Remember that in both cases, a multiplier
68  is stored anyway. `varnames` is a set of variable and data names with
69  length which may depend on the plastic law (at least the displacement,
70  the plastic multiplier and the plastic strain). `params` is a list of
71  expressions for the parameters (at least elastic coefficients and the
72  yield stress). These expressions can be some data names (or even
73  variable names) of the model but can also be any scalar valid expression
74  of the high level assembly language (such as "1/2", "2+sin(X[0])",
75  "1+Norm(v)" ...). The last two parameters optionally provided in
76  `params` are the `theta` parameter of the `theta`-scheme (generalized
77  trapezoidal rule) used for the plastic strain integration and the
78  time-step`dt`. The default value for `theta` if omitted is 1, which
79  corresponds to the classical Backward Euler scheme which is first order
80  consistent. `theta=1/2` corresponds to the Crank-Nicolson scheme
81  (trapezoidal rule) which is second order consistent. Any value
82  between 1/2 and 1 should be a valid value. The default value of `dt` is
83  'timestep' which simply indicates the time step defined in the model
84  (by md.set_time_step(dt)). Alternatively it can be any expression
85  (data name, constant value ...). The time step can be altered from one
86  iteration to the next one. `region` is a mesh region.
87 
88  The available plasticity laws are:
89 
90  - "Prandtl Reuss" (or "isotropic perfect plasticity").
91  Isotropic elasto-plasticity with no hardening. The variables are the
92  displacement, the plastic multiplier and the plastic strain.
93  The displacement should be a variable and have a corresponding data
94  having the same name preceded by "Previous_" corresponding to the
95  displacement at the previous time step (typically "u" and "Previous_u").
96  The plastic multiplier should also have two versions (typically "xi"
97  and "Previous_xi") the first one being defined as data if
98  `unknowns_type = DISPLACEMENT_ONLY` or as a variable if
99  `unknowns_type = DISPLACEMENT_AND_PLASTIC_MULTIPLIER`.
100  The plastic strain should represent a n x n data tensor field stored
101  on mesh_fem or (preferably) on an im_data (corresponding to `mim`).
102  The data are the first Lame coefficient, the second one (shear modulus)
103  and the uniaxial yield stress. IMPORTANT: Note that this law implements
104  the 3D expressions. If it is used in 2D, the expressions are just
105  transposed to the 2D. For the plane strain approximation, see below.
106  - "plane strain Prandtl Reuss"
107  (or "plane strain isotropic perfect plasticity")
108  The same law as the previous one but adapted to the plane strain
109  approximation. Can only be used in 2D.
110  - "Prandtl Reuss linear hardening"
111  (or "isotropic plasticity linear hardening").
112  Isotropic elasto-plasticity with linear isotropic and kinematic
113  hardening. An additional variable compared to "Prandtl Reuss" law:
114  the accumulated plastic strain. Similarly to the plastic strain, it
115  is only stored at the end of the time step, so a simple data is
116  required (preferably on an im_data).
117  Two additional parameters: the kinematic hardening modulus and the
118  isotropic one. 3D expressions only.
119  - "plane strain Prandtl Reuss linear hardening"
120  (or "plane strain isotropic plasticity linear hardening").
121  The same law as the previous one but adapted to the plane strain
122  approximation. Can only be used in 2D.
123 
124  See GetFEM++ user documentation for further explanations on the
125  discretization of the plastic flow and on the implemented plastic laws.
126  See also GetFEM++ user documentation on time integration strategy
127  (integration of transient problems).
128 
129  IMPORTANT : remember that `small_strain_elastoplasticity_next_iter` has
130  to be called at the end of each time step, before the next one
131  (and before any post-treatment : this sets the value of the plastic
132  strain and plastic multiplier).
133  */
135  (model &md, const mesh_im &mim,
136  std::string lawname, plasticity_unknowns_type unknowns_type,
137  const std::vector<std::string> &varnames,
138  const std::vector<std::string> &params,
139  size_type region = size_type(-1));
140 
141  /** Function that allows to pass from a time step to another for the
142  small strain plastic brick. The parameters have to be exactly the
143  same as the ones of the `add_small_strain_elastoplasticity_brick`,
144  so see the documentation of this function for any explanations.
145  Basically, this brick computes the plastic strain and the plastic
146  multiplier and stores them for the next step. Additionaly, it copies
147  the computed displacement to the data that stores the displacement
148  of the previous time step (typically "u" to "Previous_u").
149  It has to be called before any use of
150  `compute_small_strain_elastoplasticity_Von_Mises`.
151  */
153  (model &md, const mesh_im &mim,
154  std::string lawname, plasticity_unknowns_type unknowns_type,
155  const std::vector<std::string> &varnames,
156  const std::vector<std::string> &params,
157  size_type region = size_type(-1)) ;
158 
159  /** This function computes the Von Mises stress field with respect to
160  a small strain elastoplasticity term, approximated on `mf_vm`,
161  and stores the result into `VM`. All other parameters have to be
162  exactly the same as for `add_small_strain_elastoplasticity_brick`.
163  Remember that `small_strain_elastoplasticity_next_iter` has to be called
164  before any call of this function.
165  */
167  (model &md, const mesh_im &mim,
168  std::string lawname, plasticity_unknowns_type unknowns_type,
169  const std::vector<std::string> &varnames,
170  const std::vector<std::string> &params,
171  const mesh_fem &mf_vm, model_real_plain_vector &VM,
172  size_type region = size_type(-1));
173 
174 
175  //=================================================================
176  // Abstract contraints projection
177  //=================================================================
178 
179 
180  /** Abstract projection of a stress tensor onto a set of admissible
181  stress tensors.
182  */
184  protected :
185  size_type flag_hyp;
186 
187  public :
188  /* if flag_proj=0 the output will be Proj(tau)
189  * if flag_proj=1 the output will be gradProj(tau)
190  * no others values allowed for flag_proj
191  */
192  virtual void do_projection(const base_matrix& tau,
193  scalar_type stress_threshold,
194  base_matrix& proj,
195  size_type flag_proj) const = 0;
197  flag_hyp(flag_hyp_) {}
198  virtual ~abstract_constraints_projection () {}
199  };
200 
201  typedef std::shared_ptr<const abstract_constraints_projection>
202  pconstraints_projection;
203 
204  //=================================================================
205  // Von Mises projection
206  //=================================================================
207 
208 
209  /** Von Mises projection */
211 
212  /* used to compute the projection */
213  template<typename MAT>
214  void tau_m_Id(const MAT& tau, MAT &taumid) const {
215  scalar_type trace = gmm::mat_trace(tau);
216  size_type size_of_tau = gmm::mat_nrows(tau);
217  gmm::copy(gmm::identity_matrix(),taumid);
218  gmm::scale(taumid, trace / scalar_type(size_of_tau));
219  }
220 
221  /* used to compute the projection */
222  template<typename MAT>
223  void tau_d(const MAT& tau, MAT &taud) const {
224  tau_m_Id(tau, taud);
225  gmm::scale(taud, scalar_type(-1));
226  gmm::add(tau, taud);
227  }
228 
229 
230  public :
231 
232  /** the Von Mises projection computation */
233  /* on input : tau matrix, on output : the projection of tau */
234  virtual void do_projection(const base_matrix& tau,
235  scalar_type stress_threshold,
236  base_matrix& proj,
237  size_type flag_proj) const {
238 
239  /* be sure that flag_proj has a correct value */
240  GMM_ASSERT1(flag_proj == 0 || flag_proj ==1,
241  "wrong value for the projection flag, "
242  "must be 0 or 1 ");
243 
244  /* be sure that stress_threshold has a correct value */
245  GMM_ASSERT1(stress_threshold>=0., "s is not a positive number "
246  << stress_threshold << ". You need to set "
247  << "s as a positive number");
248 
249  size_type N = gmm::mat_nrows(tau);
250  size_type projsize = (flag_proj == 0) ? N : gmm::sqr(N);
251  scalar_type normtaud;
252 
253  /* calculate tau_m*Id */
254  base_matrix taumId(N, N);
255  tau_m_Id(tau, taumId);
256 
257  // calcul du deviateur de tau, taud
258  base_matrix taud(N,N);
259  gmm::add(gmm::scaled(taumId, scalar_type(-1)), tau, taud);
260 
261  /* plane constraints */
262  if (flag_hyp == 1) { // To be done ...
263  N /= 2;
264  GMM_ASSERT1(!N, "wrong value for CALCULATION HYPOTHESIS, "
265  "must be /=1 SINCE n/=2");
266  // we form the 3D tau tensor considering
267  // that tau(3,j)=tau(i,3)=0
268  base_matrix tau_aux(3,3); gmm::clear(tau_aux);
269  gmm::copy(tau,gmm::sub_matrix
270  (tau_aux,gmm::sub_interval(0,2)));
271  // we calculate tau deviator and its norms
272  base_matrix taud_aux(3,3);
273  tau_d(tau_aux, taud_aux);
274  normtaud=gmm::mat_euclidean_norm(taud_aux);
275  }
276  else normtaud=gmm::mat_euclidean_norm(taud);
277 
278 
279  /* dimension and initialization of proj matrix or
280  its derivative */
281  gmm::resize(proj, projsize, projsize);
282 
283  if (normtaud <= stress_threshold) {
284  switch(flag_proj) {
285  case 0: gmm::copy(tau, proj); break;
286  case 1: gmm::copy(gmm::identity_matrix(), proj); break;
287  }
288  }
289  else {
290  switch(flag_proj) {
291  case 0:
292  gmm::copy(gmm::scaled(taud, stress_threshold/normtaud),
293  proj);
294  gmm::add(taumId,proj);
295  break;
296  case 1:
297  base_matrix Igrad(projsize, projsize);
298  gmm::copy(gmm::identity_matrix(),Igrad);
299  base_matrix Igrad2(projsize, projsize);
300 
301  // build vector[1 0 0 1 0 0 1...] to be copied in certain
302  // columns of Igrad(*)Igrad
303  base_vector aux(projsize);
304  for (size_type i=0; i < N; ++i)
305  aux[i*N + i] = scalar_type(1);
306 
307  // Copy in a selection of columns of Igrad(*)Igrad
308  for (size_type i=0; i < N; ++i)
309  gmm::copy(aux, gmm::mat_col(Igrad2, i*N + i));
310 
311  // Compute Id_grad
312  base_matrix Id_grad(projsize, projsize);
313  scalar_type rr = scalar_type(1)/scalar_type(N);
314  gmm::copy(gmm::scaled(Igrad2, -rr), Id_grad);
315  gmm::add(Igrad, Id_grad);
316 
317 
318  // Compute ngrad(*)ngrad
319  base_matrix ngrad2(projsize, projsize);
320  // Compute the normal n
321  base_matrix un(N, N);
322  gmm::copy(gmm::scaled(taud, 1./normtaud),un);
323 
324  // Copy of the normal in a column vector
325  // in the Fortran order
326  std::copy(un.begin(), un.end(), aux.begin());
327 
328  // Loop on the columns of ngrad(*)ngrad
329  for (size_type j=0; j < projsize; ++j)
330  gmm::copy(gmm::scaled(aux,aux[j]),
331  gmm::mat_col(ngrad2,j));
332 
333 
334  // Final computation of the projection gradient
335  gmm::copy(gmm::identity_matrix(), proj);
336  gmm::add(gmm::scaled(ngrad2, scalar_type(-1)), proj);
337  base_matrix aux2(projsize, projsize);
338  gmm::copy(gmm::scaled(proj, stress_threshold/normtaud),
339  aux2);
340  gmm::mult(aux2,Id_grad,proj);
341  gmm::add(gmm::scaled(Igrad2, rr),proj);
342  break;
343  }
344  }
345  }
346 
347 
348  VM_projection(size_type flag_hyp_ = 0) :
349  abstract_constraints_projection (flag_hyp_) {}
350  };
351 
352 
353  // Finite strain elastoplasticity
354 
355  /** Add a linear function with the name specified by `name` to represent
356  linear isotropoc hardening in plasticity with initial yield limit
357  `sigma_y0` and hardening modulus `H`.
358  A true value of the `frobenius` argument will express the hardening
359  function in terms of Frobenius norms both for the strain input and
360  the stress output, instead of the corresponding Von-Mises quantities.
361  */
363  (const std::string &name, scalar_type sigma_y0, scalar_type H, bool frobenius=true);
364 
365  /** Add a Ramberg-Osgood hardening function with the name specified by
366  `name`, for reference stress and strain given by `sigma_ref` and
367  `eps_ref` respectively and for a hardening exponent `n`.
368  A true value of the `frobenius` argument will express the hardening
369  function in terms of Frobenius norms both for the strain input and
370  the stress output, instead of the corresponding Von-Mises quantities.
371  */
373  (const std::string &name,
374  scalar_type sigma_ref, scalar_type eps_ref, scalar_type n,
375  bool frobenius=false);
376 
377  /** Add a Ramberg-Osgood hardening function with the name specified by
378  `name`, for reference stress `sigma_ref`, Young's modulus `E`,
379  offset parameter `alpha` and hardening parameter `n`.
380  A true value of the `frobenius` argument will express the hardening
381  function in terms of Frobenius norms both for the strain input and
382  the stress output, instead of the corresponding Von-Mises quantities.
383  */
385  (const std::string &name, scalar_type sigma_ref, scalar_type E,
386  scalar_type alpha, scalar_type n, bool frobenius=false) {
388  (name, sigma_ref, alpha*sigma_ref/E, n, frobenius);
389  }
390 
391  /** Add a finite strain elastoplasticity brick to the model.
392  For the moment there is only one supported law defined through
393  `lawname` as "Simo_Miehe".
394  This law supports to possibilities of unknown variables to solve for
395  defined by means of `unknowns_type` set to either
396  `DISPLACEMENT_AND_PLASTIC_MULTIPLIER` or
397  `DISPLACEMENT_AND_PLASTIC_MULTIPLIER_AND_PRESSURE`
398  The "Simo_Miehe" law expects as `varnames` a vector of
399  the following names that have to be defined as variables in the
400  model:
401  - the displacement variable which has to be defined as an unknown,
402  - the plastic multiplier which has also defined as an unknown,
403  - optionally the pressure variable for a mixed displacement-pressure
404  formulation for `DISPLACEMENT_AND_PLASTIC_MULTIPLIER_AND_PRESSURE`
405  as `unknowns_type`,
406  - the name of a (scalar) fem_data or im_data field that holds the
407  plastic strain at the previous time step, and
408  - the name of a fem_data or im_data field that holds all
409  non-repeated components of the inverse of the plastic right
410  Cauchy-Green tensor at the previous time step
411  (it has to be a 4 element vector for plane strain 2D problems
412  and a 6 element vector for 3D problems).
413  The "Simo_Miehe" law also expects as `params` a vector of
414  the following three parameters:
415  - an expression for the initial bulk modulus K,
416  - an expression for the initial shear modulus G,
417  - the name of a user predefined function that decribes
418  the yield limit as a function of the hardening variable
419  (both the yield limit and the hardening variable values are
420  assumed to be Frobenius norms of appropriate stress and strain
421  tensors, respectively),
422  */
424  (model &md, const mesh_im &mim,
425  std::string lawname, plasticity_unknowns_type unknowns_type,
426  const std::vector<std::string> &varnames,
427  const std::vector<std::string> &params,
428  size_type region = size_type(-1));
429 
430  /** This function permits to update the state variables for a finite
431  strain elastoplasticity brick, based on the current displacements
432  and plastic multiplier fields (optionally also the the pressure field
433  in the case of a mixed displacement-pressure formulation).
434  The parameters have to be exactly the same as the ones of the
435  `add_finite_strain_elastoplasticity_brick`, so see the documentation
436  of this function for any explanations.
437  Basically, `varnames` contains both the names of the input fields as
438  well as the names of the fields to be updated.
439  */
441  (model &md, const mesh_im &mim,
442  std::string lawname, plasticity_unknowns_type unknowns_type,
443  const std::vector<std::string> &varnames,
444  const std::vector<std::string> &params,
445  size_type region = size_type(-1));
446 
447  /** This function computes the Von Mises stress field with respect to
448  a finite strain elastoplasticity term, approximated on `mf_vm`,
449  and stores the result into `VM`. All other parameters have to be
450  exactly the same as for `add_finite_strain_elastoplasticity_brick`.
451  */
453  (model &md, const mesh_im &mim,
454  std::string lawname, plasticity_unknowns_type unknowns_type,
455  const std::vector<std::string> &varnames,
456  const std::vector<std::string> &params,
457  const mesh_fem &mf_vm, model_real_plain_vector &VM,
458  size_type region = size_type(-1));
459 
460 
461 
462  //=================================================================
463  //
464  // Old version of an elastoplasticity Brick for isotropic perfect
465  // plasticity with the low level generic assembly.
466  // Particularity of this brick: the flow rule is integrated on
467  // finite element nodes (not on Gauss points).
468  //
469  //=================================================================
470 
471 
472  /** Add a nonlinear elastoplasticity term to the model for small
473  deformations and an isotropic material, with respect
474  to the variable `varname`.
475  Note that the constitutive lawtype of projection
476  to be used is described by `ACP` which should not be
477  freed while the model is used.
478  `datalambda` and `datamu` describe the Lamé coeffcients
479  of the studied material. Could be scalar or vector fields
480  described on a finite element method.
481  `datathreshold` represents the elasticity threshold
482  of the material. It could be a scalar or a vector field
483  described on the same finite element method as
484  the Lamé coefficients.
485  `datasigma` represents the stress constraints values
486  supported by the material. It should be a vector field
487  described on a finite element method.
488  `previous_dep_name` represents the displacement at the previous time step.
489  Moreover, if `varname` is described
490  onto a K-th order mesh_fem, `datasigma` has to be described
491  on a mesh_fem of order at least K-1.
492  */
494  const mesh_im &mim,
495  const pconstraints_projection &ACP,
496  const std::string &varname,
497  const std::string &previous_dep_name,
498  const std::string &datalambda,
499  const std::string &datamu,
500  const std::string &datathreshold,
501  const std::string &datasigma,
502  size_type region = size_type(-1));
503 
504  /** This function permits to compute the new stress constraints
505  values supported by the material after a load or an unload.
506  `varname` is the main unknown of the problem
507  (the displacement),
508  `previous_dep_name` represents the displacement at the previous time step,
509  `ACP` is the type of projection to be used that could only be
510  `Von Mises` for the moment,
511  `datalambda` and `datamu` are the Lamé coefficients
512  of the material,
513  `datathreshold` is the elasticity threshold of the material,
514  `datasigma` is the vector which will contains the new
515  computed values. */
517  const mesh_im &mim,
518  const std::string &varname,
519  const std::string &previous_dep_name,
520  const pconstraints_projection &ACP,
521  const std::string &datalambda,
522  const std::string &datamu,
523  const std::string &datathreshold,
524  const std::string &datasigma);
525 
526  /** This function computes on mf_vm the Von Mises or Tresca stress
527  of a field for elastoplasticity and return it into the vector VM.
528  Note that `datasigma` should be the vector containing the new
529  stress constraints values, i.e. after a load or an unload
530  of the material. If `tresca` = 'true', the Tresca stress will
531  be computed, otherwise it will be the Von Mises one.*/
533  (model &md,
534  const std::string &datasigma,
535  const mesh_fem &mf_vm,
536  model_real_plain_vector &VM,
537  bool tresca);
538 
539  /** This function computes on mf_pl the plastic part, that could appear
540  after a load and an unload, into the vector `plast`.
541  Note that `datasigma` should be the vector containing the new
542  stress constraints values, i.e. after a load or an unload
543  of the material. */
544  void compute_plastic_part(model &md,
545  const mesh_im &mim,
546  const mesh_fem &mf_pl,
547  const std::string &varname,
548  const std::string &previous_dep_name,
549  const pconstraints_projection &ACP,
550  const std::string &datalambda,
551  const std::string &datamu,
552  const std::string &datathreshold,
553  const std::string &datasigma,
554  model_real_plain_vector &plast);
555 
556 
557 
558 } /* namespace getfem */
559 
560 #endif
size_type add_small_strain_elastoplasticity_brick(model &md, const mesh_im &mim, std::string lawname, plasticity_unknowns_type unknowns_type, const std::vector< std::string > &varnames, const std::vector< std::string > &params, size_type region=size_type(-1))
Adds a small strain plasticity term to the model md.
void finite_strain_elastoplasticity_next_iter(model &md, const mesh_im &mim, std::string lawname, plasticity_unknowns_type unknowns_type, const std::vector< std::string > &varnames, const std::vector< std::string > &params, size_type region=size_type(-1))
This function permits to update the state variables for a finite strain elastoplasticity brick...
Dense QR factorization.
void small_strain_elastoplasticity_next_iter(model &md, const mesh_im &mim, std::string lawname, plasticity_unknowns_type unknowns_type, const std::vector< std::string > &varnames, const std::vector< std::string > &params, size_type region=size_type(-1))
Function that allows to pass from a time step to another for the small strain plastic brick...
void compute_elastoplasticity_Von_Mises_or_Tresca(model &md, const std::string &datasigma, const mesh_fem &mf_vm, model_real_plain_vector &VM, bool tresca)
This function computes on mf_vm the Von Mises or Tresca stress of a field for elastoplasticity and re...
virtual void do_projection(const base_matrix &tau, scalar_type stress_threshold, base_matrix &proj, size_type flag_proj) const
the Von Mises projection computation
Describe an integration method linked to a mesh.
Von Mises projection.
``Model&#39;&#39; variables store the variables, the data and the description of a model. ...
size_t size_type
used as the common size type in the library
Definition: bgeot_poly.h:49
void compute_plastic_part(model &md, const mesh_im &mim, const mesh_fem &mf_pl, const std::string &varname, const std::string &previous_dep_name, const pconstraints_projection &ACP, const std::string &datalambda, const std::string &datamu, const std::string &datathreshold, const std::string &datasigma, model_real_plain_vector &plast)
This function computes on mf_pl the plastic part, that could appear after a load and an unload...
Model representation in Getfem.
Interpolation of fields from a mesh_fem onto another.
void ga_define_Ramberg_Osgood_hardening_function(const std::string &name, scalar_type sigma_ref, scalar_type eps_ref, scalar_type n, bool frobenius=false)
Add a Ramberg-Osgood hardening function with the name specified by name, for reference stress and str...
size_type add_finite_strain_elastoplasticity_brick(model &md, const mesh_im &mim, std::string lawname, plasticity_unknowns_type unknowns_type, const std::vector< std::string > &varnames, const std::vector< std::string > &params, size_type region=size_type(-1))
Add a finite strain elastoplasticity brick to the model.
Abstract projection of a stress tensor onto a set of admissible stress tensors.
GEneric Tool for Finite Element Methods.
void elastoplasticity_next_iter(model &md, const mesh_im &mim, const std::string &varname, const std::string &previous_dep_name, const pconstraints_projection &ACP, const std::string &datalambda, const std::string &datamu, const std::string &datathreshold, const std::string &datasigma)
This function permits to compute the new stress constraints values supported by the material after a ...
Describe a finite element method linked to a mesh.
void compute_small_strain_elastoplasticity_Von_Mises(model &md, const mesh_im &mim, std::string lawname, plasticity_unknowns_type unknowns_type, const std::vector< std::string > &varnames, const std::vector< std::string > &params, const mesh_fem &mf_vm, model_real_plain_vector &VM, size_type region=size_type(-1))
This function computes the Von Mises stress field with respect to a small strain elastoplasticity ter...
size_type add_elastoplasticity_brick(model &md, const mesh_im &mim, const pconstraints_projection &ACP, const std::string &varname, const std::string &previous_dep_name, const std::string &datalambda, const std::string &datamu, const std::string &datathreshold, const std::string &datasigma, size_type region=size_type(-1))
Add a nonlinear elastoplasticity term to the model for small deformations and an isotropic material...
void compute_finite_strain_elastoplasticity_Von_Mises(model &md, const mesh_im &mim, std::string lawname, plasticity_unknowns_type unknowns_type, const std::vector< std::string > &varnames, const std::vector< std::string > &params, const mesh_fem &mf_vm, model_real_plain_vector &VM, size_type region=size_type(-1))
This function computes the Von Mises stress field with respect to a finite strain elastoplasticity te...
Generic assembly implementation.
Compute the gradient of a field on a getfem::mesh_fem.
void ga_define_linear_hardening_function(const std::string &name, scalar_type sigma_y0, scalar_type H, bool frobenius=true)
Add a linear function with the name specified by name to represent linear isotropoc hardening in plas...