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

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