00001
00002
00003
00004
00005 #ifndef __suPointMassIATaylor_h__
00006 #define __suPointMassIATaylor_h__
00007
00008
00009
00010
00011
00012 #include <rdSimUtility.h>
00013 #include <rdSimModelDLL.h>
00014 #include <rdSimModel.h>
00015 #include <rdPointMass.h>
00016 #include "suPointMassIATaylorDLL.h"
00017
00018
00019
00020
00025 class RDPOINTMASS_API suPointMassIATaylor : public rdPointMass
00026 {
00027
00028
00029
00030 public:
00031 static const int NE;
00032
00033 protected:
00034 bool _contactEstablished;
00035 double _tolContact;
00036 rdSimStorage *_decompStore;
00037 rdSimStorage *_frcStore;
00038 rdSimStorage *_velStore;
00039 rdSimStorage *_accStore;
00040
00041
00042
00043
00044 public:
00045 suPointMassIATaylor();
00046 virtual ~suPointMassIATaylor();
00047 private:
00048 void deleteStorage();
00049
00050 public:
00051
00052
00053
00054
00055 void setPerformDecomposition(bool aTrueFalse,int aCapcity=100);
00056 rdSimStorage* getForceStorage();
00057
00058 void getStiffness(double aVel[3],double aPos[3],
00059 double aDFDP[3],double aDFDV[3]);
00060
00061
00062
00063
00064 void step(double aDT,double aDFDP,double aDFDV,double aAcc,
00065 double aV,double *aDV,double *aDF);
00066 void decompStep(double aDT,double aDFDP,double aDFDV,double aAcc,
00067 double *aV,double *aF);
00068 void step(double aDT,double aDFDP,double aDFDV,double aAcc,
00069 double *aV,double *aF,double *aDV,double *aDF);
00070
00071
00072
00073
00074 void
00075 integBeginCallback(int i,double dt,double t,double *x,double *y,
00076 void *cd=NULL);
00077 void
00078 integStepCallback(int i,double dt,double t,double *x,double *y,
00079 void *cd=NULL);
00080
00081
00082 };
00083
00084
00085
00086
00087 #endif // #ifndef __suPointMassIATaylor_h__