TwentyNodeBrick_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:             TwentyNodeBrick_u_p_U.h
00006 // CLASS:            TwentyNodeBrick_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 TWENTYNODEBRICK_U_P_U_H
00035 #define TWENTYNODEBRICK_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 TwentyNodeBrick_u_p_U: public Element
00061 {
00062 public:
00063    TwentyNodeBrick_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                    int node_numb_9, int node_numb_10, int node_numb_11, int node_numb_12,
00067                    int node_numb_13, int node_numb_14, int node_numb_15, int node_numb_16,
00068                    int node_numb_17, int node_numb_18, int node_numb_19, int node_numb_20,
00069                    NDMaterial *Globalmmodel, double b1, double b2, double b3,
00070                    double nn, double alf, double rs,double rf,
00071                    double permb_x, double permb_y, double permb_z,
00072                    double kks, double kkf, double pp);
00073                    TwentyNodeBrick_u_p_U ();
00074                    ~TwentyNodeBrick_u_p_U();
00075     
00076     const char *getClassType(void) const {return "TwentyNodeBrick_u_P_U";};
00077     
00078     // public methods to obtain information about dof & connectivity
00079     int getNumExternalNodes(void) const;
00080     const ID &getExternalNodes(void);
00081     Node **getNodePtrs(void);
00082     int getNumDOF(void);
00083     void setDomain(Domain *theDomain);
00084 
00085     // public methods to set the state of the element
00086     int commitState(void);
00087     int revertToLastCommit(void);
00088     int revertToStart(void);
00089     int update(void);
00090 
00091     // public methods to obtain stiffness, mass, damping and residual information
00092     const Matrix &getTangentStiff(void);
00093     const Matrix &getInitialStiff(void);
00094     const Matrix &getDamp(void);
00095     const Matrix &getMass(void);
00096 
00097     void zeroLoad(void);
00098     int addLoad(ElementalLoad *theLoad, double loadFactor);
00099     int addInertiaLoadToUnbalance(const Vector &accel);
00100     const Vector &getResistingForce(void);
00101     const Vector &getResistingForceIncInertia(void);
00102 
00103     // public methods for element output
00104     int sendSelf(int commitTag, Channel &theChannel);
00105     int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
00106     int displaySelf(Renderer &theViewer, int displayMode, float fact);
00107     void Print(OPS_Stream &s, int flag =0);
00108 
00109     Response *setResponse(const char **argv, int argc, Information &eleInfo, OPS_Stream &output);
00110     int getResponse(int responseID, Information &eleInformation);
00111 
00112     //int setParameter (const char **argv, int argc, Information &info);
00113     //int updateParameter (int parameterID, Information &info);
00114 
00115 private:        
00116     tensor shapeFunction(double, double, double);
00117     tensor shapeFunctionDerivative(double, double, double);
00118     tensor getGaussPts(void);
00119     tensor getNodesCrds(void);
00120     tensor getNodesDisp(void);
00121     tensor Jacobian_3D(double, double, double);
00122     tensor Jacobian_3Dinv(double, double, double);
00123     tensor dh_Global(double, double, double);
00124     
00125     tensor getStiffnessTensorKep();
00126     tensor getStiffnessTensorG12();
00127     tensor getMassTensorMsf();
00128     tensor getDampTensorC123();
00129     const Matrix& getStiff00(void);
00130     const Matrix& getStiff(int Ki_flag);
00131     double getPorePressure(double, double, double);
00132     const Vector& getInternalForce();
00133     const Vector& getBodyForce();
00134 
00135 private:
00136     ID  connectedExternalNodes;    // tags of nodes
00137     Node *theNodes[20] ;            // pointers to eight nodes
00138     NDMaterial **theMaterial;      // pointers to the ND material objects
00139      
00140     static Matrix MCK;             // Mass, Damping, Stiffness
00141     static Vector P;               
00142 
00143     static const int  Num_IntegrationPts;
00144     static const int  Num_TotalGaussPts;
00145     static const int  Num_Nodes;
00146     static const int  Num_Dim;
00147     static const int  Num_Dof;
00148     static const int  Num_ElemDof;
00149     static const double pts[3];    // Stores quadrature points
00150     static const double wts[3];    // Stores quadrature weights
00151 
00152     Vector perm;                   // Permeability = k/(rho_f*g)
00153     Vector bf;                     // Body forces
00154     double poro;                   // Porosity
00155     double alpha;                  // Coefficient for soil (approximate equal 1)
00156     double rho_s;                  // Solid density
00157     double rho_f;                  // Fluid density
00158     double ks;                     // Bulk modulus of solid
00159     double kf;                     // Bulk modulus of fluid
00160     double pressure;               // Normal surface traction (pressure) over entire element  //?
00161 
00162     Vector *Q;
00163     Matrix *Ki;
00164 };
00165 
00166 
00167 #endif
00168 

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