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
00032
00033
00034 #ifndef TWENTYNODEBRICK_U_P_U_H
00035 #define TWENTYNODEBRICK_U_P_U_H
00036
00037 #ifndef _bool_h
00038 #include "bool.h"
00039 #endif
00040
00041 #include <Information.h>
00042 #include <ElementResponse.h>
00043 #include <ElementalLoad.h>
00044 #include <Domain.h>
00045 #include <Node.h>
00046 #include <Channel.h>
00047 #include <FEM_ObjectBroker.h>
00048 #include <Renderer.h>
00049 #include <OPS_Globals.h>
00050
00051 #include <Element.h>
00052 #include <NDMaterial.h>
00053
00054 #include <Vector.h>
00055 #include <Matrix.h>
00056 #include <BJtensor.h>
00057 #include <stresst.h>
00058 #include <straint.h>
00059
00060 class TwentyNodeBrick_u_p_U: public Element
00061 {
00062 public:
00063 TwentyNodeBrick_u_p_U(int element_number,
00064 int node_numb_1, int node_numb_2, int node_numb_3, int node_numb_4,
00065 int node_numb_5, int node_numb_6, int node_numb_7, int node_numb_8,
00066 int node_numb_9, int node_numb_10, int node_numb_11, int node_numb_12,
00067 int node_numb_13, int node_numb_14, int node_numb_15, int node_numb_16,
00068 int node_numb_17, int node_numb_18, int node_numb_19, int node_numb_20,
00069 NDMaterial *Globalmmodel, double b1, double b2, double b3,
00070 double nn, double alf, double rs,double rf,
00071 double permb_x, double permb_y, double permb_z,
00072 double kks, double kkf, double pp);
00073 TwentyNodeBrick_u_p_U ();
00074 ~TwentyNodeBrick_u_p_U();
00075
00076 const char *getClassType(void) const {return "TwentyNodeBrick_u_P_U";};
00077
00078
00079 int getNumExternalNodes(void) const;
00080 const ID &getExternalNodes(void);
00081 Node **getNodePtrs(void);
00082 int getNumDOF(void);
00083 void setDomain(Domain *theDomain);
00084
00085
00086 int commitState(void);
00087 int revertToLastCommit(void);
00088 int revertToStart(void);
00089 int update(void);
00090
00091
00092 const Matrix &getTangentStiff(void);
00093 const Matrix &getInitialStiff(void);
00094 const Matrix &getDamp(void);
00095 const Matrix &getMass(void);
00096
00097 void zeroLoad(void);
00098 int addLoad(ElementalLoad *theLoad, double loadFactor);
00099 int addInertiaLoadToUnbalance(const Vector &accel);
00100 const Vector &getResistingForce(void);
00101 const Vector &getResistingForceIncInertia(void);
00102
00103
00104 int sendSelf(int commitTag, Channel &theChannel);
00105 int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
00106 int displaySelf(Renderer &theViewer, int displayMode, float fact);
00107 void Print(OPS_Stream &s, int flag =0);
00108
00109 Response *setResponse(const char **argv, int argc, Information &eleInfo, OPS_Stream &output);
00110 int getResponse(int responseID, Information &eleInformation);
00111
00112
00113
00114
00115 private:
00116 tensor shapeFunction(double, double, double);
00117 tensor shapeFunctionDerivative(double, double, double);
00118 tensor getGaussPts(void);
00119 tensor getNodesCrds(void);
00120 tensor getNodesDisp(void);
00121 tensor Jacobian_3D(double, double, double);
00122 tensor Jacobian_3Dinv(double, double, double);
00123 tensor dh_Global(double, double, double);
00124
00125 tensor getStiffnessTensorKep();
00126 tensor getStiffnessTensorG12();
00127 tensor getMassTensorMsf();
00128 tensor getDampTensorC123();
00129 const Matrix& getStiff00(void);
00130 const Matrix& getStiff(int Ki_flag);
00131 double getPorePressure(double, double, double);
00132 const Vector& getInternalForce();
00133 const Vector& getBodyForce();
00134
00135 private:
00136 ID connectedExternalNodes;
00137 Node *theNodes[20] ;
00138 NDMaterial **theMaterial;
00139
00140 static Matrix MCK;
00141 static Vector P;
00142
00143 static const int Num_IntegrationPts;
00144 static const int Num_TotalGaussPts;
00145 static const int Num_Nodes;
00146 static const int Num_Dim;
00147 static const int Num_Dof;
00148 static const int Num_ElemDof;
00149 static const double pts[3];
00150 static const double wts[3];
00151
00152 Vector perm;
00153 Vector bf;
00154 double poro;
00155 double alpha;
00156 double rho_s;
00157 double rho_f;
00158 double ks;
00159 double kf;
00160 double pressure;
00161
00162 Vector *Q;
00163 Matrix *Ki;
00164 };
00165
00166
00167 #endif
00168