hamiltonian/hamiltonian.h
00001 #ifndef HAMILTONIAN_H
00002 #define HAMILTONIAN_H
00003 
00004 #include <string>
00005 #include <armadillo>
00006 using namespace arma;
00007 
00008 using namespace std;
00009 
00010 class WaveFunction;
00011 class Config;
00012 
00016 class Hamiltonian
00017 {
00018 public:
00019     Hamiltonian(Config *config);
00020     virtual double energy(WaveFunction *wave, vec2 r[]) {
00021         double potEnergy = potentialEnergy(wave, r);
00022         double kinEnergy = kineticEnergy(wave, r);
00023         m_totalPotentialEnergy += potEnergy;
00024         m_totalKineticEnergy += kinEnergy;
00025         return potEnergy + kinEnergy;
00026     }
00027     virtual double potentialEnergy(WaveFunction *wave, vec2 r[]) = 0;
00028     virtual double kineticEnergy(WaveFunction *wave, vec2 r[]) = 0;
00029     virtual void resetTotalEnergies();
00030     virtual void outputTotals();
00031     virtual string totalsString();
00032     double totalPotentialEnergy () {
00033         return m_totalPotentialEnergy;
00034     }
00035     double totalKineticEnergy () {
00036         return m_totalKineticEnergy;
00037     }
00038 
00039     static Hamiltonian *fromName(string hamiltonianClass, Config *config);
00040 protected:
00041     int m_nParticles;
00042     int m_nDimensions;
00043     bool m_interactionEnabled;
00044     double m_totalPotentialEnergy;
00045     double m_totalKineticEnergy;
00046 };
00047 
00048 #endif // HAMILTONIAN_H
 All Classes Functions