montecarlo/montecarlo.h
00001 #ifndef MONTECARLO_H
00002 #define MONTECARLO_H
00003 
00004 #include "../wavefunction/wavefunction.h"
00005 #include "../hamiltonian/hamiltonian.h"
00006 
00007 class INIParser;
00008 
00012 class MonteCarlo
00013 {
00014 public:
00015     MonteCarlo(Config *config);
00016     ~MonteCarlo();
00017 
00018     virtual void sample(int nCycles) = 0;
00019     virtual void loadConfiguration(INIParser *settings);
00020 
00021     static MonteCarlo *fromName(string monteCarloClass, Config *config);
00022 
00023     double *allEnergies() {
00024         return m_allEnergies;
00025     }
00026 
00027     double energy() {
00028         return m_energy;
00029     }
00030     double energySquared() {
00031         return m_energySquared;
00032     }
00033 
00034     void setThermalizationEnabled(bool arg) {
00035         terminalized = !arg;
00036         terminalizationTrials = 0;
00037     }
00038 
00039     vec2 **moves() {
00040         return m_moves;
00041     }
00042 
00043     void setStoreEnergies(bool arg) {
00044         storeEnergies = arg;
00045     }
00046 
00047     void setOutputEnergies(bool arg) {
00048         outputEnergies = arg;
00049     }
00050 
00051     void checkTerminalization(double localEnergy);
00052     void setRecordMoves(bool arg, int nMoves);
00053     void recordMove(int i, int nthMove);
00054     void randomizePositions();
00055 
00056 protected:
00057     Config *config;
00058     int nParticles;
00059     int nDimensions;
00060 
00061     double m_energy;
00062     double m_energySquared;
00063     double *m_allEnergies;
00064     long *idumMC;
00065 
00066     double terminalizationSum;
00067     int terminalizationNum;
00068     bool terminalized;
00069     double diffAverage;
00070 
00071     double prevTerminalizationAverage;
00072 
00073     int terminalizationTrials;
00074 
00075     WaveFunction* wave;
00076     Hamiltonian *hamiltonian;
00077 
00078     bool recordMoves;
00079     int nMoves;
00080     vec2 **m_moves;
00081     int move;
00082 
00083     int cycle;
00084 
00085     vec2 *rOld;
00086     vec2 *rNew;
00087     double stepLength;
00088     bool storeEnergies;
00089     double spawnRadius;
00090 
00091     bool sampleVariationalGradient;
00092     bool outputEnergies;
00093 };
00094 
00095 #endif // MONTECARLO_H
 All Classes Functions