00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include <MultiaxialCyclicPlasticityPlaneStrain.h>
00032 #include <Channel.h>
00033 #include <FEM_ObjectBroker.h>
00034
00035
00036 Vector MultiaxialCyclicPlasticityPlaneStrain :: strain_vec(3) ;
00037 Vector MultiaxialCyclicPlasticityPlaneStrain :: stress_vec(3) ;
00038 Matrix MultiaxialCyclicPlasticityPlaneStrain :: tangent_matrix(3,3) ;
00039
00040
00041
00042 MultiaxialCyclicPlasticityPlaneStrain :: MultiaxialCyclicPlasticityPlaneStrain( ) :
00043 MultiaxialCyclicPlasticity( )
00044 { }
00045
00046
00047
00048 MultiaxialCyclicPlasticityPlaneStrain ::
00049 MultiaxialCyclicPlasticityPlaneStrain (int tag,
00050 double rho,
00051 double K,
00052 double G,
00053 double Su,
00054 double Ho_kin,
00055 double Parameter_h,
00056 double Parameter_m,
00057 double Parameter_beta,
00058 double Kcoeff,
00059 double viscosity ) :
00060 MultiaxialCyclicPlasticity( tag, ND_TAG_MultiaxialCyclicPlasticityPlaneStrain, rho, K, G,
00061 Su, Ho_kin, Parameter_h, Parameter_m, Parameter_beta, Kcoeff, viscosity)
00062 {
00063
00064 }
00065
00066
00067
00068
00069 MultiaxialCyclicPlasticityPlaneStrain ::
00070 MultiaxialCyclicPlasticityPlaneStrain( int tag, double rho,
00071 double K,
00072 double G ) :
00073 MultiaxialCyclicPlasticity( tag, ND_TAG_MultiaxialCyclicPlasticityPlaneStrain, rho, K, G )
00074 {
00075
00076 }
00077
00078
00079
00080
00081 MultiaxialCyclicPlasticityPlaneStrain :: ~MultiaxialCyclicPlasticityPlaneStrain( )
00082 { }
00083
00084
00085
00086
00087
00088 NDMaterial* MultiaxialCyclicPlasticityPlaneStrain :: getCopy( )
00089 {
00090 MultiaxialCyclicPlasticityPlaneStrain *clone;
00091 clone = new MultiaxialCyclicPlasticityPlaneStrain() ;
00092 *clone = *this ;
00093 return clone ;
00094 }
00095
00096
00097
00098
00099 const char* MultiaxialCyclicPlasticityPlaneStrain :: getType( ) const
00100 {
00101 return "PlaneStrain2D" ;
00102 }
00103
00104
00105
00106 int MultiaxialCyclicPlasticityPlaneStrain :: getOrder( ) const
00107 {
00108 return 3 ;
00109 }
00110
00111
00112
00113 int MultiaxialCyclicPlasticityPlaneStrain :: setTrialStrain( const Vector &strain_from_element)
00114 {
00115 strain.Zero( ) ;
00116
00117 strain(0,0) = strain_from_element(0) ;
00118 strain(1,1) = strain_from_element(1) ;
00119 strain(0,1) = 0.50 * strain_from_element(2) ;
00120 strain(1,0) = strain(0,1) ;
00121
00122 if (this->MaterialStageID ==1) {
00123 this->elastic_integrator( ) ;
00124 } else if (this->MaterialStageID ==2) {
00125 this->plastic_integrator( ) ;
00126 }
00127 return 0 ;
00128 }
00129
00130
00131
00132 int MultiaxialCyclicPlasticityPlaneStrain :: setTrialStrain( const Vector &v, const Vector &r )
00133 {
00134 return this->setTrialStrain( v ) ;
00135 }
00136
00137 int MultiaxialCyclicPlasticityPlaneStrain :: setTrialStrainIncr( const Vector &v )
00138 {
00139 static Vector newStrain(3);
00140 newStrain(0) = strain(0,0) + v(0);
00141 newStrain(1) = strain(1,1) + v(1);
00142 newStrain(2) = 2.0 * strain(0,1) + v(2);
00143
00144 return this->setTrialStrain(newStrain);
00145 }
00146
00147
00148
00149 int MultiaxialCyclicPlasticityPlaneStrain :: setTrialStrainIncr( const Vector &v, const Vector &r )
00150 {
00151
00152
00153 static Vector newStrain(3);
00154 newStrain(0) = strain(0,0) + v(0);
00155 newStrain(1) = strain(1,1) + v(1);
00156 newStrain(2) = 2.0*strain(0,1) + v(2);
00157
00158 return this->setTrialStrain(newStrain);
00159
00160 }
00161
00162
00163
00164 const Vector& MultiaxialCyclicPlasticityPlaneStrain :: getStrain( )
00165 {
00166 strain_vec(0) = strain(0,0) ;
00167 strain_vec(1) = strain(1,1) ;
00168 strain_vec(2) = 2.0 * strain(0,1) ;
00169
00170 return strain_vec ;
00171 }
00172
00173
00174
00175 const Vector& MultiaxialCyclicPlasticityPlaneStrain :: getStress( )
00176 {
00177 stress_vec(0) = stress(0,0) ;
00178 stress_vec(1) = stress(1,1) ;
00179 stress_vec(2) = stress(0,1) ;
00180
00181 return stress_vec ;
00182 }
00183
00184
00185 const Matrix& MultiaxialCyclicPlasticityPlaneStrain :: getTangent( )
00186 {
00187
00188
00189
00190
00191
00192
00193
00194
00195 tangent_matrix(0,0) = tangent [0][0] [0][0] ;
00196 tangent_matrix(1,1) = tangent [1][1] [1][1] ;
00197 tangent_matrix(2,2) = tangent [0][1] [0][1] ;
00198
00199 tangent_matrix(0,1) = tangent [0][0] [1][1] ;
00200 tangent_matrix(1,0) = tangent [1][1] [0][0] ;
00201
00202 tangent_matrix(0,2) = tangent [0][0] [0][1] ;
00203 tangent_matrix(2,0) = tangent [0][1] [0][0] ;
00204
00205 tangent_matrix(1,2) = tangent [1][1] [0][1] ;
00206 tangent_matrix(2,1) = tangent [0][1] [1][1] ;
00207
00208 return tangent_matrix ;
00209 }
00210
00211
00212
00213 const Matrix& MultiaxialCyclicPlasticityPlaneStrain :: getInitialTangent( )
00214 {
00215
00216
00217
00218
00219
00220
00221
00222
00223 this->doInitialTangent();
00224
00225 tangent_matrix(0,0) = initialTangent [0][0] [0][0] ;
00226 tangent_matrix(1,1) = initialTangent [1][1] [1][1] ;
00227 tangent_matrix(2,2) = initialTangent [0][1] [0][1] ;
00228
00229 tangent_matrix(0,1) = initialTangent [0][0] [1][1] ;
00230 tangent_matrix(1,0) = initialTangent [1][1] [0][0] ;
00231
00232 tangent_matrix(0,2) = initialTangent [0][0] [0][1] ;
00233 tangent_matrix(2,0) = initialTangent [0][1] [0][0] ;
00234
00235 tangent_matrix(1,2) = initialTangent [1][1] [0][1] ;
00236 tangent_matrix(2,1) = initialTangent [0][1] [1][1] ;
00237
00238 return tangent_matrix ;
00239 }
00240
00241
00242 int MultiaxialCyclicPlasticityPlaneStrain :: setTrialStrain(const Tensor &v)
00243 {
00244 return -1 ;
00245 }
00246
00247 int MultiaxialCyclicPlasticityPlaneStrain :: setTrialStrain(const Tensor &v, const Tensor &r)
00248 {
00249 return -1 ;
00250 }
00251
00252 int MultiaxialCyclicPlasticityPlaneStrain :: setTrialStrainIncr(const Tensor &v)
00253 {
00254 return -1 ;
00255 }
00256
00257 int MultiaxialCyclicPlasticityPlaneStrain :: setTrialStrainIncr(const Tensor &v, const Tensor &r)
00258 {
00259 return -1 ;
00260 }
00261
00262 const Tensor& MultiaxialCyclicPlasticityPlaneStrain :: getTangentTensor( )
00263 {
00264 return rank4 ;
00265 }
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315