00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00016
00017
00018 #ifndef EIGHTNODE_BRICK_U_P_H
00019 #define EIGHTNODE_BRICK_U_P_H
00020
00021 #ifndef _bool_h
00022 #include "bool.h"
00023 #endif
00024
00025 #include <Information.h>
00026 #include <ElementResponse.h>
00027 #include <ElementalLoad.h>
00028 #include <Domain.h>
00029 #include <Node.h>
00030 #include <Channel.h>
00031 #include <FEM_ObjectBroker.h>
00032 #include <Renderer.h>
00033 #include <OPS_Globals.h>
00034
00035 #include <Element.h>
00036 #include <NDMaterial.h>
00037
00038 #include <Vector.h>
00039 #include <Matrix.h>
00040 #include <BJtensor.h>
00041 #include <stresst.h>
00042 #include <straint.h>
00043
00044 class EightNode_Brick_u_p: public Element
00045 {
00046 public:
00047 EightNode_Brick_u_p(int element_number,
00048 int node_numb_1, int node_numb_2, int node_numb_3, int node_numb_4,
00049 int node_numb_5, int node_numb_6, int node_numb_7, int node_numb_8,
00050 NDMaterial *Globalmmodel, double b1, double b2, double b3,
00051 double nf, double alphaf, double rs, double rf,
00052 double permb_x, double permb_y, double permb_z,
00053 double kks, double kkf);
00054 EightNode_Brick_u_p ();
00055 ~EightNode_Brick_u_p();
00056
00057 const char *getClassType(void) const {return "EightNode_Brick_u_p";};
00058
00059
00060 int getNumExternalNodes(void) const;
00061 const ID &getExternalNodes(void);
00062 Node **getNodePtrs(void);
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 &getDamp(void);
00076 const Matrix &getMass(void);
00077
00078 void zeroLoad(void);
00079 int addLoad(ElementalLoad *theLoad, double loadFactor);
00080 int addInertiaLoadToUnbalance(const Vector &accel);
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 &theBroker);
00087 int displaySelf(Renderer &theViewer, int displayMode, float fact);
00088 void Print(OPS_Stream &s, int flag =0);
00089
00090 Response *setResponse(const char **argv, int argc, Information &eleInfo, OPS_Stream &s);
00091 int getResponse(int responseID, Information &eleInformation);
00092
00093
00094
00095
00096 private:
00097 tensor shapeFunction(double, double, double);
00098 tensor shapeFunctionDerivative(double, double, double);
00099 tensor getNodesCrds();
00100 tensor getNodesDisp();
00101 tensor Jacobian_3D(double, double, double);
00102 tensor Jacobian_3Dinv(double, double, double);
00103 tensor dh_Global(double, double, double);
00104
00105 tensor getGaussPts(void);
00106 double getPorePressure(double, double, double);
00107
00108 tensor getStiffnessTensorQ();
00109 tensor getStiffnessTensorH();
00110 tensor getStiffnessTensorKep();
00111 tensor getMassTensorM1();
00112 tensor getDampingTensorS();
00113 const Vector& getInternalForce();
00114 const Vector& getForceU();
00115 const Vector& getForceP();
00116
00117 const Matrix& getStiff(int Ki_flag);
00118 const Matrix& getStiff00(void);
00119
00120 private:
00121 ID connectedExternalNodes;
00122 Node *theNodes[8] ;
00123 NDMaterial **theMaterial;
00124
00125 static Matrix MCK;
00126 static Vector P;
00127
00128 static const int Num_IntegrationPts;
00129 static const int Num_TotalGaussPts;
00130 static const int Num_Nodes;
00131 static const int Num_Dim;
00132 static const int Num_Dof;
00133 static const int Num_ElemDof;
00134 static const double pts[2];
00135 static const double wts[2];
00136 static tensor perm;
00137
00138 Vector bf;
00139 double nf;
00140 double alpha;
00141 double rho_s;
00142 double rho_f;
00143 double ks;
00144 double kf;
00145
00146 Vector *Q;
00147 Matrix *Ki;
00148 };
00149
00150
00151 #endif
00152