FourNodeQuad.h

Go to the documentation of this file.
00001 /* ****************************************************************** **
00002 **    OpenSees - Open System for Earthquake Engineering Simulation    **
00003 **          Pacific Earthquake Engineering Research Center            **
00004 **                                                                    **
00005 **                                                                    **
00006 ** (C) Copyright 1999, The Regents of the University of California    **
00007 ** All Rights Reserved.                                               **
00008 **                                                                    **
00009 ** Commercial use of this program without express permission of the   **
00010 ** University of California, Berkeley, is strictly prohibited.  See   **
00011 ** file 'COPYRIGHT'  in main directory for information on usage and   **
00012 ** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
00013 **                                                                    **
00014 ** Developed by:                                                      **
00015 **   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
00016 **   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
00017 **   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
00018 **                                                                    **
00019 ** ****************************************************************** */
00020                                                                         
00021 // $Revision: 1.12 $
00022 // $Date: 2006/09/05 21:11:21 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/element/fourNodeQuad/FourNodeQuad.h,v $
00024                                                                         
00025 // Written: MHS
00026 // Created: Feb 2000
00027 // Revised: Dec 2000 for efficiency
00028 //
00029 // Description: This file contains the class definition for FourNodeQuad.
00030 
00031 #ifndef FourNodeQuad_h
00032 #define FourNodeQuad_h
00033 
00034 #ifndef _bool_h
00035 #include "bool.h"
00036 #endif
00037 
00038 #include <Element.h>
00039 #include <Matrix.h>
00040 #include <Vector.h>
00041 #include <ID.h>
00042 
00043 class Node;
00044 class NDMaterial;
00045 class Response;
00046 
00047 class FourNodeQuad : public Element
00048 {
00049   public:
00050     FourNodeQuad(int tag, int nd1, int nd2, int nd3, int nd4,
00051                   NDMaterial &m, const char *type,
00052                   double t, double pressure = 0.0, double rho = 0.0,
00053                   double b1 = 0.0, double b2 = 0.0);
00054     FourNodeQuad();
00055     ~FourNodeQuad();
00056 
00057     const char *getClassType(void) const {return "FourNodeQuad";};
00058 
00059     int getNumExternalNodes(void) const;
00060     const ID &getExternalNodes(void);
00061     Node **getNodePtrs(void);
00062 
00063     int getNumDOF(void);
00064     void setDomain(Domain *theDomain);
00065 
00066     // public methods to set the state of the element    
00067     int commitState(void);
00068     int revertToLastCommit(void);
00069     int revertToStart(void);
00070     int update(void);
00071 
00072     // public methods to obtain stiffness, mass, damping and residual information    
00073     const Matrix &getTangentStiff(void);
00074     const Matrix &getInitialStiff(void);    
00075     const Matrix &getMass(void);    
00076 
00077     void zeroLoad();
00078     int addLoad(ElementalLoad *theLoad, double loadFactor);
00079     int addInertiaLoadToUnbalance(const Vector &accel);
00080 
00081     const Vector &getResistingForce(void);
00082     const Vector &getResistingForceIncInertia(void);            
00083 
00084     // public methods for element output
00085     int sendSelf(int commitTag, Channel &theChannel);
00086     int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker 
00087                   &theBroker);
00088     int displaySelf(Renderer &theViewer, int displayMode, float fact);
00089     void Print(OPS_Stream &s, int flag =0);
00090 
00091     Response *setResponse(const char **argv, int argc, 
00092                           Information &eleInformation, OPS_Stream &s);
00093 
00094     int getResponse(int responseID, Information &eleInformation);
00095 
00096     int setParameter(const char **argv, int argc, Parameter &param);
00097     int updateParameter(int parameterID, Information &info);
00098 
00099     // RWB; PyLiq1 & TzLiq1 need to see the excess pore pressure and initial stresses.
00100     friend class PyLiq1;
00101     friend class TzLiq1;
00102 
00103   protected:
00104     
00105   private:
00106     // private attributes - a copy for each object of the class
00107 
00108     NDMaterial **theMaterial; // pointer to the ND material objects
00109     
00110     ID connectedExternalNodes; // Tags of quad nodes
00111 
00112     Node *theNodes[4];
00113 
00114     static double matrixData[64];  // array data for matrix
00115     static Matrix K;            // Element stiffness, damping, and mass Matrix
00116     static Vector P;            // Element resisting force vector
00117     Vector Q;                   // Applied nodal loads
00118     double b[2];                // Body forces
00119     Vector pressureLoad;        // Pressure load at nodes
00120 
00121     double thickness;           // Element thickness
00122     double rho;                 // Mass per unit volume
00123     double pressure;            // Normal surface traction (pressure) over entire element
00124                                          // Note: positive for outward normal
00125     static double shp[3][4];    // Stores shape functions and derivatives (overwritten)
00126     static double pts[4][2];    // Stores quadrature points
00127     static double wts[4];               // Stores quadrature weights
00128 
00129     // private member functions - only objects of this class can call these
00130     double shapeFunction(double xi, double eta);
00131     void setPressureLoadAtNodes(void);
00132 
00133     Matrix *Ki;
00134 };
00135 
00136 #endif
00137 

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