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 #ifndef FourNodeQuad_h
00032 #define FourNodeQuad_h
00033
00034 #ifndef _bool_h
00035 #include "bool.h"
00036 #endif
00037
00038 #include <Element.h>
00039 #include <Matrix.h>
00040 #include <Vector.h>
00041 #include <ID.h>
00042
00043 class Node;
00044 class NDMaterial;
00045 class Response;
00046
00047 class FourNodeQuad : public Element
00048 {
00049 public:
00050 FourNodeQuad(int tag, int nd1, int nd2, int nd3, int nd4,
00051 NDMaterial &m, const char *type,
00052 double t, double pressure = 0.0, double rho = 0.0,
00053 double b1 = 0.0, double b2 = 0.0);
00054 FourNodeQuad();
00055 ~FourNodeQuad();
00056
00057 const char *getClassType(void) const {return "FourNodeQuad";};
00058
00059 int getNumExternalNodes(void) const;
00060 const ID &getExternalNodes(void);
00061 Node **getNodePtrs(void);
00062
00063 int getNumDOF(void);
00064 void setDomain(Domain *theDomain);
00065
00066
00067 int commitState(void);
00068 int revertToLastCommit(void);
00069 int revertToStart(void);
00070 int update(void);
00071
00072
00073 const Matrix &getTangentStiff(void);
00074 const Matrix &getInitialStiff(void);
00075 const Matrix &getMass(void);
00076
00077 void zeroLoad();
00078 int addLoad(ElementalLoad *theLoad, double loadFactor);
00079 int addInertiaLoadToUnbalance(const Vector &accel);
00080
00081 const Vector &getResistingForce(void);
00082 const Vector &getResistingForceIncInertia(void);
00083
00084
00085 int sendSelf(int commitTag, Channel &theChannel);
00086 int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker
00087 &theBroker);
00088 int displaySelf(Renderer &theViewer, int displayMode, float fact);
00089 void Print(OPS_Stream &s, int flag =0);
00090
00091 Response *setResponse(const char **argv, int argc,
00092 Information &eleInformation, OPS_Stream &s);
00093
00094 int getResponse(int responseID, Information &eleInformation);
00095
00096 int setParameter(const char **argv, int argc, Parameter ¶m);
00097 int updateParameter(int parameterID, Information &info);
00098
00099
00100 friend class PyLiq1;
00101 friend class TzLiq1;
00102
00103 protected:
00104
00105 private:
00106
00107
00108 NDMaterial **theMaterial;
00109
00110 ID connectedExternalNodes;
00111
00112 Node *theNodes[4];
00113
00114 static double matrixData[64];
00115 static Matrix K;
00116 static Vector P;
00117 Vector Q;
00118 double b[2];
00119 Vector pressureLoad;
00120
00121 double thickness;
00122 double rho;
00123 double pressure;
00124
00125 static double shp[3][4];
00126 static double pts[4][2];
00127 static double wts[4];
00128
00129
00130 double shapeFunction(double xi, double eta);
00131 void setPressureLoadAtNodes(void);
00132
00133 Matrix *Ki;
00134 };
00135
00136 #endif
00137