![]() |
00001 #ifndef _BETA_DYNAMMETRIC_ 00002 00003 #include "baseHamiltonian.h" 00004 00027 00028 class dynamMetric: public baseHamiltonian 00029 { 00030 00031 public: 00032 00033 explicit dynamMetric(int dim); 00034 virtual ~dynamMetric() {}; 00035 00037 // Accessors // 00039 00041 virtual double tau() = 0; 00042 00044 double phi() { return 0.5 * mLogDetMetric + V(); } 00045 00047 // Mutators // 00049 00051 void setMaxNumFixedPoint(int n) { mMaxNumFixedPoint = n; } 00052 00054 void setFixedPointThreshold(double t) { mFixedPointThreshold = t; } 00055 00056 void evolveQ(const double epsilon); 00057 void beginEvolveP(const double epsilon); 00058 void finishEvolveP(const double epsilon); 00059 00061 // Auxiliary Functions // 00063 00064 virtual void prepareEvolution() { fComputeMetric(); fPrepareSpatialGradients(); } 00065 00066 protected: 00067 00069 int mMaxNumFixedPoint; 00070 00072 double mFixedPointThreshold; 00073 00075 VectorXd mAuxVector; 00076 00078 VectorXd mInit; 00079 00081 VectorXd mDelta; 00082 00084 double mLogDetMetric; 00085 00087 virtual void fComputeMetric() = 0; 00088 00090 virtual void fUpdateP() {}; 00091 00094 virtual void fPrepareSpatialGradients() { gradV(); } 00095 00097 virtual void fHatT(const double epsilon); 00098 00102 virtual void fHatTau(const double epsilon, const int numFixedPoint); 00103 00107 void fHatPhi(const double epsilon); 00108 00110 virtual VectorXd& dTaudp() = 0; 00111 00113 virtual VectorXd& dTaudq() = 0; 00114 00116 virtual VectorXd& dPhidq() = 0; 00117 00118 }; 00119 00120 #define _BETA_DYNAMMETRIC_ 00121 #endif