00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef FourNodeQuadUP_h
00030
00031 #define FourNodeQuadUP_h
00032
00033
00034
00035 #ifndef _bool_h
00036
00037 #include "bool.h"
00038
00039 #endif
00040
00041
00042
00043 #include <Element.h>
00044
00045 #include <Matrix.h>
00046
00047 #include <Vector.h>
00048
00049 #include <ID.h>
00050
00051
00052
00053 class Node;
00054
00055 class NDMaterial;
00056
00057 class Response;
00058
00059
00060
00061 class FourNodeQuadUP : public Element
00062
00063 {
00064
00065 public:
00066
00067 FourNodeQuadUP(int tag, int nd1, int nd2, int nd3, int nd4,
00068
00069 NDMaterial &m, const char *type,
00070
00071 double t, double bulk, double rhof, double perm1, double perm2,
00072
00073 double b1 = 0.0, double b2 = 0.0, double p = 0.0);
00074
00075
00076
00077 FourNodeQuadUP();
00078
00079 virtual ~FourNodeQuadUP();
00080
00081 const char *getClassType(void) const {return "FourNodeQuadUP";};
00082
00083 int getNumExternalNodes(void) const;
00084
00085 const ID &getExternalNodes(void);
00086
00087 Node **getNodePtrs(void);
00088
00089
00090
00091 int getNumDOF(void);
00092
00093 void setDomain(Domain *theDomain);
00094
00095
00096
00097
00098
00099 int commitState(void);
00100
00101 int revertToLastCommit(void);
00102
00103 int revertToStart(void);
00104
00105 int update(void);
00106
00107
00108
00109
00110
00111 const Matrix &getTangentStiff(void);
00112
00113 const Matrix &getInitialStiff(void);
00114
00115 const Matrix &getDamp(void);
00116
00117 const Matrix &getMass(void);
00118
00119
00120
00121 void zeroLoad();
00122
00123 int addLoad(ElementalLoad *theLoad, double loadFactor);
00124
00125 int addInertiaLoadToUnbalance(const Vector &accel);
00126
00127 const Vector &getResistingForce(void);
00128
00129 const Vector &getResistingForceIncInertia(void);
00130
00131
00132
00133
00134
00135 int sendSelf(int commitTag, Channel &theChannel);
00136
00137 int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker
00138
00139 &theBroker);
00140
00141 int displaySelf(Renderer &theViewer, int displayMode, float fact);
00142
00143 void Print(OPS_Stream &s, int flag =0);
00144
00145
00146
00147 Response *setResponse(const char **argv, int argc, Information &eleInformation, OPS_Stream &s);
00148
00149 int getResponse(int responseID, Information &eleInformation);
00150
00151
00152 int setParameter(const char **argv, int argc, Parameter ¶m);
00153 int updateParameter(int parameterID, Information &info);
00154
00155
00156
00157
00158
00159
00160
00161 friend class PyLiq1;
00162
00163 friend class TzLiq1;
00164
00165
00166
00167 protected:
00168
00169
00170
00171 private:
00172
00173
00174
00175
00176
00177
00178
00179 NDMaterial **theMaterial;
00180
00181
00182
00183 ID connectedExternalNodes;
00184
00185
00186
00187 Node *nd1Ptr;
00188
00189 Node *nd2Ptr;
00190
00191 Node *nd3Ptr;
00192
00193 Node *nd4Ptr;
00194
00195
00196
00197 static Matrix K;
00198
00199 static Vector P;
00200
00201 Vector Q;
00202
00203 double b[2];
00204
00205 Vector pressureLoad;
00206
00207
00208
00209 double thickness;
00210
00211 double rho;
00212
00213 double kc;
00214
00215 double pressure;
00216
00217
00218
00219 double perm[2];
00220
00221
00222
00223 static double shp[3][4][4];
00224
00225 static double pts[4][2];
00226
00227 static double wts[4];
00228
00229 static double dvol[4];
00230
00231 static double shpBar[3][4];
00232
00233
00234
00235
00236
00237 double mixtureRho(int ipt);
00238
00239 void shapeFunction(void);
00240
00241 void setPressureLoadAtNodes(void);
00242
00243
00244
00245 Matrix *Ki;
00246
00247 static Node *theNodes[4];
00248
00249 };
00250
00251
00252
00253 #endif