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