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 #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
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