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 __ELAS2DQ4_H
00037 #define __ELAS2DQ4_H
00038
00039
00040 #include "Equa_Solid.h"
00041 #include "Quad4.h"
00042 #include "Line2.h"
00043
00044 namespace OFELI {
00045
00064 class Elas2DQ4 : virtual public Equa_Solid<double,4,8,2,4>
00065 {
00066
00067 public :
00068
00071 Elas2DQ4()
00072 {
00073 _quad = NULL;
00074 _ln = NULL;
00075 #ifdef _OFELI_DEBUG
00076 std::clog << "An instance of class Elas2DQ4 is constructed.\n";
00077 std::clog << "File: " << __FILE__ << ", Line: " << __LINE__ << endl;
00078 #endif
00079 }
00080
00082 Elas2DQ4(const Element *el);
00083
00085 Elas2DQ4(const Side *sd);
00086
00092 Elas2DQ4(const Element *element, const Vect<double> &u, const double &time=0.);
00093
00099 Elas2DQ4(const Side *side, const Vect<double> &u, const double &time=0.);
00100
00102 ~Elas2DQ4();
00103
00105 void PlaneStrain();
00106
00111 void PlaneStrain(double E, double nu);
00112
00114 void PlaneStress();
00115
00120 void PlaneStress(double E, double nu);
00121
00123 void LMassToLHS(double coef=1.);
00124
00126 void LMassToRHS(double coef=1.);
00127
00129 void LMass(double coef) { LMassToLHS(coef); LMassToRHS(coef); }
00130
00132 void Mass(double coef=1.) { coef=1; cout << "Sorry, consistent mass matrix is not implemented !\n"; }
00133
00135 void Deviator(double coef=1.);
00136
00138
00139 void DeviatorToRHS(double coef=1.);
00140
00142 void Dilatation(double coef=1.);
00143
00146 void DilatationToRHS(double coef=1.);
00147
00150 void BodyRHS(UserData<double> &ud);
00151
00157 void BodyRHS(const Vect<double> &bf, int opt=LOCAL_ARRAY);
00158
00161 void BoundaryRHS(UserData<double> &ud);
00162
00168 void BoundaryRHS(const Vect<double> &sf, int opt=LOCAL_ARRAY);
00169
00171 void SignoriniContact(UserData<double> &ud, double coef=1.e07);
00172
00175 void Strain(LocalVect<double,3> &eps);
00176
00181 void Stress(LocalVect<double,3> &s, double &vm);
00182
00188 void Stress(LocalVect<double,3> &sigma, LocalVect<double,3> &s, double &vm);
00189
00190 private :
00191
00192 double _E1, _E2, _E3, _E6;
00193 Quad4 *_quad;
00194 Line2 *_ln;
00195 double _g[2], _w[2], _xl[4], _yl[4];
00196 Point<double> _cg;
00197 };
00198
00199 }
00200
00201 #endif