00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
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
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 ¶m)
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
00231 return 0.0;
00232 }