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 TransformationFE_h
00027 #define TransformationFE_h
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include <FE_Element.h>
00040 class SP_Constraint;
00041 class DOF_Group;
00042 class TransformationConstraintHandler;
00043
00044 class TransformationFE: public FE_Element
00045 {
00046 public:
00047 TransformationFE(int tag, Element *theElement);
00048 ~TransformationFE();
00049
00050
00051 virtual const ID &getDOFtags(void) const;
00052 virtual const ID &getID(void) const;
00053 void setAnalysisModel(AnalysisModel &theModel);
00054 virtual int setID(void);
00055
00056
00057 virtual const Matrix &getTangent(Integrator *theIntegrator);
00058 virtual const Vector &getResidual(Integrator *theIntegrator);
00059
00060
00061 virtual const Vector &getTangForce(const Vector &x, double fact = 1.0);
00062 virtual const Vector &getK_Force(const Vector &accel, double fcat = 1.0);
00063 virtual const Vector &getKi_Force(const Vector &accel, double fcat = 1.0);
00064 virtual const Vector &getM_Force(const Vector &accel, double fcat = 1.0);
00065 virtual const Vector &getC_Force(const Vector &vel, double fcat = 1.0);
00066 virtual void addD_Force(const Vector &vel, double fact = 1.0);
00067 virtual void addM_Force(const Vector &accel, double fact = 1.0);
00068
00069 const Vector &getLastResponse(void);
00070 int addSP(SP_Constraint &theSP);
00071
00072
00073
00074 virtual void addM_ForceSensitivity (int gradNumber, const Vector &vect, double fact = 1.0);
00075 virtual void addD_ForceSensitivity (int gradNumber, const Vector &vect, double fact = 1.0);
00076
00077
00078 protected:
00079 int transformResponse(const Vector &modResponse, Vector &unmodResponse);
00080
00081 private:
00082
00083
00084 DOF_Group **theDOFs;
00085 int numSPs;
00086 SP_Constraint **theSPs;
00087 ID *modID;
00088 Matrix *modTangent;
00089 Vector *modResidual;
00090 int numGroups;
00091 int numTransformedDOF;
00092 int numOriginalDOF;
00093
00094
00095 static Matrix **modMatrices;
00096 static Vector **modVectors;
00097 static Matrix **theTransformations;
00098 static int numTransFE;
00099 static int transCounter;
00100 static int sizeTransformations;
00101 static double *dataBuffer;
00102 static double *localKbuffer;
00103 static int *dofData;
00104 static int sizeBuffer;
00105 };
00106
00107 #endif
00108
00109
00110
00111