XC Open source finite element analysis program
J2Plasticity.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 // software es libre: usted puede redistribuirlo y/o modificarlo
13 // under the terms of the GNU General Public License 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 // MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
20 // GNU General Public License for more details.
21 //
22 // You should have received a copy of the GNU General Public License
23 // junto a este programa.
24 // If not, see <http://www.gnu.org/licenses/>.
25 //----------------------------------------------------------------------------
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 ** ****************************************************************** */
40 
41 // $Revision: 1.4 $
42 // $Date: 2003/02/14 23:01:25 $
43 // $Source: /usr/local/cvs/OpenSees/SRC/material/nD/J2Plasticity.h,v $
44 
45 #ifndef J2Plasticity_h
46 #define J2Plasticity_h
47 
48 // Written: Ed "C++" Love
49 //
50 // J2 isotropic hardening material class
51 //
52 // Elastic Model
53 // sigma = K*trace(epsilion_elastic) + (2*G)*dev(epsilon_elastic)
54 //
55 // Yield Function
56 // phi(sigma,q) = || dev(sigma) || - sqrt(2/3)*q(xi)
57 //
58 // Saturation Isotropic Hardening with linear term
59 // q(xi) = simga_0 + (sigma_infty - sigma_0)*exp(-delta*xi) + H*xi
60 //
61 // Flow Rules
62 // \dot{epsilon_p} = gamma * d_phi/d_sigma
63 // \dot{xi} = -gamma * d_phi/d_q
64 //
65 // Linear Viscosity
66 // gamma = phi / eta ( if phi > 0 )
67 //
68 // Backward Euler Integration Routine
69 // Yield condition enforced at time n+1
70 //
71 // set eta := 0 for rate independent case
72 //
73 
74 
75 #include <utility/matrix/Vector.h>
76 #include <utility/matrix/Matrix.h>
77 #include <material/nD/NDMaterial.h>
78 
79 
80 namespace XC{
81 
83 //
84 //
86 //
88 //
90 class J2Plasticity: public NDMaterial
91  {
92  protected :
93  //this is mike's problem
94  static Tensor rank2;
95  static Tensor rank4;
96 
97  //material parameters
98  double bulk;
99  double shear;
100  double sigma_0;
101  double sigma_infty;
102  double delta;
103  double Hard;
104  double eta;
105 
106  //internal variables
109  double xi_n;
110  double xi_nplus1;
111 
112  //material response
114  double tangent[3][3][3][3];
115  static double initialTangent[3][3][3][3];
116  static double IIdev[3][3][3][3];
117  static double IbunI[3][3][3][3];
118 
119  //material input
121 
122  //parameters
123  static const double one3;
124  static const double two3;
125  static const double four3;
126  static const double root23;
127 
128 
129  void zero( );//zero internal variables
130  void plastic_integrator( );//plasticity integration routine
131  void doInitialTangent(void) const;
132 
133  double q( double xi );//hardening function
134  double qprime( double xi );//hardening function derivative
135 
136  //matrix index to tensor index mapping
137  virtual void index_map( int matrix_index, int &i, int &j ) const;
138 
139  int sendData(CommParameters &);
140  int recvData(const CommParameters &);
141  public:
142  //null constructor
143  J2Plasticity();
144  //full constructor
145  J2Plasticity(int tag, int classTag,
146  double K,
147  double G,
148  double yield0,
149  double yield_infty,
150  double d,
151  double H,
152  double viscosity = 0 );
153  J2Plasticity(int tag, int classTag);
154  //elastic constructor
155  J2Plasticity( int tag, int classTag, double K, double G );
156 
157  virtual NDMaterial* getCopy(const std::string &) const;
158 
159  //swap history variables
160  virtual int commitState(void);
161  //revert to last saved state
162  virtual int revertToLastCommit(void);
163  //revert to start
164  virtual int revertToStart(void);
165 
166  //sending and receiving
167  virtual int sendSelf(CommParameters &);
168  virtual int recvSelf(const CommParameters &);
169 
170  //print out material data
171  void Print(std::ostream &s, int flag = 0);
172 
173  virtual NDMaterial *getCopy(void) const;
174  virtual const std::string &getType(void) const;
175  virtual int getOrder(void) const;
176  };
177 
178 } //end of XC namespace
179 
180 #endif
double delta
exponential hardening parameter
Definition: J2Plasticity.h:102
double Hard
linear hardening parameter
Definition: J2Plasticity.h:103
int recvData(const CommParameters &)
Receives object members through the channel being passed as parameter.
Definition: J2Plasticity.cpp:800
Base class for 2D and 3D materials.
Definition: NDMaterial.h:91
static double IIdev[3][3][3][3]
rank 4 deviatoric
Definition: J2Plasticity.h:116
J2 Isotropic hardening material class.
Definition: J2Plasticity.h:90
virtual int sendSelf(CommParameters &)
Sends object through the channel being passed as parameter.
Definition: J2Plasticity.cpp:819
double bulk
bulk modulus
Definition: J2Plasticity.h:98
static double IbunI[3][3][3][3]
rank 4 I bun I
Definition: J2Plasticity.h:117
static double initialTangent[3][3][3][3]
material tangent
Definition: J2Plasticity.h:115
double xi_n
xi time n
Definition: J2Plasticity.h:109
virtual NDMaterial * getCopy(void) const
Virtual constructor.
Definition: J2Plasticity.cpp:741
Matrix strain
strain tensor
Definition: J2Plasticity.h:120
double tangent[3][3][3][3]
material tangent
Definition: J2Plasticity.h:114
double eta
viscosity
Definition: J2Plasticity.h:104
Definition: Matrix.h:82
double sigma_0
initial yield stress
Definition: J2Plasticity.h:100
double shear
shear modulus
Definition: J2Plasticity.h:99
double xi_nplus1
xi time n+1
Definition: J2Plasticity.h:110
Matrix epsilon_p_n
plastic strain time n
Definition: J2Plasticity.h:107
Matrix epsilon_p_nplus1
plastic strain time n+1
Definition: J2Plasticity.h:108
virtual int recvSelf(const CommParameters &)
Receives object through the channel being passed as parameter.
Definition: J2Plasticity.cpp:833
Communication parameters between processes.
Definition: CommParameters.h:65
double sigma_infty
final saturation yield stress
Definition: J2Plasticity.h:101
void Print(std::ostream &s, int flag=0)
Imprime el objeto.
Definition: J2Plasticity.cpp:438
void plastic_integrator()
Plasticity integration routine.
Definition: J2Plasticity.cpp:457
================================================================================
Definition: ContinuaReprComponent.h:34
int sendData(CommParameters &)
Send object members through the channel being passed as parameter.
Definition: J2Plasticity.cpp:782
Matrix stress
stress tensor
Definition: J2Plasticity.h:113