Kindfield
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Friends Pages
hartreefocksolver.h
Go to the documentation of this file.
1 #ifndef HARTREEFOCKSOLVER_H
2 #define HARTREEFOCKSOLVER_H
3 
4 #include <armadillo>
5 
6 using namespace arma;
7 
8 // Forward declarations
9 class ElectronSystem;
10 
12 {
13 public:
14  explicit HartreeFockSolver(ElectronSystem *electronSystem);
15 
16  virtual ~HartreeFockSolver();
17 
18  double alpha[4];
19 
20  virtual void setup();
21  virtual void advance();
22  virtual void solve();
23 
24  void setElectronSystem(ElectronSystem *electronSystem);
25  ElectronSystem *electronSystem();
26 
27  virtual double energy() = 0;
28  double convergenceTreshold() const;
29  void setConvergenceTreshold(double convergenceTreshold);
30 
31  int iterationsUsed() const;
32 
33  int nIterationsMax() const;
34  void setNIterationsMax(int nIterationsMax);
35 
36  const mat &uncoupledMatrix() const;
37  const mat &overlapMatrix() const;
38  const mat &transformationMatrix() const;
39  const field<mat> &coupledMatrix() const;
40 
41  double densityMixFactor() const;
42  void setDensityMixFactor(double densityMixFactor);
43 
44 protected:
45  void setupIntegralMatrices();
46  void normalizeCoefficientMatrix(uint nParticles, mat &coefficientMatrix);
48 private:
49  void setupCoupledMatrix();
50  void setupOverlapMatrix();
51  void setupUncoupledMatrix();
52  void cleanUpCoupledMatrix();
53  void allocateCoupledMatrix();
54  void setupTransformationMatrix();
55 
56  ElectronSystem *m_electronSystem;
57 
58  // Matrices
59  mat m_uncoupledMatrix;
60  mat m_overlapMatrix;
61  mat m_transformationMatrix;
62  field<mat> m_coupledMatrix;
63 
64  // Variables
65  double *m_QData;
66  double m_convergenceTreshold;
67  double m_previousFockEnergyRMS;
68  int m_nIterationsMax;
69  double m_densityMixFactor;
70  bool m_hasBeenSetup;
71 };
72 
73 #endif // HARTREEFOCKSOLVER_H