00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef J2Plasticity_h
00021 #define J2Plasticity_h
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
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
00062
00063 public :
00064
00065
00066 J2Plasticity() ;
00067
00068
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
00080 J2Plasticity( int tag, int classTag, double K, double G ) ;
00081
00082
00083 virtual ~J2Plasticity( ) ;
00084
00085 virtual const char *getClassType(void) const {return "J2Plasticity";};
00086
00087 virtual NDMaterial* getCopy (const char *type);
00088
00089
00090 virtual int commitState( ) ;
00091
00092
00093 virtual int revertToLastCommit( ) ;
00094
00095
00096 virtual int revertToStart( ) ;
00097
00098
00099 virtual int sendSelf(int commitTag, Channel &theChannel) ;
00100 virtual int recvSelf(int commitTag, Channel &theChannel,
00101 FEM_ObjectBroker &theBroker ) ;
00102
00103
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
00113 static Tensor rank2;
00114 static Tensor rank4;
00115
00116
00117 double bulk ;
00118 double shear ;
00119 double sigma_0 ;
00120 double sigma_infty ;
00121 double delta ;
00122 double Hard ;
00123 double eta ;
00124
00125
00126 Matrix epsilon_p_n ;
00127 Matrix epsilon_p_nplus1 ;
00128 double xi_n ;
00129 double xi_nplus1 ;
00130
00131
00132 Matrix stress ;
00133 double tangent[3][3][3][3] ;
00134 static double initialTangent[3][3][3][3] ;
00135 static double IIdev[3][3][3][3] ;
00136 static double IbunI[3][3][3][3] ;
00137
00138
00139 Matrix strain ;
00140
00141
00142 static const double one3 ;
00143 static const double two3 ;
00144 static const double four3 ;
00145 static const double root23 ;
00146
00147
00148 void zero( ) ;
00149
00150
00151 void plastic_integrator( ) ;
00152
00153 void doInitialTangent( ) ;
00154
00155
00156 double q( double xi ) ;
00157
00158
00159 double qprime( double xi ) ;
00160
00161
00162 virtual void index_map( int matrix_index, int &i, int &j ) ;
00163
00164
00165 } ;
00166
00167 #endif