DOF_Group.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.11 $
00022 // $Date: 2005/11/28 21:40:46 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/analysis/dof_grp/DOF_Group.h,v $
00024                                                                         
00025                                                                         
00026 #ifndef DOF_Group_h
00027 #define DOF_Group_h
00028 
00029 // File: ~/analysis/dof_grp/DOF_Group.h
00030 // 
00031 // Written: fmk 
00032 // Created: 11/96
00033 // Revision: A
00034 //
00035 // Description: This file contains the class definition for DOF_Group.
00036 // A DOF_Group object is instantiated by the ConstraintHandler for 
00037 // every unconstrained node in the domain. The constrained nodes require 
00038 // specialised types of DOF_Group; which deal with the constraints. DOF_Group
00039 // objects can handle 0 boundary constraints; if the eqn number of a DOF is 
00040 // less than START_EQN_NUM a value of 0.0 is set for disp, vel and accel when
00041 // a setNode*(Vector &) is invoked.
00042 //
00043 // What: "@(#) DOF_Group.h, revA"
00044 
00045 #include <ID.h>
00046 #include <TaggedObject.h>
00047 
00048 class Node;
00049 class Vector;
00050 class Matrix;
00051 class TransientIntegrator;
00052 class Integrator;
00053 
00054 class DOF_Group: public TaggedObject
00055 {
00056   public:
00057     DOF_Group(int tag, Node *myNode);
00058     DOF_Group(int tag, int ndof);    
00059     virtual ~DOF_Group();    
00060 
00061     virtual void setID(int dof, int value);
00062     virtual void setID(const ID &values);
00063     virtual const ID &getID(void) const;
00064 
00065     virtual int getNodeTag(void) const;
00066     virtual int getNumDOF(void) const;    
00067     virtual int getNumFreeDOF(void) const;
00068     virtual int getNumConstrainedDOF(void) const;
00069 
00070     // methods to form the tangent
00071     virtual const Matrix &getTangent(Integrator *theIntegrator);
00072     virtual void  zeroTangent(void);
00073     virtual void  addMtoTang(double fact = 1.0);    
00074     virtual void  addCtoTang(double fact = 1.0);    
00075 
00076     // methods to form the unbalance
00077     virtual const Vector &getUnbalance(Integrator *theIntegrator);
00078     virtual void  zeroUnbalance(void);
00079     virtual void  addPtoUnbalance(double fact = 1.0);
00080     virtual void  addPIncInertiaToUnbalance(double fact = 1.0);    
00081     virtual void  addM_Force(const Vector &Udotdot, double fact = 1.0);        
00082 
00083     virtual const Vector &getTangForce(const Vector &x, double fact = 1.0);
00084     virtual const Vector &getC_Force(const Vector &x, double fact = 1.0);
00085     virtual const Vector &getM_Force(const Vector &x, double fact = 1.0);
00086 
00087     // methods to obtain committed responses from the nodes
00088     virtual const Vector & getCommittedDisp(void);
00089     virtual const Vector & getCommittedVel(void);
00090     virtual const Vector & getCommittedAccel(void);
00091     
00092     // methods to update the trial response at the nodes
00093     virtual void setNodeDisp(const Vector &u);
00094     virtual void setNodeVel(const Vector &udot);
00095     virtual void setNodeAccel(const Vector &udotdot);
00096 
00097     virtual void incrNodeDisp(const Vector &u);
00098     virtual void incrNodeVel(const Vector &udot);
00099     virtual void incrNodeAccel(const Vector &udotdot);
00100 
00101     // methods to set the eigen vectors
00102     virtual void setEigenvector(int mode, const Vector &eigenvalue);
00103         
00104     // method added for TransformationDOF_Groups
00105     virtual Matrix *getT(void);
00106 
00107 // AddingSensitivity:BEGIN ////////////////////////////////////
00108     virtual void addM_ForceSensitivity(const Vector &Udotdot, double fact = 1.0);        
00109     virtual void addD_ForceSensitivity(const Vector &vel, double fact = 1.0);
00110     virtual void addD_Force(const Vector &vel, double fact = 1.0);
00111 
00112     virtual const Vector & getDispSensitivity(int gradNumber);
00113     virtual const Vector & getVelSensitivity(int gradNumber);
00114     virtual const Vector & getAccSensitivity(int gradNumber);
00115     virtual int saveSensitivity(Vector *v,Vector *vdot,Vector *vdotdot,int gradNum,int numGrads);
00116 // AddingSensitivity:END //////////////////////////////////////
00117     virtual void  Print(OPS_Stream&, int = 0) {return;};
00118     virtual void resetNodePtr(void);
00119   
00120    protected:
00121     void  addLocalM_Force(const Vector &Udotdot, double fact = 1.0);     
00122 
00123     // protected variables - a copy for each object of the class            
00124     Vector *unbalance;
00125     Matrix *tangent;
00126     Node *myNode;
00127     
00128   private:
00129     // private variables - a copy for each object of the class        
00130     ID  myID;
00131     int numDOF;
00132 
00133     // static variables - single copy for all objects of the class          
00134     static Matrix errMatrix;
00135     static Vector errVect;
00136     static Matrix **theMatrices; // array of pointers to class wide matrices
00137     static Vector **theVectors;  // array of pointers to class widde vectors
00138     static int numDOFs;           // number of objects    
00139 };
00140 
00141 #endif
00142 

Generated on Mon Oct 23 15:04:57 2006 for OpenSees by doxygen 1.5.0