00001 #ifndef WAVESLATER_H
00002 #define WAVESLATER_H
00003
00004 #include "wavefunction.h"
00005
00006 #include <armadillo>
00007 using namespace std;
00008 using namespace arma;
00009
00010 #include "../config.h"
00011
00012 class Slater;
00013 class Jastrow;
00014 class Orbital;
00015
00023 class WaveSlater : public WaveFunction
00024 {
00025 public:
00026 WaveSlater(Config *config);
00027 double evaluate(vec2 r[]);
00028 void setParameters(double *parameters);
00029
00030 void acceptMove(int movedParticle);
00031 double ratio(vec2 &particlePosition, int movedParticle);
00032 void initialize(vec2 positions[]);
00033 double laplace(vec2 r[]);
00034 void gradient(vec2 r[], vec &rGradient);
00035 void rejectMove();
00036 WaveFunction *clone();
00037 Slater *slaterUp;
00038 Slater *slaterDown;
00039 Jastrow *jastrow;
00040 ~WaveSlater();
00041 void prepareGradient(vec2 &particlePosition, int movedParticle);
00042 void outputProperties() {
00043 WaveFunction::outputProperties();
00044 std::cout << interactionEnabled << std::endl;
00045 }
00046 private:
00047 vec slaterUpGradient;
00048 vec slaterDownGradient;
00049 vec jastrowGradient;
00050
00051 Orbital **orbitals;
00052 bool interactionEnabled;
00053 };
00054
00055 #endif // WAVESLATER_H