xc
MultiaxialCyclicPlasticity.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 /* ****************************************************************** **
29 ** OpenSees - Open System for Earthquake Engineering Simulation **
30 ** Pacific Earthquake Engineering Research Center **
31 ** **
32 ** **
33 ** (C) Copyright 1999, The Regents of the University of California **
34 ** All Rights Reserved. **
35 ** **
36 ** Commercial use of this program without express permission of the **
37 ** University of California, Berkeley, is strictly prohibited. See **
38 ** file 'COPYRIGHT' in main directory for information on usage and **
39 ** redistribution, and for a DISCLAIMER OF ALL WARRANTIES. **
40 ** **
41 ** ****************************************************************** */
42 
43 
44 /*----+----+----+----+----+----+----+----+----+----+----+----+----+----+----*
45  | |
46  | MultiaxialCyclicPlasticity NDMaterial |
47  + +
48  |--------------------------------------------------------------------------|
49  | |
50  + Authors: Gang Wang AND Professor Nicholas Sitar +
51  | |
52  | Department of Civil and Environmental Engineering |
53  + University of California, Berkeley, CA 94720, USA +
54  | |
55  | Email: wang@ce.berkeley.edu (G.W.) |
56  + +
57  | Disclaimers: |
58  | (1) This is implemtenation of MultiaxialCyclicPlasticity for clays |
59  + Model References: +
60  | Borja R.I, Amies, A.P. Multiaxial Cyclic Plasticity Model for |
61  | Clays, ASCE J. Geotech. Eng. Vol 120, No 6, 1051-1070 |
62  + Montans F.J, Borja R.I. Implicit J2-bounding Surface Plasticity +
63  | using Prager's translation rule. Int. J. Numer. Meth. Engng. |
64  | 55:1129-1166, 2002 |
65  + Code References: +
66  | Ignacio Romero and Adrian Rodriguez Marek, Brick element model with |
67  | a Multiaxial Cyclic Plasticity Model, in GEOFEAP, UC Berkeley |
68  + (2) Questions regarding this code should be directed to Gang Wang +
69  | (3) Documentation could be found at |
70  | www.ce.berkeley.edu/~wang/papers/MultiaxialCyclicPlasticity.pdf |
71  + +
72  | Development History: |
73  | First Draft -- April 2004 |
74  + Rewrite -- Nov 2004 +
75  | Final Release -- |
76  | |
77  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----*/
78 
79 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
80 
81  User Command
82 
83  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
84  nDMaterial MultiaxialCyclicPlasticity $tag, $rho, $K, $G,
85  $Su , $Ho , $h, $m, $beta, $KCoeff
86  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
87  where:
88  tag : tag for this material
89  rho : density
90  K : buck modulus
91  G : maximum (small strain) shear modulus
92  Su : undrained shear strength, size of bounding surface R=sqrt(8/3)*Su
93  Ho : linear kinematic hardening modulus of bounding surface
94  h : hardening parameter
95  m : hardening parameter
96  beta : integration parameter, usually beta=0.5
97  KCoeff: coefficient of earth pressure, K0
98 
99  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
100 
101 
102 #ifndef MultiaxialCyclicPlasticity_h
103 #define MultiaxialCyclicPlasticity_h
104 
105 #include <cstdio>
106 #include <cstdlib>
107 #include <cmath>
108 
109 #include <utility/matrix/Vector.h>
110 #include <utility/matrix/Matrix.h>
111 #include <material/nD/NDMaterial.h>
112 
113 
114 namespace XC{
116 //
119  {
120  protected :
121  //this is mike's problem
122  static Tensor rank2;
123  static Tensor rank4;
124 
125  // Material parameter used for K0 condition
126  double K0; //lateral earth pressure coefficient
127  double bulk_K0;
128  double shear_K0;
129 
130  // Parameters used for Bounding Surface
131  double bulk ; //bulk modulus
132  double shear ; //shear modulus
133  double density; //material density (mass/volume)
134  double R; //Radius of Bounding Surface, R=sqrt(8/3)*Su
135  double Ho; //Limit value of hardening modulus Ho=Hard
136  double h; //Exponential degradation parameter H=h*kappa^m
137  double m; //Exponential degradation parameter H=h*kappa^m
138  double beta; //integration parameter
139  double eta; //viscosity // not used now
140 
141  // some flags
142  int flagjustunload; // not used
143  int flagfirstload; // very first loading, initialize so_n
144  int icounter; // iteration counter, local newton
145  int iternum; // iteration counter, global newton
146 
147  int plasticflag; // flags indicate stage of plasticity at current step
148  int plasticflag_n; // flags indicate stage of plasticity at t=n
149 
150  // state variables
151  double kappa; //kappa at t=n
152  double Psi; //Psi at t=n
153  double X[3]; //X[1]:Psi X[2]:kappa at t=n+1
154  double alp; //alp for strain split across B.S.
155  double load; //loading/unloading indicator
156 
157  //material input
158  Matrix strain ; // strain @ t=n+1, input from element
159  //material response
160  Matrix stress ; // stress @ t=n+1, computed this step
161  Matrix backs; // back stress for BS @ t=n
162  Matrix so; // unload deviatoric back stress
163  //memory variables
164  Matrix strain_n; // strain @ t=n; stored before
165  Matrix stress_n; // stress @ t=n; stored before
166  Matrix backs_n; // back stress for BS @ t=n+1
167  Matrix so_n; // unload point for t=n
168 
169  double tangent[3][3][3][3] ; // material tangent
170  static double initialTangent[3][3][3][3] ; //material tangent
171  static double IIdev[3][3][3][3] ; //rank 4 deviatoric
172  static double IbunI[3][3][3][3] ; //rank 4 I bun I
173 
174 
175  // element tag associated with this material; added method by Gang Wang
176  int EleTag;
177  static int MaterialStageID; // classwide tag
178  static int IncrFormulationFlag;
179 
180 
181  //parameters
182  static const double one3 ;
183  static const double two3 ;
184  static const double four3 ;
185  static const double root23 ;
186  static const double infinity ;
187 
188  static Vector MCPparameter; // debug tool
189 
190 
191  void initialize(void); //initialize internal variables
192  void plastic_integrator(void); //plasticity integration routine, used in MaterialStageID==2
193  void elastic_integrator(void);//elasticity integration routine, used in MaterialStageID==1 (K0)
194 
195  void doInitialTangent(void) const;
196  virtual void index_map( int matrix_index, int &i, int &j ) const;//matrix index to tensor index mapping
197 
198 
199  protected:
200  int sendData(Communicator &);
201  int recvData(const Communicator &);
202  public :
203  //null constructor
205  MultiaxialCyclicPlasticity(int tag,int classtag= ND_TAG_MultiaxialCyclicPlasticity);
206 
207 
208 //full constructor
210  int classTag,
211  double rho,
212  double K,
213  double G,
214  double Su,
215  double Ho_kin,
216  double Parameter_h,
217  double Parameter_m,
218  double Parameter_beta,
219  double Kcoeff,
220  double viscosity = 0
221  );
222 
223 
224  //elastic constructor
225  MultiaxialCyclicPlasticity( int tag, int classTag, double rho, double K, double G );
226 
227  virtual NDMaterial* getCopy(const std::string &) const;
228 
229  //swap history variables
230  virtual int commitState(void);
231  //revert to last saved state
232  virtual int revertToLastCommit(void);
233  //revert to start
234  virtual int revertToStart(void);
235 
236  //sending and receiving
237  virtual int sendSelf(Communicator &);
238  virtual int recvSelf(const Communicator &);
239 
240  //print out material data
241  void Print(std::ostream &s, int flag = 0) const;
242 
243  virtual NDMaterial *getCopy(void) const;
244  virtual const std::string &getType(void) const ;
245  virtual int getOrder (void) const ;
246 
247  inline double getRho(void) const
248  { return density; }
249  inline virtual void setRho(const double &r)
250  { density= r; }
251  int updateParameter(int responseID, Information &eleInformation);
252  Vector& getMCPparameter(void); // used for debug only
253  }; //end of MultiaxialCyclicPlasticity declarations
254 
255 } //end of XC namespace
256 
257 #endif
Float vector abstraction.
Definition: Vector.h:94
??.
Definition: MultiaxialCyclicPlasticity.h:118
Information about an element.
Definition: Information.h:81
void plastic_integrator(void)
Definition: MultiaxialCyclicPlasticity.cpp:847
Communication parameters between processes.
Definition: Communicator.h:66
virtual int sendSelf(Communicator &)
Sends object through the communicator argument.
Definition: MultiaxialCyclicPlasticity.cpp:805
int recvData(const Communicator &)
Receives object members through the communicator argument.
Definition: MultiaxialCyclicPlasticity.cpp:779
virtual NDMaterial * getCopy(void) const
Virtual constructor.
Definition: MultiaxialCyclicPlasticity.cpp:694
int updateParameter(int responseID, Information &eleInformation)
Updates the parameter identified by parameterID with info.
Definition: MultiaxialCyclicPlasticity.cpp:837
double getRho(void) const
Get material density.
Definition: MultiaxialCyclicPlasticity.h:247
virtual int revertToStart(void)
Revert the material to its initial state.
Definition: MultiaxialCyclicPlasticity.cpp:745
int sendData(Communicator &)
Send object members through the communicator argument.
Definition: MultiaxialCyclicPlasticity.cpp:753
Base class for 2D and 3D materials.
Definition: NDMaterial.h:101
virtual void setRho(const double &r)
Set material density.
Definition: MultiaxialCyclicPlasticity.h:249
void Print(std::ostream &s, int flag=0) const
Print stuff.
Definition: MultiaxialCyclicPlasticity.cpp:501
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:35
Matrix of floats.
Definition: Matrix.h:111
virtual int recvSelf(const Communicator &)
Receives object through the communicator argument.
Definition: MultiaxialCyclicPlasticity.cpp:819