XC Open source finite element analysis program
DruckerPrager.h
1 //----------------------------------------------------------------------------
2 // XC program; finite element analysis code
3 // for structural analysis and design.
4 //
5 // Copyright (C) Luis Claudio Pérez Tato
6 //
7 // This program derives from OpenSees <http://opensees.berkeley.edu>
8 // developed by the «Pacific earthquake engineering research center».
9 //
10 // Except for the restrictions that may arise from the copyright
11 // of the original program (see copyright_opensees.txt)
12 // XC is free software: you can redistribute it and/or modify
13 // it under the terms of the GNU General Public License as published by
14 // the Free Software Foundation, either version 3 of the License, or
15 // (at your option) any later version.
16 //
17 // This software is distributed in the hope that it will be useful, but
18 // WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 // GNU General Public License for more details.
21 //
22 //
23 // You should have received a copy of the GNU General Public License
24 // along with this program.
25 // If not, see <http://www.gnu.org/licenses/>.
26 /* ****************************************************************** **
27 ** OpenSees - Open System for Earthquake Engineering Simulation **
28 ** Pacific Earthquake Engineering Research Center **
29 ** **
30 ** **
31 ** (C) Copyright 1999, The Regents of the University of California **
32 ** All Rights Reserved. **
33 ** **
34 ** Commercial use of this program without express permission of the **
35 ** University of California, Berkeley, is strictly prohibited. See **
36 ** file 'COPYRIGHT' in main directory for information on usage and **
37 ** redistribution, and for a DISCLAIMER OF ALL WARRANTIES. **
38 ** **
39 ** Developed by: **
40 ** Frank McKenna (fmckenna@ce.berkeley.edu) **
41 ** Gregory L. Fenves (fenves@ce.berkeley.edu) **
42 ** Filip C. Filippou (filippou@ce.berkeley.edu) **
43 ** **
44 ** **
45 ** **
46 ** **
47 ** ****************************************************************** */
48 
49 #ifndef DruckerPrager_h
50 #define DruckerPrager_h
51 
52 // $Revision: 1.1 $
53 // $Date: 2010-02-04 00:44:04 $
54 // $Source: /usr/local/cvs/OpenSees/SRC/material/nD/DruckerPrager.h,v $
55 
56 // Written: Kathryn Petek, Peter Mackenzie-Helnwein, and Pedro Arduino
57 // Created: 12/04
58 //
59 // Description: This file contains the class definition for DruckerPrager.
60 //
61 
62 #include <material/nD/NDMaterial.h>
63 #include <utility/matrix/Vector.h>
64 #include <utility/matrix/Matrix.h>
65 
66 
67 namespace XC {
69 //
71 //
73 //
75 class DruckerPrager : public NDMaterial
76  {
77  protected:
78 
79  //material parameters
80  double mKref; // reference Bulk Modulus
81  double mGref; // reference Shear Modulus
82  double mPatm; // reference stress first invariant (pressure)
83  double mK; // bulk modulus
84  double mG; // shear modulus
85  double msigma_y; // yield strength
86  double mrho; // volumetric term
87  double mrho_bar; // nonassociative flow term
88  double mKinf; // nonlinear isotropic hardening term
89  double mKo; // nonlinear isotropic hardening term
90  double mdelta1; // exponential hardening term for drucker prager surface
91  double mdelta2; // exponential hardening term for tension cutoff surface
92  double mHard; // hardening constant
93  double mtheta; // hardening constant
94  double mTo; // initial tension cutoff strength
95 
96  double massDen;
97 
98  //internal variables
99  Vector mEpsilon;
100  Vector mEpsilon_n_p; // plastic strain vector at step n, trail e_p
101  Vector mEpsilon_n1_p; // plastic strain vector at step n+1
102  Vector mSigma;
103 
104  Vector mBeta_n; // backstress at step n, beta_np1_trial = beta_n
105  Vector mBeta_n1; // backstress at step n+1
106 
107  double mHprime; // derivative of linear kinematic hardening term
108 
109  double mAlpha1_n; // alpha1_n
110  double mAlpha1_n1; // alpha1_n+1
111  double mAlpha2_n; // alpha2_n
112  double mAlpha2_n1; // alpha2_n+1
113 
114  int mElastFlag; // Flag to determine elastic behavior
115  int mFlag;
116 
117  Matrix mCe; // elastic tangent stiffness matrix
118  Matrix mCep; // elastoplastic tangent stiffness matrix
119  Vector mI1; // 2nd Order Identity Tensor
120  Matrix mIIvol; // IIvol = I1 tensor I1
121  Matrix mIIdev; // 4th Order Deviatoric Tensor
122 
123  Vector mState; // state vector for output
124 
125  //functions
126  void initialize(); // initializes variables
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 functon
133  double Kisoprime(double alpha1); //
134  double T(double alpha2);
135  double deltaH(double dGamma);
136 
137  Vector getState(); // fills vector of state variables for output
138 
139  //parameters
140  static const double one3 ;
141  static const double two3 ;
142  static const double root23 ;
143  public:
144  // Full Constructor
145  DruckerPrager(int tag, int classTag, double bulk, double shear,
146  double s_y, double r, double r_bar, double Kinfinity, double Kinit,
147  double d1, double d2, double H, double t, double massDen = 0.0, double atm = 101.0);
148 
149  // Elastic Constructor
150  // DruckerPrager(int tag, double bulk, double shear);
151 
152  //Null Constructor
153  DruckerPrager();
154 
155  //Destructor
156  ~DruckerPrager();
157 
158  NDMaterial *getCopy(const std::string &type) const;
159 
160  int commitState(void);
161  int revertToLastCommit(void);
162  int revertToStart(void);
163 
164  NDMaterial *getCopy(void) const;
165  const std::string &getType(void) const;
166  int getOrder(void) const;
167 
168  Response *setResponse(const std::vector<std::string> &argv, Information &matInfo);
169  int getResponse (int responseID, Information &matInformation);
170 
171  int sendSelf(CommParameters &);
172  int recvSelf(const CommParameters &);
173 
174  void Print(std::ostream &, int flag =0);
175 
176 //int setParameter(const std::vector<std::string> &argv, Parameter &param);
177 //int updateParameter (int parameterID, Information &info);
178 
179  double getRho(void) {return massDen;};
180 
181 };
182 } // end XC namespace
183 
184 
185 #endif
Base class for 2D and 3D materials.
Definition: NDMaterial.h:91
Definition: Vector.h:82
Drucker-Prager material.
Definition: DruckerPrager.h:75
Information about an element.
Definition: Information.h:80
Definition: Matrix.h:82
NDMaterial * getCopy(void) const
Virtual constructor.
Definition: DruckerPrager.cpp:320
int getResponse(int responseID, Information &matInformation)
Returns material response.
Definition: DruckerPrager.cpp:749
void Print(std::ostream &, int flag=0)
Imprime el objeto.
Definition: DruckerPrager.cpp:976
Communication parameters between processes.
Definition: CommParameters.h:65
================================================================================
Definition: ContinuaReprComponent.h:34
Definition: Response.h:71