00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef DOF_Group_h
00027 #define DOF_Group_h
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
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
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
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
00088 virtual const Vector & getCommittedDisp(void);
00089 virtual const Vector & getCommittedVel(void);
00090 virtual const Vector & getCommittedAccel(void);
00091
00092
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
00102 virtual void setEigenvector(int mode, const Vector &eigenvalue);
00103
00104
00105 virtual Matrix *getT(void);
00106
00107
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
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
00124 Vector *unbalance;
00125 Matrix *tangent;
00126 Node *myNode;
00127
00128 private:
00129
00130 ID myID;
00131 int numDOF;
00132
00133
00134 static Matrix errMatrix;
00135 static Vector errVect;
00136 static Matrix **theMatrices;
00137 static Vector **theVectors;
00138 static int numDOFs;
00139 };
00140
00141 #endif
00142