MultiaxialCyclicPlasticityPlaneStrain.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 <MultiaxialCyclicPlasticityPlaneStrain.h>
00032 #include <Channel.h>
00033 #include  <FEM_ObjectBroker.h>
00034 
00035 //static vectors and matrices
00036 Vector MultiaxialCyclicPlasticityPlaneStrain :: strain_vec(3) ;
00037 Vector MultiaxialCyclicPlasticityPlaneStrain :: stress_vec(3) ;
00038 Matrix MultiaxialCyclicPlasticityPlaneStrain :: tangent_matrix(3,3) ;
00039 
00040 
00041 //null constructor
00042 MultiaxialCyclicPlasticityPlaneStrain ::  MultiaxialCyclicPlasticityPlaneStrain( ) : 
00043 MultiaxialCyclicPlasticity( ) 
00044 {  }
00045 
00046 
00047 //full constructor
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 //elastic constructor
00069 MultiaxialCyclicPlasticityPlaneStrain :: 
00070 MultiaxialCyclicPlasticityPlaneStrain(   int    tag, double rho,    // add density by Gang Wang
00071                  double K, 
00072                  double G ) :
00073 MultiaxialCyclicPlasticity( tag, ND_TAG_MultiaxialCyclicPlasticityPlaneStrain, rho, K, G )
00074 { 
00075 
00076 }
00077 
00078 
00079 
00080 //destructor
00081 MultiaxialCyclicPlasticityPlaneStrain :: ~MultiaxialCyclicPlasticityPlaneStrain( ) 
00082 { } 
00083 
00084 
00085 
00086 
00087 //make a clone of this material
00088 NDMaterial* MultiaxialCyclicPlasticityPlaneStrain :: getCopy( ) 
00089 { 
00090   MultiaxialCyclicPlasticityPlaneStrain  *clone;
00091   clone = new MultiaxialCyclicPlasticityPlaneStrain() ;   //new instance of this class
00092   *clone = *this ;          //asignment to make copy
00093   return clone ;
00094 }
00095 
00096 
00097 
00098 //send back type of material
00099 const char* MultiaxialCyclicPlasticityPlaneStrain :: getType( ) const 
00100 {
00101   return "PlaneStrain2D" ;
00102 }
00103 
00104 
00105 //send back order of strain in vector form
00106 int MultiaxialCyclicPlasticityPlaneStrain :: getOrder( ) const 
00107 { 
00108   return 3 ; 
00109 } 
00110 
00111 
00112 //get the strain and integrate plasticity equations
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 //unused trial strain functions
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    // implemented April. 4, 2004, Gang Wang
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 //send back the strain
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 //send back the stress 
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 //send back the tangent 
00185 const Matrix& MultiaxialCyclicPlasticityPlaneStrain :: getTangent( ) 
00186 {
00187   // matrix to tensor mapping
00188   //  Matrix      Tensor
00189   // -------     -------
00190   //   0           0 0
00191   //   1           1 1
00192   //   2           0 1  ( or 1 0 ) 
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 //send back the tangent 
00213 const Matrix& MultiaxialCyclicPlasticityPlaneStrain :: getInitialTangent( ) 
00214 {
00215   // matrix to tensor mapping
00216   //  Matrix      Tensor
00217   // -------     -------
00218   //   0           0 0
00219   //   1           1 1
00220   //   2           0 1  ( or 1 0 ) 
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 //this is mike's problem
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 int 
00270 MultiaxialCyclicPlasticityPlaneStrain::commitState( ) 
00271 {
00272   epsilon_p_n = epsilon_p_nplus1;
00273   xi_n        = xi_nplus1;
00274 
00275   return 0;
00276 }
00277 
00278 int 
00279 MultiaxialCyclicPlasticityPlaneStrain::revertToLastCommit( ) {
00280 
00281   return 0;
00282 }
00283 
00284 
00285 int 
00286 MultiaxialCyclicPlasticityPlaneStrain::revertToStart( ) 
00287 {
00288   this->zero( ) ;
00289 
00290   return 0;
00291 }
00292  
00293 
00294 int
00295 MultiaxialCyclicPlasticityPlaneStrain::sendSelf (int commitTag, Channel &theChannel)
00296 {
00297  
00298   return -1;
00299 }
00300 
00301 int
00302 MultiaxialCyclicPlasticityPlaneStrain::recvSelf (int commitTag, Channel &theChannel, 
00303                          FEM_ObjectBroker &theBroker)
00304 {
00305   
00306   return -1;
00307 }
00308 
00309 
00310 */
00311 
00312 
00313 
00314 
00315 

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