EightNode_Brick_u_p.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.cpp
00006 // CLASS:             EightNodeBrick_u_p
00007 // VERSION:
00008 // LANGUAGE:          C++
00009 // TARGET OS:         DOS || UNIX || . . .
00010 // DESIGNER:          Zhao Cheng, Boris Jeremic
00011 // PROGRAMMER:        Zhao Cheng, Boris Jeremic
00012 // DATE:              Aug. 2006
00013 // UPDATE HISTORY:    
00014 //
00016 
00017 
00018 #ifndef EIGHTNODE_BRICK_U_P_H
00019 #define EIGHTNODE_BRICK_U_P_H
00020 
00021 #ifndef _bool_h
00022 #include "bool.h"
00023 #endif
00024 
00025 #include <Information.h>
00026 #include <ElementResponse.h>
00027 #include <ElementalLoad.h>
00028 #include <Domain.h>
00029 #include <Node.h>
00030 #include <Channel.h>
00031 #include <FEM_ObjectBroker.h>
00032 #include <Renderer.h>
00033 #include <OPS_Globals.h>
00034 
00035 #include <Element.h>
00036 #include <NDMaterial.h>
00037 
00038 #include <Vector.h>
00039 #include <Matrix.h>
00040 #include <BJtensor.h>
00041 #include <stresst.h>
00042 #include <straint.h>
00043 
00044 class EightNode_Brick_u_p: public Element
00045 {
00046 public:
00047    EightNode_Brick_u_p(int element_number,
00048                    int node_numb_1, int node_numb_2, int node_numb_3, int node_numb_4,
00049                    int node_numb_5, int node_numb_6, int node_numb_7, int node_numb_8,
00050                    NDMaterial *Globalmmodel, double b1, double b2, double b3,
00051                    double nf, double alphaf, double rs, double rf, 
00052                    double permb_x, double permb_y, double permb_z, 
00053                    double kks, double kkf); 
00054    EightNode_Brick_u_p ();
00055    ~EightNode_Brick_u_p();
00056     
00057     const char *getClassType(void) const {return "EightNode_Brick_u_p";}; 
00058     
00059     // public methods to obtain information about dof & connectivity    
00060     int getNumExternalNodes(void) const;
00061     const ID &getExternalNodes(void);
00062     Node **getNodePtrs(void);
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 &getDamp(void);
00076     const Matrix &getMass(void);
00077 
00078     void zeroLoad(void);        
00079     int addLoad(ElementalLoad *theLoad, double loadFactor);
00080     int addInertiaLoadToUnbalance(const Vector &accel);
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 &theBroker);
00087     int displaySelf(Renderer &theViewer, int displayMode, float fact);    
00088     void Print(OPS_Stream &s, int flag =0);    
00089 
00090     Response *setResponse(const char **argv, int argc, Information &eleInfo, OPS_Stream &s);
00091     int getResponse(int responseID, Information &eleInformation);
00092 
00093     //int setParameter (const char **argv, int argc, Information &info);
00094     //int updateParameter (int parameterID, Information &info);
00095 
00096 private:
00097     tensor shapeFunction(double, double, double);
00098     tensor shapeFunctionDerivative(double, double, double);
00099     tensor getNodesCrds();
00100     tensor getNodesDisp();
00101     tensor Jacobian_3D(double, double, double);
00102     tensor Jacobian_3Dinv(double, double, double);
00103     tensor dh_Global(double, double, double);
00104 
00105     tensor getGaussPts(void);
00106     double getPorePressure(double, double, double);
00107 
00108     tensor getStiffnessTensorQ();
00109     tensor getStiffnessTensorH();
00110     tensor getStiffnessTensorKep();
00111     tensor getMassTensorM1();
00112     tensor getDampingTensorS();
00113     const Vector& getInternalForce();
00114     const Vector& getForceU();
00115     const Vector& getForceP();    
00116     
00117     const Matrix& getStiff(int Ki_flag);
00118     const Matrix& getStiff00(void);
00119 
00120 private:
00121     ID  connectedExternalNodes;    // tags of nodes
00122     Node *theNodes[8] ;            // pointers to nodes
00123     NDMaterial **theMaterial;      // pointers to the ND material objects
00124 
00125     static Matrix MCK;             // Mass, Damping, Stiffness
00126     static Vector P;
00127 
00128     static const int  Num_IntegrationPts;
00129     static const int  Num_TotalGaussPts;
00130     static const int  Num_Nodes;
00131     static const int  Num_Dim;
00132     static const int  Num_Dof;
00133     static const int  Num_ElemDof;
00134     static const double pts[2];    // Stores quadrature points
00135     static const double wts[2];    // Stores quadrature weights
00136     static tensor perm;            // Permeability = k/(rho_f*g)
00137 
00138     Vector bf;                     // Body forces 
00139     double nf;                     // Porosity
00140     double alpha;                  // simga = sigma' + alpha*p
00141     double rho_s;                  // Solid density
00142     double rho_f;                  // Fluid density
00143     double ks;                     // Bulk modulus of solid
00144     double kf;                     // Bulk modulus of fluid
00145 
00146     Vector *Q;                     
00147     Matrix *Ki;                    
00148 };
00149 
00150 
00151 #endif
00152 

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