slater/slater.h
00001 #ifndef SLATER_H
00002 #define SLATER_H
00003 
00004 #include <armadillo>
00005 using namespace arma;
00006 
00007 class Config;
00008 class Orbital;
00009 
00015 class Slater
00016 {
00017 public:
00018     Slater(Config *config, Orbital *orbitals[], bool spinUp_);
00019 
00020     ~Slater();
00021     double determinant(vec2 r[]);
00022     void constructMatrix(vec2 r[]);
00023 
00024     mat matrix();
00025     mat inverse();
00026     void updateInverse(vec2 &particlePosition, int movedParticle);
00027     void calculateInverseNumerically();
00028     void setPreviousMovedParticle(int movedParticle);
00029     double ratio(vec2 &particlePosition, int movedParticle);
00030     void acceptMove(int movedParticle);
00031     void initialize(vec2 positions[]);
00032     double laplace(vec2 r[]);
00033     void gradient(vec2 r[], vec &rGradient);
00034     bool hasParticle(int particleNumber) const;
00035     void rejectMove();
00036     void updateMatrix(vec2 &particlePosition, int movedParticle);
00037 private:
00038     vec2 *rOld;
00039     vec2 *rNew;
00040 
00041     mat currentMatrix;
00042     mat previousMatrix;
00043 
00044     mat currentInverse;
00045     mat previousInverse;
00046 
00047     vec2 orbitalGradient;
00048 
00049     int nDimensions;
00050     int nParticles;
00051 
00052     int previousMovedParticle;
00053 
00054     int particleIndexOffset;
00055 
00056     Orbital **orbitals;
00057 
00058     bool spinUp;
00059 };
00060 
00061 #endif // SLATER_H
 All Classes Functions