Nine_Four_Node_QuadUPOld.h

Go to the documentation of this file.
00001 
00002 // Description: This file contains the class declaration for                 //
00003 // NineFourNodeQuadUP, a 9-4-node (9 node for solid and 4 node for fluid) //
00004 // plane strain element for solid-fluid fully coupled analysis. This         //
00005 // implementation is a simplified u-p formulation of Biot theory             //
00006 // (u - solid displacement, p - fluid pressure). Each element node has two   //
00007 // DOFs for u and 1 DOF for p.                                               //
00008 //                                                                           //
00009 // Written by Zhaohui Yang      (March 2004)                                     //
00010 //                                                                           //
00012 
00013 // $Revision: 1.1 $
00014 // $Date: 2005/09/22 21:28:36 $
00015 // $Source: /usr/local/cvs/OpenSees/SRC/element/UP-ucsd/Nine_Four_Node_QuadUPOld.h,v $
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     // public methods to set the state of the element
00053     int commitState(void);
00054     int revertToLastCommit(void);
00055     int revertToStart(void);
00056     int update(void);
00057 
00058     // public methods to obtain stiffness, mass, damping and residual information
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     // public methods for element output
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     // RWB; PyLiq1 & TzLiq1 need to see the excess pore pressure and initial stresses.
00084     friend class PyLiq1;
00085     friend class TzLiq1;
00086 
00087   protected:
00088 
00089   private:
00090 
00091     // private attributes - a copy for each object of the class
00092 
00093     NDMaterial **theMaterial; // pointer to the ND material objects
00094 
00095     ID connectedExternalNodes; // Tags of quad nodes
00096 
00097     static Matrix K;            // Element stiffness, damping, and mass Matrix
00098     static Vector P;            // Element resisting force vector
00099     Vector Q;           // Applied nodal loads
00100     double b[2];                // Body forces
00101     Matrix *Ki;
00102     Node *theNodes[9];
00103 
00104     double thickness;   // Element thickness
00105     double rho;                 // Fluid mass per unit volume
00106     double kc;   // combined bulk modulus
00107     double perm[2];  // lateral/vertical permeability
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];        // Stores shape functions and derivatives (overwritten)
00114     static double shgp[3][4][4];        // Stores shape functions and derivatives (overwritten)
00115     static double shgq[3][9][4];        // Stores shape functions and derivatives (overwritten)
00116     static double shlu[3][9][9];        // Stores shape functions and derivatives
00117     static double shlp[3][4][4];        // Stores shape functions and derivatives
00118     static double shlq[3][9][4];        // Stores shape functions and derivatives
00119     static double wu[9];                // Stores quadrature weights
00120     static double wp[4];                // Stores quadrature weights
00121     static double dvolu[9];  // Stores detJacobian (overwritten)
00122     static double dvolp[4];  // Stores detJacobian (overwritten)
00123     static double dvolq[4];  // Stores detJacobian (overwritten)
00124 
00125     // private member functions - only objects of this class can call these
00126     double mixtureRho(int ipt);  // Mixture mass density at integration point i
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 

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