Node.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.10 $
00022 // $Date: 2006/09/05 20:46:04 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/domain/node/Node.h,v $
00024                                                                         
00025                                                                         
00026 #ifndef Node_h
00027 #define Node_h
00028 
00029 // Written: fmk 
00030 // Created: 11/96
00031 // Revision: A
00032 //
00033 // Purpose: This file contains the class interface for Node.
00034 // A Node provides the abstraction for a node in the FEM.
00035 // Nodes have original position, trial displacement, velocity and 
00036 // acceleration and committed displacement, velocity and acceleration 
00037 // (the last committed() trial quantities).
00038 //
00039 // What: "@(#) Node.h, revA"
00040 
00041 #include <DomainComponent.h>
00042 class Element;
00043 class Vector;
00044 class Matrix;
00045 class Channel;
00046 class Renderer;
00047 
00048 class DOF_Group;
00049 
00050 class Node : public DomainComponent
00051 {
00052   public:
00053     // constructors
00054     Node(int classTag);
00055     Node(int tag, int classTag);
00056     Node(int tag, int ndof, double Crd1);
00057     Node(int tag, int ndof, double Crd1, double Crd2);
00058     Node(int tag, int ndof, double Crd1, double Crd2, double Crd3);
00059     Node(const Node &theCopy, bool copyMass = true);        
00060     
00061     // destructor
00062     virtual ~Node();
00063 
00064     // public methods dealing with the DOF at the node
00065     virtual int  getNumberDOF(void) const;    
00066     virtual void setDOF_GroupPtr(DOF_Group *theDOF_Grp);
00067     virtual DOF_Group *getDOF_GroupPtr(void);
00068 
00069     // public methods for obtaining the nodal coordinates
00070     virtual const Vector &getCrds(void) const;
00071 
00072     // public methods for obtaining committed and trial 
00073     // response quantities of the node
00074     virtual const Vector &getDisp(void);
00075     virtual const Vector &getVel(void);
00076     virtual const Vector &getAccel(void);    
00077     virtual const Vector &getIncrDisp(void);
00078     virtual const Vector &getIncrDeltaDisp(void);
00079 
00080     virtual const Vector &getTrialDisp(void);    
00081     virtual const Vector &getTrialVel(void);    
00082     virtual const Vector &getTrialAccel(void);    
00083 
00084     // public methods for updating the trial response quantities
00085     virtual int setTrialDisp(double value, int dof);    
00086     virtual int setTrialDisp(const Vector &);    
00087     virtual int setTrialVel(const Vector &);    
00088     virtual int setTrialAccel(const Vector &);        
00089 
00090     virtual int incrTrialDisp(const Vector &);    
00091     virtual int incrTrialVel(const Vector &);    
00092     virtual int incrTrialAccel(const Vector &);        
00093     
00094     // public methods for adding and obtaining load information
00095     virtual void zeroUnbalancedLoad(void);
00096     virtual int addUnbalancedLoad(const Vector &load, double fact = 1.0); 
00097     virtual int addInertiaLoadToUnbalance(const Vector &accel, double fact = 1.0);    
00098     virtual const Vector &getUnbalancedLoad(void);     
00099     virtual const Vector &getUnbalancedLoadIncInertia(void);        
00100 
00101     // public methods dealing with the committed state of the node
00102     virtual int commitState();
00103     virtual int revertToLastCommit();    
00104     virtual int revertToStart();        
00105 
00106     // public methods for dynamic analysis
00107     virtual const Matrix &getMass(void);
00108     virtual int setMass(const Matrix &theMass);
00109     virtual int setNumColR(int numCol);
00110     virtual int setR(int row, int col, double Value);
00111     virtual const Vector &getRV(const Vector &V);        
00112 
00113     virtual int setRayleighDampingFactor(double alphaM);
00114     virtual const Matrix &getDamp(void);
00115 
00116     // public methods for eigen vector
00117     virtual int setNumEigenvectors(int numVectorsToStore);
00118     virtual int setEigenvector(int mode, const Vector &eigenVector);
00119     virtual const Matrix &getEigenvectors(void);
00120     
00121     // public methods for output
00122     virtual int sendSelf(int commitTag, Channel &theChannel);
00123     virtual int recvSelf(int commitTag, Channel &theChannel, 
00124                          FEM_ObjectBroker &theBroker);
00125     virtual void Print(OPS_Stream &s, int flag = 0);
00126     virtual int displaySelf(Renderer &theRenderer, int displayMode, float fact);
00127 
00128     // AddingSensitivity:BEGIN /////////////////////////////////////////
00129     int addInertiaLoadSensitivityToUnbalance(const Vector &accel, 
00130                                              double fact = 1.0, 
00131                                              bool tag=false);    
00132     Matrix getMassSensitivity(void);
00133     virtual const Matrix &getDampSensitivity(void);
00134     int    getCrdsSensitivity(void);
00135     int    saveSensitivity(Vector *v, Vector *vdot, Vector *vdotdot, int gradNum, int numGrads);
00136     double getDispSensitivity(int dof, int gradNum);
00137     double getVelSensitivity(int dof, int gradNum);
00138     double getAccSensitivity(int dof, int gradNum);
00139     int setParameter(const char **argv, int argc, Parameter &param);
00140     int    updateParameter(int parameterID, Information &info);
00141     int    activateParameter(int parameterID);
00142 
00143     virtual const Vector &getReaction();
00144     virtual int   addReactionForce(const Vector &, double factor);
00145     virtual int   resetReactionForce(bool inclInertia);
00146     // AddingSensitivity:END ///////////////////////////////////////////
00147     
00148   private:
00149     // priavte methods used to create the Vector objects 
00150     // for the committed and trial response quantaties.
00151     int createDisp(void);
00152     int createVel(void);
00153     int createAccel(void); 
00154 
00155     // private data associated with each node object
00156     int numberDOF;                    // number of dof at Node
00157     DOF_Group *theDOF_GroupPtr;       // pointer to associated DOF_Group
00158     Vector *Crd;                      // original nodal coords
00159     Vector *commitDisp, *commitVel, *commitAccel; // commited quantities
00160     Vector *trialDisp, *trialVel, *trialAccel;     // trial quantities
00161     Vector *unbalLoad;                // unbalanced load
00162     Vector *incrDisp;
00163     Vector *incrDeltaDisp;
00164     
00165     double *disp, *vel, *accel; // double arrays holding the displ, 
00166                                 // vel and accel values
00167 
00168     int dbTag1, dbTag2, dbTag3, dbTag4; // needed for database
00169     Matrix *R;                          // nodal participation matrix
00170     Matrix *mass;                       // pointer to mass matrix
00171     Vector *unbalLoadWithInertia;       
00172     double alphaM;                    // rayleigh damping factor
00173     
00174     Matrix *theEigenvectors;
00175 
00176     // AddingSensitivity:BEGIN /////////////////////////////////////////
00177     Matrix *dispSensitivity;
00178     Matrix *velSensitivity;
00179     Matrix *accSensitivity;
00180     int parameterID;
00181     // AddingSensitivity:END ///////////////////////////////////////////
00182 
00183     static Matrix **theMatrices;
00184     static int numMatrices;
00185     int index;
00186 
00187     Vector *reaction;
00188 };
00189 
00190 #endif
00191 

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