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