ElasticMaterial.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.6 $
00022 // $Date: 2006/09/05 22:20:15 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/material/uniaxial/ElasticMaterial.cpp,v $
00024                                                                         
00025                                                                         
00026 // File: ~/material/ElasticMaterial.C
00027 //
00028 // Written: fmk 
00029 // Created: 07/98
00030 // Revision: A
00031 //
00032 // Description: This file contains the class implementation for 
00033 // ElasticMaterial. 
00034 //
00035 // What: "@(#) ElasticMaterial.C, revA"
00036 
00037 #include <ElasticMaterial.h>
00038 #include <Vector.h>
00039 #include <Channel.h>
00040 #include <Information.h>
00041 #include <Parameter.h>
00042 
00043 #include <OPS_Globals.h>
00044 
00045 ElasticMaterial::ElasticMaterial(int tag, double e, double et)
00046 :UniaxialMaterial(tag,MAT_TAG_ElasticMaterial),
00047  trialStrain(0.0),  trialStrainRate(0.0),
00048  E(e), eta(et), parameterID(0)
00049 {
00050 
00051 }
00052 
00053 ElasticMaterial::ElasticMaterial()
00054 :UniaxialMaterial(0,MAT_TAG_ElasticMaterial),
00055  trialStrain(0.0),  trialStrainRate(0.0),
00056  E(0.0), eta(0.0), parameterID(0)
00057 {
00058 
00059 }
00060 
00061 ElasticMaterial::~ElasticMaterial()
00062 {
00063   // does nothing
00064 }
00065 
00066 int 
00067 ElasticMaterial::setTrialStrain(double strain, double strainRate)
00068 {
00069     trialStrain     = strain;
00070     trialStrainRate = strainRate;
00071     return 0;
00072 }
00073 
00074 
00075 int 
00076 ElasticMaterial::setTrial(double strain, double &stress, double &tangent, double strainRate)
00077 {
00078     trialStrain     = strain;
00079     trialStrainRate = strainRate;
00080 
00081     stress = E*trialStrain + eta*trialStrainRate;
00082     tangent = E;
00083 
00084     return 0;
00085 }
00086 
00087 double 
00088 ElasticMaterial::getStress(void)
00089 {
00090     return E*trialStrain + eta*trialStrainRate;
00091 }
00092 
00093 
00094 int 
00095 ElasticMaterial::commitState(void)
00096 {
00097     return 0;
00098 }
00099 
00100 
00101 int 
00102 ElasticMaterial::revertToLastCommit(void)
00103 {
00104     return 0;
00105 }
00106 
00107 
00108 int 
00109 ElasticMaterial::revertToStart(void)
00110 {
00111     trialStrain      = 0.0;
00112     trialStrainRate  = 0.0;
00113     return 0;
00114 }
00115 
00116 UniaxialMaterial *
00117 ElasticMaterial::getCopy(void)
00118 {
00119     ElasticMaterial *theCopy = new ElasticMaterial(this->getTag(),E,eta);
00120     theCopy->trialStrain     = trialStrain;
00121     theCopy->trialStrainRate = trialStrainRate;
00122     return theCopy;
00123 }
00124 
00125 int 
00126 ElasticMaterial::sendSelf(int cTag, Channel &theChannel)
00127 {
00128   int res = 0;
00129   static Vector data(3);
00130   data(0) = this->getTag();
00131   data(1) = E;
00132   data(2) = eta;
00133 
00134   res = theChannel.sendVector(this->getDbTag(), cTag, data);
00135   if (res < 0) 
00136     opserr << "ElasticMaterial::sendSelf() - failed to send data\n";
00137 
00138   return res;
00139 }
00140 
00141 int 
00142 ElasticMaterial::recvSelf(int cTag, Channel &theChannel, 
00143                           FEM_ObjectBroker &theBroker)
00144 {
00145   int res = 0;
00146   static Vector data(3);
00147   res = theChannel.recvVector(this->getDbTag(), cTag, data);
00148   
00149   if (res < 0) {
00150       opserr << "ElasticMaterial::recvSelf() - failed to receive data\n";
00151       E = 0; 
00152       this->setTag(0);      
00153   }
00154   else {
00155     this->setTag(data(0));
00156     E   = data(1);
00157     eta = data(2);
00158   }
00159     
00160   return res;
00161 }
00162 
00163 void 
00164 ElasticMaterial::Print(OPS_Stream &s, int flag)
00165 {
00166     s << "Elastic tag: " << this->getTag() << endln;
00167     s << "  E: " << E << " eta: " << eta << endln;
00168 }
00169 
00170 int
00171 ElasticMaterial::setParameter(const char **argv, int argc, Parameter &param)
00172 {
00173   if (argc < 1)
00174     return -1;
00175 
00176   if (strcmp(argv[0],"E") == 0)
00177     return param.addObject(1, this);
00178 
00179   else if (strcmp(argv[0],"eta") == 0)
00180     return param.addObject(2, this);
00181 
00182   else
00183     return -1;
00184 }
00185 
00186 int 
00187 ElasticMaterial::updateParameter(int parameterID, Information &info)
00188 {
00189   switch(parameterID) {
00190   case 1:
00191     E = info.theDouble;
00192     return 0;
00193   case 2:
00194     eta = info.theDouble;
00195     return 0;
00196   default:
00197     return -1;
00198   }
00199 }
00200 
00201 int
00202 ElasticMaterial::activateParameter(int paramID)
00203 {
00204   parameterID = paramID;
00205 
00206   return 0;
00207 }
00208 
00209 double
00210 ElasticMaterial::getStressSensitivity(int gradNumber, bool conditional)
00211 {
00212   if (parameterID == 1)
00213     return trialStrain;
00214   else if (parameterID == 2)
00215     return trialStrainRate;
00216   else
00217     return 0.0;
00218 }
00219 
00220 double
00221 ElasticMaterial::getInitialTangentSensitivity(int gradNumber)
00222 {
00223   return 0.0;
00224 }
00225 
00226 int
00227 ElasticMaterial::commitSensitivity(double strainGradient,
00228                                    int gradNumber, int numGrads)
00229 {
00230   // Nothing to commit ... path independent
00231   return 0.0;
00232 }

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