xc
DruckerPrager.h
1 // -*-c++-*-
2 //----------------------------------------------------------------------------
3 // XC program; finite element analysis code
4 // for structural analysis and design.
5 //
6 // Copyright (C) Luis C. Pérez Tato
7 //
8 // This program derives from OpenSees <http://opensees.berkeley.edu>
9 // developed by the «Pacific earthquake engineering research center».
10 //
11 // Except for the restrictions that may arise from the copyright
12 // of the original program (see copyright_opensees.txt)
13 // XC is free software: you can redistribute it and/or modify
14 // it under the terms of the GNU General Public License as published by
15 // the Free Software Foundation, either version 3 of the License, or
16 // (at your option) any later version.
17 //
18 // This software is distributed in the hope that it will be useful, but
19 // WITHOUT ANY WARRANTY; without even the implied warranty of
20 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 // GNU General Public License for more details.
22 //
23 //
24 // You should have received a copy of the GNU General Public License
25 // along with this program.
26 // If not, see <http://www.gnu.org/licenses/>.
27 /* ****************************************************************** **
28 ** OpenSees - Open System for Earthquake Engineering Simulation **
29 ** Pacific Earthquake Engineering Research Center **
30 ** **
31 ** **
32 ** (C) Copyright 1999, The Regents of the University of California **
33 ** All Rights Reserved. **
34 ** **
35 ** Commercial use of this program without express permission of the **
36 ** University of California, Berkeley, is strictly prohibited. See **
37 ** file 'COPYRIGHT' in main directory for information on usage and **
38 ** redistribution, and for a DISCLAIMER OF ALL WARRANTIES. **
39 ** **
40 ** Developed by: **
41 ** Frank McKenna (fmckenna@ce.berkeley.edu) **
42 ** Gregory L. Fenves (fenves@ce.berkeley.edu) **
43 ** Filip C. Filippou (filippou@ce.berkeley.edu) **
44 ** **
45 ** **
46 ** **
47 ** **
48 ** ****************************************************************** */
49 
50 #ifndef DruckerPrager_h
51 #define DruckerPrager_h
52 
53 // $Revision: 1.1 $
54 // $Date: 2010-02-04 00:44:04 $
55 // $Source: /usr/local/cvs/OpenSees/SRC/material/nD/DruckerPrager.h,v $
56 
57 // Written: Kathryn Petek, Peter Mackenzie-Helnwein, and Pedro Arduino
58 // Created: 12/04
59 //
60 // Description: This file contains the class definition for DruckerPrager.
61 //
62 
63 #include <material/nD/NDMaterial.h>
64 #include <utility/matrix/Vector.h>
65 #include <utility/matrix/Matrix.h>
66 
67 
68 namespace XC {
72 //
74 //
77  {
78  protected:
79 
80  //material parameters
81  double mKref;
82  double mGref;
83  double mPatm;
84  double mK;
85  double mG;
86  double msigma_y;
87  double mrho;
88  double mrho_bar;
89  double mKinf;
90  double mKo;
91  double mdelta1;
92  double mdelta2;
93  double mHard;
94  double mtheta;
95  double mTo;
96 
97  double massDen;
98 
99  //internal variables
100  Vector mEpsilon;
103  Vector mSigma;
104 
107 
108  double mHprime;
109 
110  double mAlpha1_n;
111  double mAlpha1_n1;
112  double mAlpha2_n;
113  double mAlpha2_n1;
114 
116  int mFlag;
117 
123 
125 
126  //functions
127  int updateElasticParam(void); //updated Elastic Parameters based on mean stress
128 
129  //plasticity integration routine
130  void plastic_integrator(void);
131 
132  double Kiso(double alpha1); // isotropic hardening function
133  double Kisoprime(double alpha1); //
134  double T(double alpha2);
135  double deltaH(double dGamma);
136 
137 
138  //parameters
139  const double one3= 1.0 / 3.0 ;
140  const double two3= 2.0 / 3.0 ;
141  const double root23= sqrt(2.0/3.0) ;
142  public:
143  DruckerPrager(int tag, int classTag);
144  DruckerPrager(int tag, int classTag, double bulk, double shear,
145  double s_y, double r, double r_bar, double Kinfinity, double Kinit,
146  double d1, double d2, double H, double t, double massDen = 0.0, double atm = 101.325e3);
147 
148  // Elastic Constructor
149  // DruckerPrager(int tag, double bulk, double shear);
150 
151  ~DruckerPrager();
152 
153  NDMaterial *getCopy(const std::string &type) const;
154 
155  int getMaterialStage(void) const;
156  void updateMaterialStage(int);
157  int commitState(void);
158  int revertToLastCommit(void);
159  int revertToStart(void);
160 
161  NDMaterial *getCopy(void) const;
162  const std::string &getType(void) const;
163  int getOrder(void) const;
164  const Vector &getInitialGeneralizedStrain(void) const;
165  void setInitialGeneralizedStrain(const Vector &);
166 
167  Response *setResponse(const std::vector<std::string> &argv, Information &matInfo);
168  int getResponse (int responseID, Information &matInformation);
169  const Vector &getState(void) const;
170  Matrix getValues(const std::string &, bool silent= false) const;
171 
172  int sendSelf(Communicator &);
173  int recvSelf(const Communicator &);
174 
175  void Print(std::ostream &, int flag =0) const;
176 
177  int setParameter(const std::vector<std::string> &, Parameter &);
178  int updateParameter(int parameterID, Information &info);
179 
180  void computeMTo(void);
181  void initialize(); // initializes variables
182  void setup(const int &elastFlag= 2);
183 
184  // Density.
185  double getRho(void) const;
186  void setRho(const double &r);
187  // Bulk modulus.
188  double getBulkModulus(void) const;
189  void setBulkModulus(const double &);
190  // Shear modulus.
191  double getShearModulus(void) const;
192  void setShearModulus(const double &);
193  // Reference pressure.
194  double getReferencePressure(void) const;
195  void setReferencePressure(const double &);
196  // Yield stress.
197  double getYieldStress(void) const;
198  void setYieldStress(const double &);
199  // Failure surface and associativity. Volumetric term.
200  double getFailureSurfaceRho(void) const;
201  void setFailureSurfaceRho(const double &);
202  // Failure surface and associativity. Nonassociative flow term.
203  double getFailureSurfaceRhoBar(void) const;
204  void setFailureSurfaceRhoBar(const double &);
205  // Isotropic hardening.
206  double getIsotropicHardeningKinf(void) const;
207  void setIsotropicHardeningKinf(const double &);
208  double getIsotropicHardeningKo(void) const;
209  void setIsotropicHardeningKo(const double &);
210  double getIsotropicHardeningDelta(void) const;
211  void setIsotropicHardeningDelta(const double &);
212  // Kinematic hardening.
213  double getKinematicHardeningH(void) const;
214  void setKinematicHardeningH(const double &);
215  double getKinematicHardeningTheta(void) const;
216  void setKinematicHardeningTheta(const double &);
217  // Tension softening.
218  double getTensionSofteningDelta(void) const;
219  void setTensionSofteningDelta(const double &);
220  double getMTo(void) const;
221  void setMTo(const double &);
222  };
223 } // end XC namespace
224 
225 
226 #endif
Vector mState
state vector for output
Definition: DruckerPrager.h:124
Vector mBeta_n1
backstress at step n+1
Definition: DruckerPrager.h:106
Matrix mCep
elastoplastic tangent stiffness matrix
Definition: DruckerPrager.h:119
Matrix mIIdev
4th Order Deviatoric Tensor
Definition: DruckerPrager.h:122
double getKinematicHardeningH(void) const
Kinematic hardening. Get H.
Definition: DruckerPrager.cpp:292
Float vector abstraction.
Definition: Vector.h:94
double mrho_bar
nonassociative flow term (failure surface and associativity)
Definition: DruckerPrager.h:88
Definition: setup.py:1
double mG
shear modulus
Definition: DruckerPrager.h:85
Matrix mCe
elastic tangent stiffness matrix
Definition: DruckerPrager.h:118
Vector mBeta_n
backstress at step n, beta_np1_trial = beta_n
Definition: DruckerPrager.h:105
void updateMaterialStage(int)
Update material stage.
Definition: DruckerPrager.cpp:913
~DruckerPrager()
Destructor.
Definition: DruckerPrager.cpp:120
double mAlpha1_n
alpha1_n
Definition: DruckerPrager.h:110
Information about an element.
Definition: Information.h:81
void setKinematicHardeningH(const double &)
Kinematic hardening. Set H.
Definition: DruckerPrager.cpp:295
Communication parameters between processes.
Definition: Communicator.h:66
Base class response objects.
Definition: Response.h:81
void setYieldStress(const double &)
set yield stress.
Definition: DruckerPrager.cpp:253
double getYieldStress(void) const
get yield stress.
Definition: DruckerPrager.cpp:249
void setFailureSurfaceRhoBar(const double &)
Failure surface and associativity. Set nonassociative flow term.
Definition: DruckerPrager.cpp:269
void setShearModulus(const double &)
set shear modulus.
Definition: DruckerPrager.cpp:237
int revertToStart(void)
Revert the material to its initial state.
Definition: DruckerPrager.cpp:333
void Print(std::ostream &, int flag=0) const
Print stuff.
Definition: DruckerPrager.cpp:1106
Vector mEpsilon_n_p
plastic strain vector at step n, trail e_p
Definition: DruckerPrager.h:101
double getReferencePressure(void) const
get reference pressure.
Definition: DruckerPrager.cpp:241
double mAlpha1_n1
alpha1_n+1
Definition: DruckerPrager.h:111
double getBulkModulus(void) const
get bulk modulus.
Definition: DruckerPrager.cpp:225
double mPatm
reference stress first invariant (pressure)
Definition: DruckerPrager.h:83
int mElastFlag
Flag to determine elastic behavior 0 = elastic+no param update; 1 = elastic+param update; 2 = elastop...
Definition: DruckerPrager.h:115
double getFailureSurfaceRho(void) const
Failure surface and associativity. Get volumetric term.
Definition: DruckerPrager.cpp:257
int sendSelf(Communicator &)
Send the object.
Definition: DruckerPrager.cpp:970
double getIsotropicHardeningKo(void) const
Isotropic hardening. Get Ko.
Definition: DruckerPrager.cpp:279
int updateParameter(int parameterID, Information &info)
Updates the parameter identified by parameterID with info.
Definition: DruckerPrager.cpp:925
double msigma_y
yield stress
Definition: DruckerPrager.h:86
Drucker-Prager material.
Definition: DruckerPrager.h:76
void setTensionSofteningDelta(const double &)
Set tension softening delta.
Definition: DruckerPrager.cpp:308
double massDen
density
Definition: DruckerPrager.h:97
Vector mI1
2nd Order Identity Tensor
Definition: DruckerPrager.h:120
double getMTo(void) const
Get mTo.
Definition: DruckerPrager.cpp:312
Matrix mIIvol
IIvol = I1 tensor I1.
Definition: DruckerPrager.h:121
const Vector & getInitialGeneralizedStrain(void) const
Return the initial strain.
Definition: DruckerPrager.cpp:378
double mHard
isotropic hardening constant
Definition: DruckerPrager.h:93
double mtheta
isotropic hardening constant
Definition: DruckerPrager.h:94
Vector mEpsilon_n1_p
plastic strain vector at step n+1
Definition: DruckerPrager.h:102
double mKref
reference Bulk Modulus
Definition: DruckerPrager.h:81
void setFailureSurfaceRho(const double &)
Failure surface and associativity. Set volumetric term.
Definition: DruckerPrager.cpp:261
double mAlpha2_n1
alpha2_n+1
Definition: DruckerPrager.h:113
double mTo
initial tension cutoff strength
Definition: DruckerPrager.h:95
double mrho
volumetric term (failure surface and associativity)
Definition: DruckerPrager.h:87
double mdelta1
exponential hardening term for Drucker-Prager surface
Definition: DruckerPrager.h:91
void setReferencePressure(const double &)
set reference pressure.
Definition: DruckerPrager.cpp:245
void setMTo(const double &)
Set tension softening delta.
Definition: DruckerPrager.cpp:315
double mdelta2
Tension softening. Exponential hardening term for tension cutoff surface.
Definition: DruckerPrager.h:92
double mK
bulk modulus
Definition: DruckerPrager.h:84
double getKinematicHardeningTheta(void) const
Kinematic hardening. Get theta.
Definition: DruckerPrager.cpp:298
int commitState(void)
Commit the state of the material.
Definition: DruckerPrager.cpp:319
double getIsotropicHardeningDelta(void) const
Isotropic hardening. Get delta1.
Definition: DruckerPrager.cpp:285
const Vector & getState(void) const
Return vector of state variables for output.
Definition: DruckerPrager.cpp:799
double getShearModulus(void) const
get shear modulus.
Definition: DruckerPrager.cpp:233
void plastic_integrator(void)
Plasticity integration routine.
Definition: DruckerPrager.cpp:394
double mGref
reference Shear Modulus
Definition: DruckerPrager.h:82
int recvSelf(const Communicator &)
Receive the object.
Definition: DruckerPrager.cpp:1036
void setIsotropicHardeningKo(const double &)
Isotropic hardening. Set Ko.
Definition: DruckerPrager.cpp:282
double mKinf
nonlinear isotropic hardening term
Definition: DruckerPrager.h:89
void setIsotropicHardeningDelta(const double &)
Isotropic hardening. Set delsta1.
Definition: DruckerPrager.cpp:288
Base class for 2D and 3D materials.
Definition: NDMaterial.h:101
int getMaterialStage(void) const
return the material stage (0:elastic 1:plastic).
Definition: DruckerPrager.cpp:908
void setKinematicHardeningTheta(const double &)
Kinematic hardening. Set theta.
Definition: DruckerPrager.cpp:301
NDMaterial * getCopy(void) const
Virtual constructor.
Definition: DruckerPrager.cpp:348
double getIsotropicHardeningKinf(void) const
Isotropic hardening. Get Kinf.
Definition: DruckerPrager.cpp:273
double getTensionSofteningDelta(void) const
Get tension softening delta.
Definition: DruckerPrager.cpp:305
int setParameter(const std::vector< std::string > &, Parameter &)
Sets the value param to the parameter argv.
Definition: DruckerPrager.cpp:861
int getResponse(int responseID, Information &matInformation)
Returns material response.
Definition: DruckerPrager.cpp:838
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:35
void setIsotropicHardeningKinf(const double &)
Isotropic hardening. Set Kinf.
Definition: DruckerPrager.cpp:276
double mAlpha2_n
alpha2_n
Definition: DruckerPrager.h:112
double getRho(void) const
get density.
Definition: DruckerPrager.cpp:217
void setRho(const double &r)
set density.
Definition: DruckerPrager.cpp:221
void setBulkModulus(const double &)
set bulk modulus.
Definition: DruckerPrager.cpp:229
Matrix getValues(const std::string &, bool silent=false) const
Returns material response.
Definition: DruckerPrager.cpp:805
Matrix of floats.
Definition: Matrix.h:111
Parameter.
Definition: Parameter.h:68
double getFailureSurfaceRhoBar(void) const
Failure surface and associativity. Get nonassociative flow term.
Definition: DruckerPrager.cpp:265
void computeMTo(void)
Compute derived quantities.
Definition: DruckerPrager.cpp:54
void setInitialGeneralizedStrain(const Vector &)
Sets the initial strain value.
Definition: DruckerPrager.cpp:384
double mHprime
derivative of linear kinematic hardening term
Definition: DruckerPrager.h:108
double mKo
nonlinear isotropic hardening term
Definition: DruckerPrager.h:90