OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
druckerPragerPlasticitySM.h
Go to the documentation of this file.
1 /*
2  *
3  * ##### ##### ###### ###### ### ###
4  * ## ## ## ## ## ## ## ### ##
5  * ## ## ## ## #### #### ## # ##
6  * ## ## ## ## ## ## ## ##
7  * ## ## ## ## ## ## ## ##
8  * ##### ##### ## ###### ## ##
9  *
10  *
11  * OOFEM : Object Oriented Finite Element Code
12  *
13  * Copyright (C) 1993 - 2013 Borek Patzak
14  *
15  *
16  *
17  * Czech Technical University, Faculty of Civil Engineering,
18  * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19  *
20  * This library is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU Lesser General Public
22  * License as published by the Free Software Foundation; either
23  * version 2.1 of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28  * Lesser General Public License for more details.
29  *
30  * You should have received a copy of the GNU Lesser General Public
31  * License along with this library; if not, write to the Free Software
32  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33  */
34 
35 #ifndef druckerpragerplasticitysm_h
36 #define druckerpragerplasticitysm_h
37 
38 #include "floatarray.h"
39 #include "floatmatrix.h"
40 
41 #include "../sm/Materials/structuralms.h"
42 #include "../sm/Materials/structuralmaterial.h"
44 
46 
47 #define _IFT_DruckerPragerPlasticitySM_Name "druckerprager"
48 #define _IFT_DruckerPragerPlasticitySM_iys "iys"
49 #define _IFT_DruckerPragerPlasticitySM_alpha "alpha"
50 #define _IFT_DruckerPragerPlasticitySM_alphapsi "alphapsi"
51 #define _IFT_DruckerPragerPlasticitySM_ht "ht"
52 #define _IFT_DruckerPragerPlasticitySM_hm "hm"
53 #define _IFT_DruckerPragerPlasticitySM_kc "kc"
54 #define _IFT_DruckerPragerPlasticitySM_lys "lys"
55 #define _IFT_DruckerPragerPlasticitySM_yieldtol "yieldtol"
56 #define _IFT_DruckerPragerPlasticitySM_newtoniter "newtoniter"
57 
58 
59 namespace oofem {
66 {
67 public:
70 
71 protected:
75 
79 
81  double kappa;
82  double tempKappa;
83 
87 
88 public:
91 
94 
95  virtual void initTempStatus();
96  virtual void updateYourself(TimeStep *tStep);
97  virtual void printOutputAt(FILE *file, TimeStep *tStep);
98 
99  virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj = NULL);
100  virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj = NULL);
101 
102  virtual const char *giveClassName() const { return "DruckerPragerPlasticitySMStatus"; }
103 
109  {
110  answer = plasticStrainDeviator;
111  answer[0] += volumetricPlasticStrain;
112  answer[1] += volumetricPlasticStrain;
113  answer[2] += volumetricPlasticStrain;
114  }
129  double giveKappa() const { return kappa; }
134  int giveStateFlag() const { return state_flag; }
135 
141  {
142  answer = tempPlasticStrainDeviator;
143  answer[0] += tempVolumetricPlasticStrain;
144  answer[1] += tempVolumetricPlasticStrain;
145  answer[2] += tempVolumetricPlasticStrain;
146  }
161  double giveTempKappa() const { return tempKappa; }
166  int giveTempStateFlag() const { return temp_state_flag; }
167 
172  void letTempPlasticStrainDeviatorBe(const FloatArray &v) { tempPlasticStrainDeviator = v; }
177  void letTempVolumetricPlasticStrainBe(double v) { tempVolumetricPlasticStrain = v; }
182  void letTempKappaBe(double v) { tempKappa = v; }
187  void letTempStateFlagBe(int v) { temp_state_flag = v; }
188 };
189 
195 {
196 public:
199 
200 protected:
208  double kappaC;
216  double alpha;
218  double alphaPsi;
220  double kFactor;
221 
224 
226  double yieldTol;
229 
230 public:
232  DruckerPragerPlasticitySM(int n, Domain * d);
234  virtual ~DruckerPragerPlasticitySM();
235 
237 
238  virtual const char *giveClassName() const { return "DruckerPragerPlasticitySM"; }
239  virtual const char *giveInputRecordName() const { return _IFT_DruckerPragerPlasticitySM_Name; }
240 
241  virtual void giveRealStressVector_3d(FloatArray &answer,
242  GaussPoint *gp,
243  const FloatArray &strainVector,
244  TimeStep *tStep);
245 
246  virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer,
247  MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep);
248 
255  void performLocalStressReturn(GaussPoint *gp, const FloatArray &strain);
263  bool checkForVertexCase(double eM, double gM, double kM, double trialStressJTwo, double volumetricStress, double tempKappa);
270  void performRegularReturn(double eM, double gM, double kM, double trialStressJTwo, FloatArray &stressDeviator, double &volumetricStress, double &tempKappa);
277  void performVertexReturn(double eM, double gM, double kM, double trialStressJTwo, FloatArray &stressDeviator, double &volumetricStress, double &tempKappa, double volumetricElasticTrialStrain, double kappa);
286  double computeYieldValue(double meanStress,
287  double JTwo,
288  double kappa,
289  double eM) const;
296  virtual double computeYieldStressInShear(double kappa, double eM) const;
297 
304  virtual double computeYieldStressPrime(double kappa, double eM) const;
305 
313  void giveRegAlgorithmicStiffMatrix(FloatMatrix &answer,
314  MatResponseMode mode,
315  GaussPoint *gp,
316  TimeStep *tStep);
324  void giveVertexAlgorithmicStiffMatrix(FloatMatrix &answer,
325  MatResponseMode mode,
326  GaussPoint *gp,
327  TimeStep *tStep);
328 
329  virtual int giveIPValue(FloatArray &answer,
330  GaussPoint *gp,
331  InternalStateType type,
332  TimeStep *tStep);
333 
334  virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) { return false; }
335 
336  virtual void giveThermalDilatationVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
337  {
338  LEMaterial->giveThermalDilatationVector(answer, gp, tStep);
339  }
340 
341  virtual MaterialStatus *CreateStatus(GaussPoint *gp) const;
342 
343  virtual double predictRelativeComputationalCost(GaussPoint *gp);
344  virtual double predictRelativeRedistributionCost(GaussPoint *gp) { return 1.0; }
345 };
346 } // end namespace oofem
347 #endif // druckerpragerplasticitysm_h
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
GaussPoint * gp
Associated integration point.
Class and object Domain.
Definition: domain.h:115
#define _IFT_DruckerPragerPlasticitySM_Name
int newtonIter
Maximum number of iterations for stress return.
const FloatArray & givePlasticStrainDeviator() const
Get the plastic strain deviator from the material status.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
This class implements a structural material status information.
Definition: structuralms.h:65
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
const FloatArray & giveTempPlasticStrainDeviator() const
Get the temp value of the plastic strain deviator from the material status.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
virtual void giveThermalDilatationVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Returns a vector of coefficients of thermal dilatation in direction of each material principal (local...
double giveTempVolumetricPlasticStrain() const
Get the temp value of the volumetric strain deviator from the material status.
MatResponseMode
Describes the character of characteristic material matrix.
double limitYieldStress
Parameter of the exponential hardening law.
state_flag_values
Values of history variable state_flag.
double giveVolumetricPlasticStrain() const
Get the volumetric plastic strain from the material status.
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode)
Returns true if stiffness matrix of receiver is symmetric Default implementation returns true...
int giveTempStateFlag() const
Get the temp value of the state flag from the material status.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: matstatus.h:140
double kappaC
Parameter of the exponential laws.
This class implements an isotropic linear elastic material in a finite element problem.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
FloatArray plasticStrainDeviator
Deviatoric of plastic strain.
void letTempPlasticStrainDeviatorBe(const FloatArray &v)
Assign the temp value of deviatoric plastic strain.
state_flag_values
Values of history variable state_flag.
double giveTempKappa() const
Get the temp value of the hardening variable from the material status.
This class implements the material status associated to DruckerPragerPlasticitySM.
void givePlasticStrainVector(FloatArray &answer) const
Get the full plastic strain vector from the material status.
Abstract base class representing a material status information.
Definition: matstatus.h:84
void giveTempPlasticStrainVector(FloatArray &answer) const
Get the temp value of the full plastic strain vector from the material status.
Class representing vector of real numbers.
Definition: floatarray.h:82
virtual const char * giveInputRecordName() const
IsotropicLinearElasticMaterial * LEMaterial
Associated linear elastic material.
double hardeningModulus
Hardening modulus normalized with the elastic modulus, parameter of the linear hardening/softening la...
void letTempStateFlagBe(int v)
Assign the temp value of the state flag.
FloatArray strainVector
Equilibrated strain vector in reduced form.
Definition: structuralms.h:69
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
int hardeningType
Controls the hardening function in the yield stress: 1: linear hardening/softening with cutoff at zer...
double alpha
Friction coefficient, parameter of the yield criterion.
double kFactor
Scalar factor between rate of plastic multiplier and rate of hardening variable.
DruckerPragerPlasticitySMStatus(int n, Domain *d, GaussPoint *gp)
Constructor.
int giveStateFlag() const
Get the state flag from the material status.
Class representing the general Input Record.
Definition: inputrecord.h:101
This class implements a (local) nonassociated plasticity model based on the Drucker-Prager yield crit...
void letTempKappaBe(double v)
Assign the temp value of the hardening variable.
virtual const char * giveClassName() const
virtual void giveThermalDilatationVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Returns a vector of coefficients of thermal dilatation in direction of each material principal (local...
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Definition: contextmode.h:43
Abstract base class for all "structural" constitutive models.
double volumetricPlasticStrain
Volumetric plastic strain.
double alphaPsi
Dilatancy coefficient, parameter of the flow rule.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
the oofem namespace is to define a context or scope in which all oofem names are defined.
void letTempVolumetricPlasticStrainBe(double v)
Assign the temp value of volumetric plastic strain.
virtual double predictRelativeRedistributionCost(GaussPoint *gp)
Returns the relative redistribution cost of the receiver.
double initialYieldStress
Parameter of all three laws, this is the initial value of the yield stress in pure shear...
Class representing integration point in finite element program.
Definition: gausspoint.h:93
Class representing solution step.
Definition: timestep.h:80
double giveKappa() const
Get the hardening variable from the material status.
int state_flag
Indicates the state (i.e. elastic, yielding, vertex, unloading) of the Gauss point.

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:28 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011