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 #include <ElasticIsotropicBeamFiber.h>
00032 #include <Channel.h>
00033 #include <Tensor.h>
00034
00035 Vector ElasticIsotropicBeamFiber::sigma(3);
00036 Matrix ElasticIsotropicBeamFiber::D(3,3);
00037
00038 ElasticIsotropicBeamFiber::ElasticIsotropicBeamFiber
00039 (int tag, double E, double nu, double rho) :
00040 ElasticIsotropicMaterial (tag, ND_TAG_ElasticIsotropicBeamFiber, E, nu, rho),
00041 Tepsilon(3)
00042 {
00043
00044 }
00045
00046 ElasticIsotropicBeamFiber::ElasticIsotropicBeamFiber():
00047 ElasticIsotropicMaterial (0, ND_TAG_ElasticIsotropicBeamFiber, 0.0, 0.0),
00048 Tepsilon(3)
00049 {
00050
00051 }
00052
00053 ElasticIsotropicBeamFiber::~ElasticIsotropicBeamFiber ()
00054 {
00055
00056 }
00057
00058 int
00059 ElasticIsotropicBeamFiber::setTrialStrain (const Vector &strain)
00060 {
00061 Tepsilon = strain;
00062
00063 return 0;
00064 }
00065
00066 int
00067 ElasticIsotropicBeamFiber::setTrialStrain (const Vector &strain, const Vector &rate)
00068 {
00069 Tepsilon = strain;
00070
00071 return 0;
00072 }
00073
00074 int
00075 ElasticIsotropicBeamFiber::setTrialStrainIncr (const Vector &strain)
00076 {
00077 return 0;
00078 }
00079
00080 int
00081 ElasticIsotropicBeamFiber::setTrialStrainIncr (const Vector &strain, const Vector &rate)
00082 {
00083 return 0;
00084 }
00085
00086 const Matrix&
00087 ElasticIsotropicBeamFiber::getTangent (void)
00088 {
00089 double mu2 = E/(1.0+v);
00090 double lam = v*mu2/(1.0-2.0*v);
00091 double mu = 0.50*mu2;
00092
00093 D(0,0) = mu*(mu2+3.0*lam)/(mu+lam);
00094 D(1,1) = mu;
00095 D(2,2) = mu;
00096
00097 return D;
00098 }
00099
00100 const Matrix&
00101 ElasticIsotropicBeamFiber::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) = mu*(mu2+3.0*lam)/(mu+lam);
00108 D(1,1) = mu;
00109 D(2,2) = mu;
00110
00111 return D;
00112 }
00113
00114 const Vector&
00115 ElasticIsotropicBeamFiber::getStress (void)
00116 {
00117 double mu2 = E/(1.0+v);
00118 double lam = v*mu2/(1.0-2.0*v);
00119 double mu = 0.50*mu2;
00120
00121 sigma(0) = mu*(mu2+3.0*lam)/(mu+lam)*Tepsilon(0);
00122 sigma(1) = mu*Tepsilon(1);
00123 sigma(2) = mu*Tepsilon(2);
00124
00125 return sigma;
00126 }
00127
00128 const Vector&
00129 ElasticIsotropicBeamFiber::getStrain (void)
00130 {
00131 return Tepsilon;
00132 }
00133
00134 int
00135 ElasticIsotropicBeamFiber::commitState (void)
00136 {
00137 return 0;
00138 }
00139
00140 int
00141 ElasticIsotropicBeamFiber::revertToLastCommit (void)
00142 {
00143 return 0;
00144 }
00145
00146 int
00147 ElasticIsotropicBeamFiber::revertToStart (void)
00148 {
00149 return 0;
00150 }
00151
00152 NDMaterial*
00153 ElasticIsotropicBeamFiber::getCopy (void)
00154 {
00155 ElasticIsotropicBeamFiber *theCopy =
00156 new ElasticIsotropicBeamFiber (this->getTag(), E, v, rho);
00157
00158 return theCopy;
00159 }
00160
00161 const char*
00162 ElasticIsotropicBeamFiber::getType (void) const
00163 {
00164 return "BeamFiber";
00165 }
00166
00167 int
00168 ElasticIsotropicBeamFiber::getOrder (void) const
00169 {
00170 return 3;
00171 }
00172