00001
00002
00003
00004
00005 #ifndef __suPointMass3DIATaylor_h__
00006 #define __suPointMass3DIATaylor_h__
00007
00008
00009
00010
00011
00012 #include <rdTools.h>
00013 #include <rdModelDLL.h>
00014 #include <rdModel.h>
00015 #include <rdPointMass3D.h>
00016 #include "suPointMass3DIATaylorDLL.h"
00017
00018 const int NNC = NNX + 6;
00019
00020
00021
00026 class SUPOINTMASS3DIATAYLOR_API suPointMass3DIATaylor : public rdPointMass3D
00027 {
00028
00029
00030
00031 public:
00032 static const int NC;
00033 static const int NE;
00034 static const int NEFOOT;
00035 static const int NEFRC;
00036 static const int CMUS;
00037 static const int CLIG;
00038 static const int CGRAV;
00039 static const int CCEN;
00040 static const int CVEL;
00041 static const int CINER;
00042 static const int CALLMUS;
00043 static const int CALL;
00044 static const double SMALL;
00045
00046 protected:
00047 char **_cNames;
00048 int _storageInterval;
00049 bool *_contactEstablished;
00050 double _tolContact,_tolPower;
00051 double *_sfrcLast,*_svelLast;
00052 double *_feContig,***_fe;
00053 double *_veContig,***_ve;
00054 double _at[NNC][3],_ah[NNC][NNU][3];
00055 rdStorage **_feStore;
00056 rdStorage **_veStore;
00057 rdStorage **_aeStore;
00058
00059
00060
00061
00062 public:
00063 suPointMass3DIATaylor();
00064 virtual ~suPointMass3DIATaylor();
00065 private:
00066 void constructComponentNames();
00067 void allocateElementVectors();
00068 void deleteStorage();
00069
00070 public:
00071
00072
00073
00074
00075 void setPerformDecomposition(bool aTrueFalse,int aCapcity=100);
00076 rdStorage** getForceStorage();
00077
00078 void getStiffness(double aVel[3],double aPos[3],
00079 double aDFDP[3],double aDFDV[3]);
00080
00081 void setStorageInterval(int aInterval);
00082 int getStorageInterval();
00083
00084
00085
00086
00087 void decompStep(double aDT,double aDFDP[3],double aDFDV[3],double aAcc[3],
00088 double aV[3],double aF[3]);
00089 void decompStep(double aDT,double aT,double aDFDP[3],double aDFDV[3],
00090 double aAcc[3],double aSVel[3],double aSFrc[3],
00091 double aV[3],double aF[3]);
00092 void compress(double aDT,double aDFDP,double aDFDV,double aAcc,
00093 double *aVe,double *aFe);
00094 void decompress(double aFrcLast,double aFrc,double aVelLast,double aVel,
00095 double *aVe,double *aFe);
00096 void correctForSliding(double aAlpha[3],double aF[3]);
00097 void correctForSliding(double aAlpha,double *aF);
00098 void computeHigherOrderDerivatives(int c,double t,double *dudt,
00099 double *ddudt,double *dddudt);
00100
00101
00102
00103
00104
00105 void printStorage(const char *aPath=NULL,double dt=-1.0);
00106
00107
00108
00109
00110 void
00111 integBeginCallback(int i,double dt,double t,double *x,double *y,
00112 void *cd=NULL);
00113 void
00114 integStepCallback(double *xtPrev,double *yPrev,int i,double dt,
00115 double t,double *xt,double *y,void *cd=NULL);
00116
00117
00118 };
00119
00120
00121
00122
00123 #endif // #ifndef __suPointMass3DIATaylor_h__