Nine_Four_Node_QuadUP.h

Go to the documentation of this file.
00001 
00002 
00003 // Description: This file contains the class declaration for                 //
00004 
00005 // NineFourNodeQuadUP, a 9-4-node (9 node for solid and 4 node for fluid) //
00006 
00007 // plane strain element for solid-fluid fully coupled analysis. This         //
00008 
00009 // implementation is a simplified u-p formulation of Biot theory             //
00010 
00011 // (u - solid displacement, p - fluid pressure). Each element node has two   //
00012 
00013 // DOFs for u and 1 DOF for p.                                               //
00014 
00015 //                                                                           //
00016 
00017 // Written by Zhaohui Yang      (March 2004)                                     //
00018 
00019 //                                                                           //
00020 
00022 
00023 
00024 
00025 // $Revision: 1.4 $
00026 
00027 // $Date: 2006/09/05 21:04:59 $
00028 
00029 // $Source: /usr/local/cvs/OpenSees/SRC/element/UP-ucsd/Nine_Four_Node_QuadUP.h,v $
00030 
00031 
00032 
00033 #ifndef NineFourNodeQuadUP_h
00034 
00035 #define NineFourNodeQuadUP_h
00036 
00037 
00038 
00039 #ifndef _bool_h
00040 
00041 #include "bool.h"
00042 
00043 #endif
00044 
00045 
00046 
00047 #include <Element.h>
00048 
00049 #include <Matrix.h>
00050 
00051 #include <Vector.h>
00052 
00053 #include <ID.h>
00054 
00055 
00056 
00057 class Node;
00058 
00059 class NDMaterial;
00060 
00061 class Response;
00062 
00063 
00064 
00065 class NineFourNodeQuadUP : public Element
00066 
00067 {
00068 
00069   public:
00070 
00071     NineFourNodeQuadUP(int tag, int nd1, int nd2, int nd3, int nd4,
00072 
00073                   int nd5, int nd6, int nd7, int nd8, int nd9,
00074 
00075                   NDMaterial &m, const char *type,
00076 
00077                   double t, double bulk, double rhof, double perm1, double perm2,
00078 
00079                    double b1 = 0.0, double b2 = 0.0);
00080 
00081 
00082 
00083     NineFourNodeQuadUP();
00084 
00085     virtual ~NineFourNodeQuadUP();
00086 
00087     const char *getClassType(void) const {return "NineFourNodeQuadUP";};
00088 
00089     int getNumExternalNodes(void) const;
00090 
00091     const ID &getExternalNodes(void);
00092 
00093     Node **getNodePtrs(void);
00094 
00095 
00096 
00097     int getNumDOF(void);
00098 
00099     void setDomain(Domain *theDomain);
00100 
00101 
00102 
00103     // public methods to set the state of the element
00104 
00105     int commitState(void);
00106 
00107     int revertToLastCommit(void);
00108 
00109     int revertToStart(void);
00110 
00111     int update(void);
00112 
00113 
00114 
00115     // public methods to obtain stiffness, mass, damping and residual information
00116 
00117     const Matrix &getTangentStiff(void);
00118 
00119     const Matrix &getInitialStiff(void);
00120 
00121     const Matrix &getDamp(void);
00122 
00123     const Matrix &getMass(void);
00124 
00125 
00126 
00127     void zeroLoad();
00128 
00129     int addLoad(ElementalLoad *theLoad, double loadFactor);
00130 
00131     int addInertiaLoadToUnbalance(const Vector &accel);
00132 
00133     const Vector &getResistingForce(void);
00134 
00135     const Vector &getResistingForceIncInertia(void);
00136 
00137 
00138 
00139     // public methods for element output
00140 
00141     int sendSelf(int commitTag, Channel &theChannel);
00142 
00143     int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker
00144 
00145                   &theBroker);
00146 
00147     int displaySelf(Renderer &theViewer, int displayMode, float fact);
00148 
00149     void Print(OPS_Stream &s, int flag =0);
00150 
00151 
00152 
00153     Response *setResponse(const char **argv, int argc, Information &eleInformation, OPS_Stream &s);
00154 
00155     int getResponse(int responseID, Information &eleInformation);
00156 
00157 
00158 
00159     int setParameter(const char **argv, int argc, Parameter &param);
00160 
00161     int updateParameter(int parameterID, Information &info);
00162 
00163 
00164 
00165     // RWB; PyLiq1 & TzLiq1 need to see the excess pore pressure and initial stresses.
00166 
00167     friend class PyLiq1;
00168 
00169     friend class TzLiq1;
00170 
00171 
00172 
00173   protected:
00174 
00175 
00176 
00177   private:
00178 
00179 
00180 
00181     // private attributes - a copy for each object of the class
00182 
00183 
00184 
00185     NDMaterial **theMaterial; // pointer to the ND material objects
00186 
00187 
00188 
00189     ID connectedExternalNodes; // Tags of quad nodes
00190 
00191 
00192 
00193     static Matrix K;            // Element stiffness, damping, and mass Matrix
00194 
00195     static Vector P;            // Element resisting force vector
00196 
00197     Vector Q;           // Applied nodal loads
00198 
00199     double b[2];                // Body forces
00200 
00201     Matrix *Ki;
00202 
00203     Node *theNodes[9];
00204 
00205 
00206 
00207     double thickness;   // Element thickness
00208 
00209     double rho;                 // Fluid mass per unit volume
00210 
00211     double kc;   // combined bulk modulus
00212 
00213     double perm[2];  // lateral/vertical permeability
00214 
00215     static const int nintu;
00216 
00217     static const int nintp;
00218 
00219     static const int nenu;
00220 
00221     static const int nenp;
00222 
00223 
00224 
00225     static double shgu[3][9][9];        // Stores shape functions and derivatives (overwritten)
00226 
00227     static double shgp[3][4][4];        // Stores shape functions and derivatives (overwritten)
00228 
00229     static double shgq[3][9][4];        // Stores shape functions and derivatives (overwritten)
00230 
00231     static double shlu[3][9][9];        // Stores shape functions and derivatives
00232 
00233     static double shlp[3][4][4];        // Stores shape functions and derivatives
00234 
00235     static double shlq[3][9][4];        // Stores shape functions and derivatives
00236 
00237     static double wu[9];                // Stores quadrature weights
00238 
00239     static double wp[4];                // Stores quadrature weights
00240 
00241     static double dvolu[9];  // Stores detJacobian (overwritten)
00242 
00243     static double dvolp[4];  // Stores detJacobian (overwritten)
00244 
00245     static double dvolq[4];  // Stores detJacobian (overwritten)
00246 
00247 
00248 
00249     // private member functions - only objects of this class can call these
00250 
00251     double mixtureRho(int ipt);  // Mixture mass density at integration point i
00252 
00253     void shapeFunction(double *w, int nint, int nen, int mode);
00254 
00255     void globalShapeFunction(double *dvol, double *w, int nint, int nen, int mode);
00256 
00257 };
00258 
00259 
00260 
00261 #endif

Generated on Mon Oct 23 15:05:10 2006 for OpenSees by doxygen 1.5.0