J2Plasticity.h

Go to the documentation of this file.
00001 /* ****************************************************************** **
00002 **    OpenSees - Open System for Earthquake Engineering Simulation    **
00003 **          Pacific Earthquake Engineering Research Center            **
00004 **                                                                    **
00005 **                                                                    **
00006 ** (C) Copyright 1999, The Regents of the University of California    **
00007 ** All Rights Reserved.                                               **
00008 **                                                                    **
00009 ** Commercial use of this program without express permission of the   **
00010 ** University of California, Berkeley, is strictly prohibited.  See   **
00011 ** file 'COPYRIGHT'  in main directory for information on usage and   **
00012 ** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
00013 **                                                                    **
00014 ** ****************************************************************** */
00015                                                                         
00016 // $Revision: 1.5 $
00017 // $Date: 2006/08/04 18:18:38 $
00018 // $Source: /usr/local/cvs/OpenSees/SRC/material/nD/J2Plasticity.h,v $
00019 
00020 #ifndef J2Plasticity_h
00021 #define J2Plasticity_h
00022 
00023 // Written: Ed "C++" Love
00024 //
00025 // J2 isotropic hardening material class
00026 // 
00027 //  Elastic Model
00028 //  sigma = K*trace(epsilion_elastic) + (2*G)*dev(epsilon_elastic)
00029 //
00030 //  Yield Function
00031 //  phi(sigma,q) = || dev(sigma) ||  - sqrt(2/3)*q(xi) 
00032 //
00033 //  Saturation Isotropic Hardening with linear term
00034 //  q(xi) = simga_0 + (sigma_infty - sigma_0)*exp(-delta*xi) + H*xi 
00035 //
00036 //  Flow Rules
00037 //  \dot{epsilon_p} =  gamma * d_phi/d_sigma
00038 //  \dot{xi}        = -gamma * d_phi/d_q 
00039 //
00040 //  Linear Viscosity 
00041 //  gamma = phi / eta  ( if phi > 0 ) 
00042 //
00043 //  Backward Euler Integration Routine 
00044 //  Yield condition enforced at time n+1 
00045 //
00046 //  set eta := 0 for rate independent case
00047 //
00048 
00049 
00050 #include <stdio.h> 
00051 #include <stdlib.h> 
00052 #include <math.h> 
00053 
00054 #include <Vector.h>
00055 #include <Matrix.h>
00056 #include <NDMaterial.h>
00057 
00058 
00059 class J2Plasticity : public NDMaterial {
00060 
00061 //-------------------Declarations-------------------------------
00062 
00063   public : 
00064 
00065   //null constructor
00066   J2Plasticity() ;
00067 
00068   //full constructor
00069   J2Plasticity(    int    tag,
00070                    int    classTag,
00071                    double K,
00072                    double G,
00073                    double yield0,
00074                    double yield_infty,
00075                    double d,
00076                    double H,
00077                    double viscosity = 0 ) ;
00078 
00079   //elastic constructor
00080   J2Plasticity( int tag, int classTag, double K, double G ) ;
00081 
00082   //destructor
00083   virtual ~J2Plasticity( ) ;
00084 
00085   virtual const char *getClassType(void) const {return "J2Plasticity";};
00086 
00087   virtual NDMaterial* getCopy (const char *type);
00088 
00089   //swap history variables
00090   virtual int commitState( ) ; 
00091 
00092   //revert to last saved state
00093   virtual int revertToLastCommit( ) ;
00094 
00095   //revert to start
00096   virtual int revertToStart( ) ;
00097 
00098   //sending and receiving
00099   virtual int sendSelf(int commitTag, Channel &theChannel) ;  
00100   virtual int recvSelf(int commitTag, Channel &theChannel, 
00101                        FEM_ObjectBroker &theBroker ) ;
00102 
00103   //print out material data
00104   void Print(OPS_Stream &s, int flag = 0) ;
00105 
00106   virtual NDMaterial *getCopy (void) ;
00107   virtual const char *getType (void) const ;
00108   virtual int getOrder (void) const ;
00109     
00110   protected :
00111 
00112   //this is mike's problem
00113   static Tensor rank2;
00114   static Tensor rank4;
00115 
00116   //material parameters
00117   double bulk ;        //bulk modulus
00118   double shear ;       //shear modulus
00119   double sigma_0 ;     //initial yield stress
00120   double sigma_infty ; //final saturation yield stress
00121   double delta ;       //exponential hardening parameter
00122   double Hard ;        //linear hardening parameter
00123   double eta ;         //viscosity
00124 
00125   //internal variables
00126   Matrix epsilon_p_n ;       // plastic strain time n
00127   Matrix epsilon_p_nplus1 ;  // plastic strain time n+1
00128   double xi_n ;              // xi time n
00129   double xi_nplus1 ;         // xi time n+1
00130 
00131   //material response 
00132   Matrix stress ;                //stress tensor
00133   double tangent[3][3][3][3] ;   //material tangent
00134   static double initialTangent[3][3][3][3] ;   //material tangent
00135   static double IIdev[3][3][3][3] ; //rank 4 deviatoric 
00136   static double IbunI[3][3][3][3] ; //rank 4 I bun I 
00137 
00138   //material input
00139   Matrix strain ;               //strain tensor
00140 
00141   //parameters
00142   static const double one3 ;
00143   static const double two3 ;
00144   static const double four3 ;
00145   static const double root23 ;
00146 
00147   //zero internal variables
00148   void zero( ) ;
00149 
00150   //plasticity integration routine
00151   void plastic_integrator( ) ;
00152 
00153   void doInitialTangent( ) ;
00154 
00155   //hardening function
00156   double q( double xi ) ;
00157 
00158   //hardening function derivative
00159   double qprime( double xi ) ;
00160   
00161   //matrix index to tensor index mapping
00162   virtual void index_map( int matrix_index, int &i, int &j ) ;
00163 
00164 
00165 } ; //end of J2Plasticity declarations
00166 
00167 #endif

Generated on Mon Oct 23 15:05:14 2006 for OpenSees by doxygen 1.5.0