MultiaxialCyclicPlasticityAxiSymm.cpp

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 /*----+----+----+----+----+----+----+----+----+----+----+----+----+----+----*
00017  |                                                                          | 
00018  |              MultiaxialCyclicPlasticity  NDMaterial                      |
00019  +                                                                          +
00020  |--------------------------------------------------------------------------|
00021  |                                                                          |
00022  +             Authors: Gang Wang  AND  Professor Nicholas Sitar            +
00023  |                                                                          |
00024  |                         Department of Civil and Environmental Engineering            |
00025  +                         Univeristy of California, Berkeley, CA 94720, USA            +
00026  |                                                                          |
00027  |             Email: wang@ce.berkeley.edu (G.W.)                           |
00028  |                                                                          | 
00029  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----*/
00030 
00031 #include <MultiaxialCyclicPlasticityAxiSymm.h>
00032 #include <Channel.h>
00033 #include <FEM_ObjectBroker.h>
00034 
00035 //static vectors and matrices
00036 Vector MultiaxialCyclicPlasticityAxiSymm :: strain_vec(4) ;
00037 Vector MultiaxialCyclicPlasticityAxiSymm :: stress_vec(4) ;
00038 Matrix MultiaxialCyclicPlasticityAxiSymm :: tangent_matrix(4,4) ;
00039 
00040 //null constructor
00041 MultiaxialCyclicPlasticityAxiSymm ::  MultiaxialCyclicPlasticityAxiSymm( ) : 
00042 MultiaxialCyclicPlasticity( ) 
00043 {  }
00044 
00045 
00046 //full constructor
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 //elastic constructor
00068 MultiaxialCyclicPlasticityAxiSymm :: 
00069 MultiaxialCyclicPlasticityAxiSymm(   int    tag, double rho,    // add density by Gang Wang
00070                  double K, 
00071                  double G ) :
00072 MultiaxialCyclicPlasticity( tag, ND_TAG_MultiaxialCyclicPlasticityAxiSymm, rho, K, G )
00073 { 
00074 
00075 }
00076 
00077 
00078 
00079 //destructor
00080 MultiaxialCyclicPlasticityAxiSymm :: ~MultiaxialCyclicPlasticityAxiSymm( ) 
00081 { } 
00082 
00083 
00084 //make a clone of this material
00085 NDMaterial* MultiaxialCyclicPlasticityAxiSymm :: getCopy( ) 
00086 { 
00087   MultiaxialCyclicPlasticityAxiSymm  *clone;
00088   clone = new MultiaxialCyclicPlasticityAxiSymm() ;   //new instance of this class
00089   *clone = *this ;          //asignment to make copy
00090   return clone ;
00091 }
00092 
00093 
00094 //send back type of material
00095 const char* MultiaxialCyclicPlasticityAxiSymm :: getType( ) const 
00096 {
00097   return "AxiSymmetric" ;
00098 }
00099 
00100 
00101 //send back order of strain in vector form
00102 int MultiaxialCyclicPlasticityAxiSymm :: getOrder( ) const 
00103 { 
00104   return 4 ; 
00105 } 
00106 
00107 
00108 //get the strain and integrate plasticity equations
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 //  this->plastic_integrator( ) ;
00121 
00122    //opserr<<"MCP:integrator"<<endln;
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 //unused trial strain functions
00135 int MultiaxialCyclicPlasticityAxiSymm :: setTrialStrain( const Vector &v, const Vector &r )
00136 { 
00137   //opserr<<"MCP::setTrialStrain v"<<v<<endln;
00138    return this->setTrialStrain( v ) ;
00139 } 
00140 
00141 int MultiaxialCyclicPlasticityAxiSymm :: setTrialStrainIncr( const Vector &v ) 
00142 {
00143         // implemented Dec. 5, 2003, Gang Wang
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         //opserr<<"MCP::setTrialStrainIncr "<<newStrain<<endln;
00151         return this->setTrialStrain(newStrain);
00152         // return -1 ;  
00153 }
00154 
00155 int MultiaxialCyclicPlasticityAxiSymm :: setTrialStrainIncr( const Vector &v, const Vector &r ) 
00156 {
00157     // implemented Dec. 5, 2003, Gang Wang
00158         //return this->setTrialStrainIncr(v);
00159 
00160    // implemented April. 4, 2004, Gang Wang
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     //this->ResidStress(0,0)= r(0);
00170     //this->ResidStress(1,1)= r(1);
00171     //this->ResidStress(2,2)= r(2);
00172     //this->ResidStress(0,1)= r(3);
00173     //this->ResidStress(1,0)= r(3);
00174 
00175         return this->setTrialStrain(newStrain);
00176 
00177     // return -1 ;
00178 }
00179 
00180 
00181 
00182 //send back the strain
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   //opserr<<"MCP::getStrain() "<<strain_vec;
00192   return strain_vec ;
00193   
00194 } 
00195 
00196 
00197 //send back the stress 
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   //opserr<<"MCP::getStress()= "<<stress_vec;
00207   return stress_vec ;
00208 }
00209 
00210 //send back the tangent 
00211 const Matrix& MultiaxialCyclicPlasticityAxiSymm :: getTangent( ) 
00212 {
00213   // matrix to tensor mapping
00214   //  Matrix      Tensor
00215   // -------     -------
00216   //   0           0 0
00217   //   1           1 1
00218   //   2           2 2   
00219   //   3           0 1  ( or 1 0 )
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     } //end for j
00233   } //end for i
00234 
00235   //opserr<<"MCP::return tangent"<<endln;
00236   //opserr<<"MCP:"<<tangent_matrix<<endln;
00237 
00238   return tangent_matrix ;
00239 } 
00240 
00241 //send back the tangent 
00242 const Matrix& MultiaxialCyclicPlasticityAxiSymm :: getInitialTangent( ) 
00243 {
00244   // matrix to tensor mapping
00245   //  Matrix      Tensor
00246   // -------     -------
00247   //   0           0 0
00248   //   1           1 1
00249   //   2           2 2   
00250   //   3           0 1  ( or 1 0 )
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     } //end for j
00266   } //end for i
00267 
00268   return tangent_matrix ;
00269 } 
00270 
00271 //this is mike's problem
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 //swap history variables
00299 /* 
00300 int MultiaxialCyclicPlasticityAxiSymm :: commitState( )  
00301 {
00302 
00303   e_p_n        = e_p_nplus1 ;       // dev plastic part
00304   theta_p_n   = theta_p_nplus1 ;  // add vol plastic part
00305   xi_n        = xi_nplus1 ;
00306 
00307   return 0;
00308 
00309 }
00310 
00311 
00312 //revert to last saved state
00313 int MultiaxialCyclicPlasticityAxiSymm :: revertToLastCommit( )
00314 { 
00315   return 0 ;
00316 } 
00317 
00318 //revert to start
00319 int MultiaxialCyclicPlasticityAxiSymm :: revertToStart( ) 
00320 
00321 {  
00322   this->zero( ) ;
00323   return 0 ;
00324 }
00325 
00326  
00327 
00328 
00329 int
00330 MultiaxialCyclicPlasticityAxiSymm::sendSelf (int commitTag, Channel &theChannel)
00331 {
00332   return -1;
00333 }
00334 
00335 int
00336 MultiaxialCyclicPlasticityAxiSymm::recvSelf (int commitTag, Channel &theChannel, 
00337                          FEM_ObjectBroker &theBroker)
00338 {
00339   return -1;
00340 }
00341 
00342 
00343 */

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