FourNodeQuadUP.h

Go to the documentation of this file.
00001 
00002 
00003 // Description: This file contains the class declaration for FourNodeQuadUP. //
00004 
00005 // FourNodeQuadUP is a 4-node plane strain element for solid-fluid fully     //
00006 
00007 // coupled analysis. This implementation is a simplified u-p formulation     //
00008 
00009 // of Biot theory (u - solid displacement, p - fluid pressure). Each element //
00010 
00011 // node has two DOFs for u and 1 DOF for p.                                  //
00012 
00013 // Written by Zhaohui Yang      (May 2002)                                   //
00014 
00015 // based on FourNodeQuad element by Michael Scott                            //
00016 
00018 
00019 
00020 
00021 // $Revision: 1.4 $
00022 
00023 // $Date: 2006/09/05 21:04:59 $
00024 
00025 // $Source: /usr/local/cvs/OpenSees/SRC/element/UP-ucsd/FourNodeQuadUP.h,v $
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     // public methods to set the state of the element
00098 
00099     int commitState(void);
00100 
00101     int revertToLastCommit(void);
00102 
00103     int revertToStart(void);
00104 
00105     int update(void);
00106 
00107 
00108 
00109     // public methods to obtain stiffness, mass, damping and residual information
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     // public methods for element output
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 &param);
00153     int updateParameter(int parameterID, Information &info);
00154 
00155 
00156 
00157 
00158 
00159     // RWB; PyLiq1 & TzLiq1 need to see the excess pore pressure and initial stresses.
00160 
00161     friend class PyLiq1;
00162 
00163     friend class TzLiq1;
00164 
00165 
00166 
00167   protected:
00168 
00169 
00170 
00171   private:
00172 
00173 
00174 
00175     // private attributes - a copy for each object of the class
00176 
00177 
00178 
00179     NDMaterial **theMaterial; // pointer to the ND material objects
00180 
00181 
00182 
00183     ID connectedExternalNodes; // Tags of quad nodes
00184 
00185 
00186 
00187     Node *nd1Ptr;               // Pointers to quad nodes
00188 
00189     Node *nd2Ptr;
00190 
00191     Node *nd3Ptr;
00192 
00193     Node *nd4Ptr;
00194 
00195 
00196 
00197     static Matrix K;            // Element stiffness, damping, and mass Matrix
00198 
00199     static Vector P;            // Element resisting force vector
00200 
00201     Vector Q;           // Applied nodal loads
00202 
00203     double b[2];                // Body forces
00204 
00205     Vector pressureLoad;        // Pressure load at nodes
00206 
00207 
00208 
00209     double thickness;   // Element thickness
00210 
00211     double rho;                 // Fluid mass per unit volume
00212 
00213     double kc;   // combined bulk modulus
00214 
00215     double pressure;    // Normal surface traction (pressure) over entire element
00216 
00217     // Note: positive for outward normal
00218 
00219     double perm[2];  // lateral/vertical permeability
00220 
00221 
00222 
00223     static double shp[3][4][4]; // Stores shape functions and derivatives (overwritten)
00224 
00225     static double pts[4][2];    // Stores quadrature points
00226 
00227     static double wts[4];               // Stores quadrature weights
00228 
00229     static double dvol[4];  // Stores detJacobian (overwritten)
00230 
00231     static double shpBar[3][4]; // Stores averaged shap functions (overwritten)
00232 
00233 
00234 
00235     // private member functions - only objects of this class can call these
00236 
00237     double mixtureRho(int ipt);  // Mixture mass density at integration point i
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

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