Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

J2PlaneStrain.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 // $Revision: 1.2 $
00017 // $Date: 2001/01/23 08:46:28 $
00018 // $Source: /usr/local/cvs/OpenSees/SRC/material/nD/J2PlaneStrain.cpp,v $
00019 
00020 // Written: Ed "C++" Love
00021 //
00022 // J2PlaneStrain isotropic hardening material class
00023 // 
00024 //  Elastic Model
00025 //  sigma = K*trace(epsilion_elastic) + (2*G)*dev(epsilon_elastic)
00026 //
00027 //  Yield Function
00028 //  phi(sigma,q) = || dev(sigma) ||  - sqrt(2/3)*q(xi) 
00029 //
00030 //  Saturation Isotropic Hardening with linear term
00031 //  q(xi) = simga_infty + (sigma_0 - sigma_infty)*exp(-delta*xi) + H*xi 
00032 //
00033 //  Flow Rules
00034 //  \dot{epsilon_p} =  gamma * d_phi/d_sigma
00035 //  \dot{xi}        = -gamma * d_phi/d_q 
00036 //
00037 //  Linear Viscosity 
00038 //  gamma = phi / eta  ( if phi > 0 ) 
00039 //
00040 //  Backward Euler Integration Routine 
00041 //  Yield condition enforced at time n+1 
00042 //
00043 //  Send strains in following format :
00044 // 
00045 //     strain_vec = {   eps_00
00046 //                      eps_11
00047 //                    2 eps_01   }   <--- note the 2
00048 // 
00049 //  set eta := 0 for rate independent case
00050 //
00051 
00052 #include <J2PlaneStrain.h>
00053 
00054 //static vectors and matrices
00055 Vector J2PlaneStrain :: strain_vec(3) ;
00056 Vector J2PlaneStrain :: stress_vec(3) ;
00057 Matrix J2PlaneStrain :: tangent_matrix(3,3) ;
00058 
00059 
00060 //null constructor
00061 J2PlaneStrain ::  J2PlaneStrain( ) : 
00062 J2Plasticity( ) 
00063 {  }
00064 
00065 
00066 //full constructor
00067 
00068 J2PlaneStrain :: J2PlaneStrain(   int    tag, 
00069                  double K,
00070                  double G,
00071                  double yield0,
00072                  double yield_infty,
00073                  double d,
00074                  double H,
00075                  double viscosity ) : 
00076 J2Plasticity( tag, ND_TAG_J2PlaneStrain, 
00077              K, G, yield0, yield_infty, d, H, viscosity )
00078 { }
00079 
00080 
00081 //elastic constructor
00082 
00083 J2PlaneStrain :: J2PlaneStrain(   int    tag, 
00084                  double K, 
00085                  double G ) :
00086 J2Plasticity( tag, ND_TAG_J2PlaneStrain, K, G )
00087 { }
00088 
00089 
00090 
00091 //destructor
00092 J2PlaneStrain :: ~J2PlaneStrain( ) 
00093 { } 
00094 
00095 
00096 //make a clone of this material
00097 NDMaterial* J2PlaneStrain :: getCopy( ) 
00098 { 
00099   J2PlaneStrain  *clone;
00100   clone = new J2PlaneStrain() ;   //new instance of this class
00101   *clone = *this ;          //asignment to make copy
00102   return clone ;
00103 }
00104 
00105 
00106 
00107 //send back type of material
00108 const char* J2PlaneStrain :: getType( ) const 
00109 {
00110   return "PlaneStrain2D" ;
00111 }
00112 
00113 
00114 //send back order of strain in vector form
00115 int J2PlaneStrain :: getOrder( ) const 
00116 { 
00117   return 3 ; 
00118 } 
00119 
00120 
00121 //get the strain and integrate plasticity equations
00122 int J2PlaneStrain :: setTrialStrain( const Vector &strain_from_element) 
00123 {
00124   strain.Zero( ) ;
00125 
00126   strain(0,0) =        strain_from_element(0) ;
00127   strain(1,1) =        strain_from_element(1) ;
00128   strain(0,1) = 0.50 * strain_from_element(2) ;
00129   strain(1,0) =        strain(0,1) ;
00130 
00131   this->plastic_integrator( ) ;
00132 
00133   return 0 ;
00134 }
00135 
00136 
00137 //unused trial strain functions
00138 int J2PlaneStrain :: setTrialStrain( const Vector &v, const Vector &r )
00139 { 
00140    return this->setTrialStrain( v ) ;
00141 } 
00142 
00143 int J2PlaneStrain :: setTrialStrainIncr( const Vector &v ) 
00144 {
00145     return -1 ;
00146 }
00147 
00148 int J2PlaneStrain :: setTrialStrainIncr( const Vector &v, const Vector &r ) 
00149 {
00150     return -1 ;
00151 }
00152 
00153 
00154 
00155 //send back the strain
00156 const Vector& J2PlaneStrain :: getStrain( ) 
00157 {
00158   strain_vec(0) =       strain(0,0) ;
00159   strain_vec(1) =       strain(1,1) ;
00160   strain_vec(2) = 2.0 * strain(0,1) ;
00161 
00162   return strain_vec ;
00163 } 
00164 
00165 
00166 //send back the stress 
00167 const Vector& J2PlaneStrain :: getStress( ) 
00168 {
00169   stress_vec(0) = stress(0,0) ;
00170   stress_vec(1) = stress(1,1) ;
00171   stress_vec(2) = stress(0,1) ;
00172 
00173   return stress_vec ;
00174 }
00175 
00176 //send back the tangent 
00177 const Matrix& J2PlaneStrain :: getTangent( ) 
00178 {
00179   // matrix to tensor mapping
00180   //  Matrix      Tensor
00181   // -------     -------
00182   //   0           0 0
00183   //   1           1 1
00184   //   2           0 1  ( or 1 0 ) 
00185   // 
00186        
00187   tangent_matrix(0,0) = tangent [0][0] [0][0] ;
00188   tangent_matrix(1,1) = tangent [1][1] [1][1] ;
00189   tangent_matrix(2,2) = tangent [0][1] [0][1] ;
00190 
00191   tangent_matrix(0,1) = tangent [0][0] [1][1] ;
00192   tangent_matrix(1,0) = tangent [1][1] [0][0] ;
00193 
00194   tangent_matrix(0,2) = tangent [0][0] [0][1] ;
00195   tangent_matrix(2,0) = tangent [0][1] [0][0] ;
00196 
00197   tangent_matrix(1,2) = tangent [1][1] [0][1] ;
00198   tangent_matrix(2,1) = tangent [0][1] [1][1] ;
00199 
00200   return tangent_matrix ;
00201 } 
00202 
00203 //this is mike's problem
00204 int J2PlaneStrain :: setTrialStrain(const Tensor &v) 
00205 {
00206   return -1 ;
00207 }
00208 
00209 int J2PlaneStrain :: setTrialStrain(const Tensor &v, const Tensor &r)     
00210 {
00211   return -1 ;
00212 }
00213 
00214 int J2PlaneStrain :: setTrialStrainIncr(const Tensor &v) 
00215 {
00216   return -1 ;
00217 }
00218 
00219 int J2PlaneStrain :: setTrialStrainIncr(const Tensor &v, const Tensor &r) 
00220 {
00221   return -1 ;
00222 }
00223 
00224 const Tensor& J2PlaneStrain :: getTangentTensor( ) 
00225 {
00226   return rank4 ;
00227 }
00228 
00229 //jeremic@ucdavis.edu 22jan2001const Tensor& J2PlaneStrain :: getStressTensor( ) 
00230 //jeremic@ucdavis.edu 22jan2001{
00231 //jeremic@ucdavis.edu 22jan2001  return rank2 ;
00232 //jeremic@ucdavis.edu 22jan2001}
00233 //jeremic@ucdavis.edu 22jan2001
00234 //jeremic@ucdavis.edu 22jan2001const Tensor& J2PlaneStrain :: getStrainTensor( ) 
00235 //jeremic@ucdavis.edu 22jan2001{
00236 //jeremic@ucdavis.edu 22jan2001  return rank2 ;
00237 //jeremic@ucdavis.edu 22jan2001}
00238 
00239 
00240 //this is frank's problem
00241 int J2PlaneStrain :: sendSelf(int commitTag, Channel &theChannel)
00242 {
00243   return -1 ;
00244 }
00245 
00246 int J2PlaneStrain :: recvSelf(int commitTag, Channel &theChannel, 
00247                        FEM_ObjectBroker &theBroker)
00248 {
00249   return -1 ;
00250 }
00251 
00252 
00253 
00254 
00255 
00256 
00257 
00258 
00259 
Copyright Contact Us