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 TransformationDOF_Group_h
00027 #define TransformationDOF_Group_h
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include <DOF_Group.h>
00042
00043 class MP_Constraint;
00044 class SP_Constraint;
00045 class TransformationConstraintHandler;
00046
00047 class TransformationDOF_Group: public DOF_Group
00048 {
00049 public:
00050 TransformationDOF_Group(int tag, Node *myNode, MP_Constraint *mp, TransformationConstraintHandler*);
00051 TransformationDOF_Group(int tag, Node *myNode, TransformationConstraintHandler *);
00052 ~TransformationDOF_Group();
00053
00054
00055 int doneID(void);
00056 const ID &getID(void) const;
00057 virtual void setID(int dof, int value);
00058 Matrix *getT(void);
00059 virtual int getNumDOF(void) const;
00060 virtual int getNumFreeDOF(void) const;
00061 virtual int getNumConstrainedDOF(void) const;
00062
00063
00064 const Matrix &getTangent(Integrator *theIntegrator);
00065
00066
00067 const Vector &getUnbalance(Integrator *theIntegrator);
00068 void addM_Force(const Vector &Udotdot, double fact = 1.0);
00069
00070 const Vector &getTangForce(const Vector &x, double fact = 1.0);
00071 const Vector &getC_Force(const Vector &x, double fact = 1.0);
00072 const Vector &getM_Force(const Vector &x, double fact = 1.0);
00073
00074
00075 const Vector & getCommittedDisp(void);
00076 const Vector & getCommittedVel(void);
00077 const Vector & getCommittedAccel(void);
00078
00079
00080 void setNodeDisp(const Vector &u);
00081 void setNodeVel(const Vector &udot);
00082 void setNodeAccel(const Vector &udotdot);
00083
00084 void incrNodeDisp(const Vector &u);
00085 void incrNodeVel(const Vector &udot);
00086 void incrNodeAccel(const Vector &udotdot);
00087
00088 virtual void setEigenvector(int mode, const Vector &eigenvalue);
00089
00090 int addSP_Constraint(SP_Constraint &theSP);
00091 int enforceSPs(void);
00092
00093
00094 void addM_ForceSensitivity(const Vector &Udotdot, double fact = 1.0);
00095 void addD_ForceSensitivity(const Vector &vel, double fact = 1.0);
00096 void addD_Force(const Vector &vel, double fact = 1.0);
00097
00098 const Vector & getDispSensitivity(int gradNumber);
00099 const Vector & getVelSensitivity(int gradNumber);
00100 const Vector & getAccSensitivity(int gradNumber);
00101 int saveSensitivity(Vector *v,Vector *vdot,Vector *vdotdot,int gradNum,int numGrads);
00102
00103
00104 protected:
00105
00106 private:
00107
00108 MP_Constraint *theMP;
00109 Matrix *Trans;
00110 Matrix *modTangent;
00111 Vector *modUnbalance;
00112 ID *modID;
00113 int modNumDOF;
00114
00115 SP_Constraint **theSPs;
00116
00117
00118 static Matrix **modMatrices;
00119 static Vector **modVectors;
00120 static int numTransDOFs;
00121 static TransformationConstraintHandler *theHandler;
00122 };
00123
00124 #endif
00125