00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013
00014
00015
00016
00017 #ifndef NineFourNodeQuadUP_h
00018 #define NineFourNodeQuadUP_h
00019
00020 #ifndef _bool_h
00021 #include "bool.h"
00022 #endif
00023
00024 #include <Element.h>
00025 #include <Matrix.h>
00026 #include <Vector.h>
00027 #include <ID.h>
00028
00029 class Node;
00030 class NDMaterial;
00031 class Response;
00032
00033 class NineFourNodeQuadUP : public Element
00034 {
00035 public:
00036 NineFourNodeQuadUP(int tag, int nd1, int nd2, int nd3, int nd4,
00037 int nd5, int nd6, int nd7, int nd8, int nd9,
00038 NDMaterial &m, const char *type,
00039 double t, double bulk, double rhof, double perm1, double perm2,
00040 double b1 = 0.0, double b2 = 0.0);
00041
00042 NineFourNodeQuadUP();
00043 virtual ~NineFourNodeQuadUP();
00044
00045 int getNumExternalNodes(void) const;
00046 const ID &getExternalNodes(void);
00047 Node **getNodePtrs(void);
00048
00049 int getNumDOF(void);
00050 void setDomain(Domain *theDomain);
00051
00052
00053 int commitState(void);
00054 int revertToLastCommit(void);
00055 int revertToStart(void);
00056 int update(void);
00057
00058
00059 const Matrix &getTangentStiff(void);
00060 const Matrix &getInitialStiff(void);
00061 const Matrix &getDamp(void);
00062 const Matrix &getMass(void);
00063
00064 void zeroLoad();
00065 int addLoad(ElementalLoad *theLoad, double loadFactor);
00066 int addInertiaLoadToUnbalance(const Vector &accel);
00067 const Vector &getResistingForce(void);
00068 const Vector &getResistingForceIncInertia(void);
00069
00070
00071 int sendSelf(int commitTag, Channel &theChannel);
00072 int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker
00073 &theBroker);
00074 int displaySelf(Renderer &theViewer, int displayMode, float fact);
00075 void Print(OPS_Stream &s, int flag =0);
00076
00077 Response *setResponse(const char **argv, int argc, Information &eleInformation);
00078 int getResponse(int responseID, Information &eleInformation);
00079
00080 int setParameter(const char **argv, int argc, Information &info);
00081 int updateParameter(int parameterID, Information &info);
00082
00083
00084 friend class PyLiq1;
00085 friend class TzLiq1;
00086
00087 protected:
00088
00089 private:
00090
00091
00092
00093 NDMaterial **theMaterial;
00094
00095 ID connectedExternalNodes;
00096
00097 static Matrix K;
00098 static Vector P;
00099 Vector Q;
00100 double b[2];
00101 Matrix *Ki;
00102 Node *theNodes[9];
00103
00104 double thickness;
00105 double rho;
00106 double kc;
00107 double perm[2];
00108 static const int nintu;
00109 static const int nintp;
00110 static const int nenu;
00111 static const int nenp;
00112
00113 static double shgu[3][9][9];
00114 static double shgp[3][4][4];
00115 static double shgq[3][9][4];
00116 static double shlu[3][9][9];
00117 static double shlp[3][4][4];
00118 static double shlq[3][9][4];
00119 static double wu[9];
00120 static double wp[4];
00121 static double dvolu[9];
00122 static double dvolp[4];
00123 static double dvolq[4];
00124
00125
00126 double mixtureRho(int ipt);
00127 void shapeFunction(double *w, int nint, int nen, int mode);
00128 void globalShapeFunction(double *dvol, double *w, int nint, int nen, int mode);
00129 };
00130
00131 #endif
00132