ElasticIsotropicPlaneStrain2D.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 ** Developed by:                                                      **
00015 **   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
00016 **   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
00017 **   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
00018 **                                                                    **
00019 ** ****************************************************************** */
00020                                                                         
00021 // $Revision: 1.5 $
00022 // $Date: 2002/12/05 22:49:09 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/material/nD/ElasticIsotropicPlaneStrain2D.cpp,v $
00024                                                                         
00025                                                                         
00026 #include <ElasticIsotropicPlaneStrain2D.h>                                                                        
00027 #include <Channel.h>
00028 #include <Tensor.h>
00029 
00030 Vector ElasticIsotropicPlaneStrain2D::sigma(3);
00031 Matrix ElasticIsotropicPlaneStrain2D::D(3,3);
00032 
00033 ElasticIsotropicPlaneStrain2D::ElasticIsotropicPlaneStrain2D
00034 (int tag, double E, double nu, double rho) :
00035  ElasticIsotropicMaterial (tag, ND_TAG_ElasticIsotropicPlaneStrain2d, E, nu, rho),
00036  epsilon(3)
00037 {
00038 
00039 }
00040 
00041 ElasticIsotropicPlaneStrain2D::ElasticIsotropicPlaneStrain2D():
00042  ElasticIsotropicMaterial (0, ND_TAG_ElasticIsotropicPlaneStrain2d, 0.0, 0.0),
00043  epsilon(3)
00044 {
00045 
00046 }
00047 
00048 ElasticIsotropicPlaneStrain2D::~ElasticIsotropicPlaneStrain2D ()
00049 {
00050 
00051 }
00052 
00053 int
00054 ElasticIsotropicPlaneStrain2D::setTrialStrain (const Vector &strain)
00055 {
00056   epsilon = strain;
00057   return 0;
00058 }
00059 
00060 int
00061 ElasticIsotropicPlaneStrain2D::setTrialStrain (const Vector &strain, const Vector &rate)
00062 {
00063   epsilon = strain;
00064   return 0;
00065 }
00066 
00067 int
00068 ElasticIsotropicPlaneStrain2D::setTrialStrainIncr (const Vector &strain)
00069 {
00070   epsilon += strain;
00071   return 0;
00072 }
00073 
00074 int
00075 ElasticIsotropicPlaneStrain2D::setTrialStrainIncr (const Vector &strain, const Vector &rate)
00076 {
00077   epsilon += strain;
00078   return 0;
00079 }
00080 
00081 const Matrix&
00082 ElasticIsotropicPlaneStrain2D::getTangent (void)
00083 {
00084         double mu2 = E/(1.0+v);
00085         double lam = v*mu2/(1.0-2.0*v);
00086         double mu = 0.50*mu2;
00087 
00088         D(0,0) = D(1,1) = mu2+lam;
00089         D(0,1) = D(1,0) = lam;
00090         D(2,2) = mu;
00091 
00092         return D;
00093 }
00094 
00095 const Matrix&
00096 ElasticIsotropicPlaneStrain2D::getInitialTangent (void)
00097 {
00098         double mu2 = E/(1.0+v);
00099         double lam = v*mu2/(1.0-2.0*v);
00100         double mu = 0.50*mu2;
00101 
00102         D(0,0) = D(1,1) = mu2+lam;
00103         D(0,1) = D(1,0) = lam;
00104         D(2,2) = mu;
00105 
00106         return D;
00107 }
00108 
00109 const Vector&
00110 ElasticIsotropicPlaneStrain2D::getStress (void)
00111 {
00112   double mu2 = E/(1.0+v);
00113   double lam = v*mu2/(1.0-2.0*v);
00114   double mu = 0.50*mu2;
00115 
00116   double eps0 = epsilon(0);
00117   double eps1 = epsilon(1);
00118 
00119   mu2 += lam;
00120 
00121   //sigma = D*epsilon;
00122   sigma(0) = mu2*eps0 + lam*eps1;
00123   sigma(1) = lam*eps0 + mu2*eps1;
00124   sigma(2) = mu*epsilon(2);
00125         
00126   return sigma;
00127 }
00128 
00129 const Vector&
00130 ElasticIsotropicPlaneStrain2D::getStrain (void)
00131 {
00132   return epsilon;
00133 }
00134 
00135 int
00136 ElasticIsotropicPlaneStrain2D::commitState (void)
00137 {
00138   return 0;
00139 }
00140 
00141 int
00142 ElasticIsotropicPlaneStrain2D::revertToLastCommit (void)
00143 {
00144   return 0;
00145 }
00146 
00147 int
00148 ElasticIsotropicPlaneStrain2D::revertToStart (void)
00149 {
00150   epsilon.Zero();
00151   return 0;
00152 }
00153 
00154 NDMaterial*
00155 ElasticIsotropicPlaneStrain2D::getCopy (void)
00156 {
00157         ElasticIsotropicPlaneStrain2D *theCopy =
00158                 new ElasticIsotropicPlaneStrain2D (this->getTag(), E, v, rho);
00159 
00160         theCopy->epsilon = epsilon;
00161 
00162         return theCopy;
00163 }
00164 
00165 const char*
00166 ElasticIsotropicPlaneStrain2D::getType (void) const
00167 {
00168         return "PlaneStrain";
00169 }
00170 
00171 int
00172 ElasticIsotropicPlaneStrain2D::getOrder (void) const
00173 {
00174         return 3;
00175 }
00176 

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