wavefunction/wavefunction.h
00001 #ifndef WAVEFUNCTION_H
00002 #define WAVEFUNCTION_H
00003 
00004 #include <armadillo>
00005 using namespace arma;
00006 
00007 #include <string>
00008 using namespace std;
00009 
00010 class INIParser;
00011 class Config;
00012 
00016 class WaveFunction
00017 {
00018 public:
00019     WaveFunction(Config *config);
00020     virtual double evaluate(vec2 r[]) = 0;
00021     virtual void gradient(vec2 r[], vec &rGradient) {
00022         gradientNumerical(r, rGradient);
00023     }
00024     virtual double laplace(vec2 r[]) {
00025         return laplaceNumerical(r);
00026     }
00027     virtual WaveFunction* clone() = 0;
00028     virtual void loadConfiguration(INIParser *settings);
00029     virtual double laplaceNumerical(vec2 r[]);
00030     virtual void gradientNumerical(vec2 r[], vec &rGradient);
00031     virtual void setParameters(double *parameters);
00032     static WaveFunction* fromName(string waveClass, Config *config);
00033 //    virtual void setPreviousMovedParticle(int particleNumber);
00034     virtual double ratio(vec2 &particlePosition, int movedParticle);
00035     virtual void acceptMove(int movedParticle);
00036     virtual void rejectMove();
00037     virtual void initialize(vec2 r[]);
00038     virtual void prepareGradient(vec2 &particlePosition, int movedParticle) {
00039         (void) movedParticle;
00040         (void) particlePosition;
00041     }
00042 
00043     void setUseAnalyticalLaplace(bool val) {
00044         useAnalyticalLaplace = val;
00045     }
00046 
00047     void setUseAnalyticalGradient(bool val) {
00048         useAnalyticalGradient = val;
00049     }
00050 
00051     ~WaveFunction();
00052     virtual void outputProperties();
00053 protected:
00054     Config *config;
00055     int nParticles;
00056     int nDimensions;
00057     double *parameters;
00058     vec2 *rPlus;
00059     vec2 *rMinus;
00060 
00061     vec2 *rNew;
00062     vec2 *rOld;
00063     double previousEvaluation;
00064     double currentEvaluation;
00065 
00066     bool useAnalyticalLaplace;
00067     bool useAnalyticalGradient;
00068 };
00069 
00070 #endif // WAVEFUNCTION_H
 All Classes Functions