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 #ifndef __ELAS2DT3_H
00037 #define __ELAS2DT3_H
00038
00039
00040 #include "Equa_Solid.h"
00041 #include "Triang3.h"
00042 #include "Line2.h"
00043
00044 namespace OFELI {
00045
00064 class Elas2DT3 : public Equa_Solid<double,3,6,2,4>
00065 {
00066
00067 public :
00068
00071 Elas2DT3()
00072 {
00073 _tr = NULL;
00074 _ln = NULL;
00075 #ifdef _OFELI_DEBUG
00076 std::clog << "An instance of class Elas2DT3 is constructed.\n";
00077 std::clog << "File : " << __FILE__ << ", Line : " << __LINE__ << endl;
00078 #endif
00079 }
00080
00082 Elas2DT3(const Element *el)
00083 {
00084 ElementSet(el);
00085 #ifdef _OFELI_DEBUG
00086 std::clog << "An instance of class Elas2DT3 is constructed.\n";
00087 std::clog << "File : " << __FILE__ << ", Line : " << __LINE__ << endl;
00088 #endif
00089 }
00090
00092 Elas2DT3(const Side *sd)
00093 {
00094 SideSet(sd);
00095 #ifdef _OFELI_DEBUG
00096 std::clog << "An instance of class Elas2DT3 is constructed.\n";
00097 std::clog << "File : " << __FILE__ << ", Line : " << __LINE__ << endl;
00098 #endif
00099 }
00100
00106 Elas2DT3(const Element *el, const Vect<double> &u, double time=0.);
00107
00115 Elas2DT3(const Element *el, const Vect<double> &u, double time, double deltat, int scheme);
00116
00122 Elas2DT3(const Side *sd, const Vect<double> &u, double time=0.);
00123
00131 Elas2DT3(const Side *sd, const Vect<double> &u, double time, double deltat, int scheme);
00132
00133 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 #endif
00147
00149 ~Elas2DT3();
00150
00153 void Media(double E, double nu, double rho);
00154
00156 void PlaneStrain();
00157
00160 void PlaneStrain(double E, double nu);
00161
00163 void PlaneStress();
00164
00167 void PlaneStress(double E, double nu);
00168
00170 void ElementSet(const Element *el);
00171
00173 void SideSet(const Side *sd);
00174
00175 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00177 void Build();
00178 #endif
00179
00182 void LMassToLHS(double coef=1.);
00183
00186 void LMassToRHS(double coef=1.);
00187
00190 void LMass(double coef=1.) { LMassToLHS(coef); LMassToRHS(coef); };
00191
00194 void MassToLHS(double coef=1.);
00195
00198 void MassToRHS(double coef=1.);
00199
00202 void Mass(double coef=1.) { MassToLHS(coef); MassToRHS(coef); };
00203
00206 void Deviator(double coef=1.);
00207
00210 void DeviatorToRHS(double coef=1.);
00211
00214 void Dilatation(double coef=1.);
00215
00219 void DilatationToRHS(double coef=1.);
00220
00223 void BodyRHS(UserData<double> &ud);
00224
00230 void BodyRHS(const NodeVect<double> &f, int opt=LOCAL_ARRAY);
00231
00234 void BoundaryRHS(UserData<double> &ud);
00235
00237 void BoundaryRHS(SideVect<double> &f);
00238
00242 int SignoriniContact(UserData<double> &ud, double coef=1.e07);
00243
00245 int SignoriniContact(SideVect<double> &f, double coef=1.e07);
00246
00249 void Reaction(SideVect<double> &r);
00250
00253 void ContactPressure(const SideVect<double> &f, double penal, Point<double> &p);
00254
00257 void Strain(Vect<double> &eps);
00258
00264 void Stress(Vect<double> &s, double &vm);
00265
00271 void Periodic(double coef=1.e20);
00272
00273 private :
00274
00275 double _E1, _E2, _E3, _E6;
00276 Triang3 *_tr;
00277 Line2 *_ln;
00278 };
00279
00280 }
00281
00282 #endif