EightNodeBrick_u_p_U.h

Go to the documentation of this file.
00001 
00002 //
00003 // COPYRIGHT (C):     :-))
00004 // PROJECT:           Object Oriented Finite Element Program
00005 // FILE:             EightNodeBrick_u_p_U.h
00006 // CLASS:            EightNodeBrick_u_p_U
00007 // MEMBER FUNCTIONS:
00008 //
00009 // MEMBER VARIABLES
00010 //
00011 // PURPOSE:           Finite Element Class for coupled system
00012 //  "Coupled system": Solid and fluid coexist.
00013 //                    u-- Solid displacement
00014 //                    p-- Pore pressure
00015 //                    U-- Absolute fluid displacement
00016 // RETURN:
00017 // VERSION:
00018 // LANGUAGE:          C++.ver >= 3.0
00019 // TARGET OS:         DOS || UNIX || . . .
00020 // DESIGNER:          Boris Jeremic, Xiaoyan Wu, Zhao Cheng (main for last revision)
00021 // PROGRAMMER:        Boris Jeremic, Xiaoyan Wu, Zhaohui Yang, Zhao Cheng (main for last revision)
00022 // DATE:              Sept. 2001
00023 // UPDATE HISTORY:    Modified from EightNodeBrick.h.  Reorganized a lot by Xiaoyan
00024 //                    01/24/2002    Xiaoyan
00025 //                    Add the permeability tensor and ks, kf  to the constructor  Xiaoyan
00026 //
00027 //                    Clean-up and re-write by Zhao Cheng, 10/20/2004
00028 //
00029 //                    Fixed a bug, and some small modification, ZC 05/2006
00030 //
00032 
00033 
00034 #ifndef EIGHTNODEBRICK_U_P_U_H
00035 #define EIGHTNODEBRICK_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 EightNodeBrick_u_p_U: public Element
00061 {
00062 public:
00063    EightNodeBrick_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                    NDMaterial *Globalmmodel, double b1, double b2, double b3,
00067                    double nn, double alf, double rs,double rf,
00068                    double permb_x, double permb_y, double permb_z,
00069                    double kks, double kkf, double pp);
00070                    EightNodeBrick_u_p_U ();
00071                    ~EightNodeBrick_u_p_U();
00072     
00073     const char *getClassType(void) const {return "EightNodeBrick_u_P_U";};
00074     
00075     // public methods to obtain information about dof & connectivity
00076     int getNumExternalNodes(void) const;
00077     const ID &getExternalNodes(void);
00078     Node **getNodePtrs(void);
00079     int getNumDOF(void);
00080     void setDomain(Domain *theDomain);
00081 
00082     // public methods to set the state of the element
00083     int commitState(void);
00084     int revertToLastCommit(void);
00085     int revertToStart(void);
00086     int update(void);
00087 
00088     // public methods to obtain stiffness, mass, damping and residual information
00089     const Matrix &getTangentStiff(void);
00090     const Matrix &getInitialStiff(void);
00091     const Matrix &getDamp(void);
00092     const Matrix &getMass(void);
00093 
00094     void zeroLoad(void);
00095     int addLoad(ElementalLoad *theLoad, double loadFactor);
00096     int addInertiaLoadToUnbalance(const Vector &accel);
00097     const Vector &getResistingForce(void);
00098     const Vector &getResistingForceIncInertia(void);
00099 
00100     // public methods for element output
00101     int sendSelf(int commitTag, Channel &theChannel);
00102     int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
00103     int displaySelf(Renderer &theViewer, int displayMode, float fact);
00104     void Print(OPS_Stream &s, int flag =0);
00105 
00106     Response *setResponse(const char **argv, int argc, Information &eleInfo, OPS_Stream &output);
00107     int getResponse(int responseID, Information &eleInformation);
00108 
00109     //int setParameter (const char **argv, int argc, Information &info);
00110     //int updateParameter (int parameterID, Information &info);
00111 
00112 private:        
00113     tensor shapeFunction(double, double, double);
00114     tensor shapeFunctionDerivative(double, double, double);
00115     tensor getGaussPts(void);
00116     tensor getNodesCrds(void);
00117     tensor getNodesDisp(void);
00118     tensor Jacobian_3D(double, double, double);
00119     tensor Jacobian_3Dinv(double, double, double);
00120     tensor dh_Global(double, double, double);
00121     
00122     tensor getStiffnessTensorKep();
00123     tensor getStiffnessTensorG12();
00124     tensor getMassTensorMsf();
00125     tensor getDampTensorC123();
00126     const Matrix& getStiff00(void);
00127     const Matrix& getStiff(int Ki_flag);
00128     double getPorePressure(double, double, double);
00129     const Vector& getInternalForce();
00130     const Vector& getBodyForce();
00131 
00132 private:
00133     ID  connectedExternalNodes;    // tags of nodes
00134     Node *theNodes[8] ;            // pointers to eight nodes
00135     NDMaterial **theMaterial;      // pointers to the ND material objects
00136      
00137     static Matrix MCK;             // Mass, Damping, Stiffness
00138     static Vector P;               
00139 
00140     static const int  Num_IntegrationPts;
00141     static const int  Num_TotalGaussPts;
00142     static const int  Num_Nodes;
00143     static const int  Num_Dim;
00144     static const int  Num_Dof;
00145     static const int  Num_ElemDof;
00146     static const double pts[2];    // Stores quadrature points
00147     static const double wts[2];    // Stores quadrature weights
00148 
00149     Vector perm;                   // Permeability = k/(rho_f*g)
00150     Vector bf;                     // Body forces
00151     double poro;                   // Porosity
00152     double alpha;                  // Coefficient for soil (approximate equal 1)
00153     double rho_s;                  // Solid density
00154     double rho_f;                  // Fluid density
00155     double ks;                     // Bulk modulus of solid
00156     double kf;                     // Bulk modulus of fluid
00157     double pressure;               // Normal surface traction (pressure) over entire element  //?
00158 
00159     Vector *Q;
00160     Matrix *Ki;
00161 };
00162 
00163 
00164 #endif
00165 

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