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
00040
00041 #include <FE_Element.h>
00042 #include <SP_Constraint.h>
00043 #include <DOF_Group.h>
00044 #include <TransformationConstraintHandler.h>
00045
00061 class TransformationFE: public FE_Element
00062 {
00063 public:
00069 TransformationFE(Element *theElement,
00070
00071 TransformationConstraintHandler &theHandler);
00077 ~TransformationFE();
00078
00079
00081 virtual const ID &getDOFtags(void) const;
00083 virtual const ID &getID(void) const;
00084
00086 void setAnalysisModel(AnalysisModel &theModel);
00088 virtual int setID(void);
00089
00091 virtual const Matrix &getTangent(Integrator *theIntegrator);
00093 virtual const Vector &getResidual(Integrator *theIntegrator);
00095 virtual void addKtForce(const Vector &disp, double fact = 1.0);
00097 virtual void addKsForce(const Vector &disp, double fact = 1.0);
00099 virtual void addKcForce(const Vector &disp, double fact = 1.0);
00101 virtual void addKiForce(const Vector &disp, double fact = 1.0);
00103 virtual void addD_Force(const Vector &vel, double fact = 1.0);
00105 virtual void addM_Force(const Vector &accel, double fact = 1.0);
00106
00108 virtual const Vector &getTangForce(const Vector &x, double fact = 1.0);
00110 virtual const Vector &getKtForce(const Vector &disp, double fcat = 1.0);
00112 virtual const Vector &getKsForce(const Vector &disp, double fcat = 1.0);
00114 virtual const Vector &getD_Force(const Vector &vel, double fcat = 1.0);
00116 virtual const Vector &getM_Force(const Vector &accel, double fcat = 1.0);
00118 virtual const Vector &getLastResponse(void);
00119
00121 int addSP(SP_Constraint &theSP);
00122
00123 protected:
00125 int transformResponse(const Vector &modResponse, Vector &unmodResponse);
00126
00127 private:
00128
00130 DOF_Group **theDOFs;
00132 int numSPs;
00134 SP_Constraint **theSPs;
00136 ID *modID;
00138 Matrix *modTangent;
00140 Vector *modResidual;
00142 int numGroups;
00144 int numEleNodalDOF;
00146 TransformationConstraintHandler *theHandler;
00147
00149 static Matrix **modMatrices;
00150 static Vector **modVectors;
00151 static Matrix **theTransformations;
00152 static int numTransFE;
00153 static int transCounter;
00154 static int sizeTransformations;
00155 static double *dataBuffer;
00157 static double *localKbuffer;
00159 static int sizeBuffer;
00160 };
00161
00162 #endif
00163
00164
00165
00166