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