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.2 $ 00022 // $Date: 2001/05/26 06:20:26 $ 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 00047 #include <Node.h> 00048 #include <Vector.h> 00049 #include <Matrix.h> 00050 #include <TransientIntegrator.h> 00051 #include <Integrator.h> 00052 00071 class DOF_Group 00072 { 00073 public: 00075 DOF_Group(int tag, Node *myNode); 00076 00078 DOF_Group(int tag, int ndof); 00080 virtual ~DOF_Group(); 00081 00083 virtual void setID(int dof, int value); 00085 virtual void setID(const ID &values); 00087 virtual const ID &getID(void) const; 00088 00090 virtual int getTag(void) const; 00092 virtual int getNodeTag(void) const; 00094 virtual int getNumDOF(void) const; 00096 virtual int getNumFreeDOF(void) const; 00098 virtual int getNumConstrainedDOF(void) const; 00099 00101 virtual const Matrix &getTangent(Integrator *theIntegrator); 00103 virtual void zeroTangent(void); 00105 virtual void addMtoTang(double fact = 1.0); 00106 00108 virtual const Vector &getUnbalance(Integrator *theIntegrator); 00110 virtual void zeroUnbalance(void); 00112 virtual void addPtoUnbalance(double fact = 1.0); 00114 virtual void addPIncInertiaToUnbalance(double fact = 1.0); 00116 virtual void addM_Force(const Vector &Udotdot, double fact = 1.0); 00117 00119 virtual const Vector & getCommittedDisp(void); 00121 virtual const Vector & getCommittedVel(void); 00123 virtual const Vector & getCommittedAccel(void); 00124 00126 virtual void setNodeDisp(const Vector &u); 00128 virtual void setNodeVel(const Vector &udot); 00130 virtual void setNodeAccel(const Vector &udotdot); 00131 00133 virtual void incrNodeDisp(const Vector &u); 00135 virtual void incrNodeVel(const Vector &udot); 00137 virtual void incrNodeAccel(const Vector &udotdot); 00138 00139 00141 virtual void setEigenvector(int mode, const Vector &eigenvalue); 00142 00144 virtual Matrix *getT(void); 00145 00146 protected: 00148 void addLocalM_Force(const Vector &Udotdot, double fact = 1.0); 00149 00151 Vector *unbalance; 00153 Matrix *tangent; 00155 Node *myNode; 00156 00157 private: 00159 int myTag; 00161 ID myID; 00163 int numDOF; 00164 00166 static Matrix errMatrix; 00168 static Vector errVect; 00170 static Matrix **theMatrices; 00171 static Vector **theVectors; 00172 static int numDOFs; // number of objects 00173 }; 00174 00175 #endif 00176