Kindfield
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Friends Pages
Public Member Functions | List of all members
UnrestrictedHartreeFockSolver Class Reference

#include <unrestrictedhartreefocksolver.h>

Inheritance diagram for UnrestrictedHartreeFockSolver:
Inheritance graph
[legend]
Collaboration diagram for UnrestrictedHartreeFockSolver:
Collaboration graph
[legend]

Public Member Functions

 UnrestrictedHartreeFockSolver (ElectronSystem *system)
 
virtual void setup ()
 UnrestrictedHartreeFockSolver::setup sets up the necessary matrices. More...
 
virtual void advance ()
 
virtual double energy ()
 
virtual void solve ()
 
const mat & coeffcientMatrixUp () const
 
const mat & coeffcientMatrixDown () const
 
const mat & densityMatrixUp () const
 
const mat & densityMatrixDown () const
 
void setInitialCoefficientMatrices (const mat &up, const mat &down)
 
bool isDiisEnabled () const
 
void setDiisEnabled (bool isDiisEnabled)
 
int diisSampleCount () const
 
void setDiisSampleCount (int diisSampleCount)
 
int diisStartingIteration () const
 
void setDiisStartingIteration (int diisStartingIteration)
 
- Public Member Functions inherited from HartreeFockSolver
 HartreeFockSolver (ElectronSystem *electronSystem)
 
virtual ~HartreeFockSolver ()
 
void setElectronSystem (ElectronSystem *electronSystem)
 
ElectronSystemelectronSystem ()
 
double convergenceTreshold () const
 
void setConvergenceTreshold (double convergenceTreshold)
 
int iterationsUsed () const
 
int nIterationsMax () const
 
void setNIterationsMax (int nIterationsMax)
 
const mat & uncoupledMatrix () const
 
const mat & overlapMatrix () const
 
const mat & transformationMatrix () const
 
const field< mat > & coupledMatrix () const
 
double densityMixFactor () const
 
void setDensityMixFactor (double densityMixFactor)
 

Additional Inherited Members

- Public Attributes inherited from HartreeFockSolver
double alpha [4]
 
- Protected Member Functions inherited from HartreeFockSolver
void setupIntegralMatrices ()
 
void normalizeCoefficientMatrix (uint nParticles, mat &coefficientMatrix)
 
- Protected Attributes inherited from HartreeFockSolver
int m_iterationsUsed
 

Detailed Description

Definition at line 7 of file unrestrictedhartreefocksolver.h.

Constructor & Destructor Documentation

UnrestrictedHartreeFockSolver::UnrestrictedHartreeFockSolver ( ElectronSystem system)
explicit

Definition at line 14 of file unrestrictedhartreefocksolver.cpp.

14  :
15  HartreeFockSolver(system),
16  m_initialCoefficientMatricesSetManually(false),
17  m_diisSampleCount(10),
18  m_diisStartingIteration(20),
19  m_isDiisEnabled(true)
20 {
21 }

Member Function Documentation

void UnrestrictedHartreeFockSolver::advance ( )
virtual

Reimplemented from HartreeFockSolver.

Definition at line 119 of file unrestrictedhartreefocksolver.cpp.

119  {
122  uint no = f->nBasisFunctions();
123  uint nkUp = f->nParticlesUp();
124  uint nkDn = f->nParticlesDown();
125 
126  mat &Fu = m_fockMatrixUp;
127  mat &Fd = m_fockMatrixDown;
128  mat &Cu = m_coefficientMatrixUp;
129  mat &Cd = m_coefficientMatrixDown;
130  vec &fockEnergiesUp = m_fockEnergiesUp;
131  vec &fockEnergiesDn = m_fockEnergiesDown;
132 
133  const mat &V = transformationMatrix();
134 
135  mat FprimeUp = V.t() * Fu * V;
136  mat FprimeDn = V.t() * Fd * V;
137 
138  mat CprimeUp;
139  mat CprimeDn;
140 
141  eig_sym(fockEnergiesUp, CprimeUp, FprimeUp);
142  eig_sym(fockEnergiesDn, CprimeDn, FprimeDn);
143 
144  if(nkUp > 0) {
145  Cu = V*CprimeUp.submat(0, 0, no - 1, nkUp - 1);
146  }
147  if(nkDn > 0) {
148  Cd = V*CprimeDn.submat(0, 0, no - 1, nkDn - 1);
149  }
150 
151  normalizeCoefficientMatrix(f->nParticlesUp(), m_coefficientMatrixUp);
152  normalizeCoefficientMatrix(f->nParticlesDown(), m_coefficientMatrixDown);
153 
154  setupDensityMatrices();
155  setupFockMatrices();
156 }
const mat & UnrestrictedHartreeFockSolver::coeffcientMatrixDown ( ) const

Definition at line 197 of file unrestrictedhartreefocksolver.cpp.

198 {
199  return m_coefficientMatrixDown;
200 }
const mat & UnrestrictedHartreeFockSolver::coeffcientMatrixUp ( ) const

Definition at line 192 of file unrestrictedhartreefocksolver.cpp.

193 {
194  return m_coefficientMatrixUp;
195 }
const mat & UnrestrictedHartreeFockSolver::densityMatrixDown ( ) const

Definition at line 207 of file unrestrictedhartreefocksolver.cpp.

208 {
209  return m_densityMatrixDown;
210 }
const mat & UnrestrictedHartreeFockSolver::densityMatrixUp ( ) const

Definition at line 202 of file unrestrictedhartreefocksolver.cpp.

203 {
204  return m_densityMatrixUp;
205 }
int UnrestrictedHartreeFockSolver::diisSampleCount ( ) const

Definition at line 291 of file unrestrictedhartreefocksolver.cpp.

292 {
293  return m_diisSampleCount;
294 }
int UnrestrictedHartreeFockSolver::diisStartingIteration ( ) const

Definition at line 281 of file unrestrictedhartreefocksolver.cpp.

282 {
283  return m_diisStartingIteration;
284 }
double UnrestrictedHartreeFockSolver::energy ( )
virtual

Implements HartreeFockSolver.

Definition at line 219 of file unrestrictedhartreefocksolver.cpp.

220 {
221  return m_energyUHF;
222 }
bool UnrestrictedHartreeFockSolver::isDiisEnabled ( ) const

Definition at line 301 of file unrestrictedhartreefocksolver.cpp.

302 {
303  return m_isDiisEnabled;
304 }
void UnrestrictedHartreeFockSolver::setDiisEnabled ( bool  isDiisEnabled)

Definition at line 306 of file unrestrictedhartreefocksolver.cpp.

307 {
308  m_isDiisEnabled = useDIIS;
309 }
void UnrestrictedHartreeFockSolver::setDiisSampleCount ( int  diisSampleCount)

Definition at line 296 of file unrestrictedhartreefocksolver.cpp.

297 {
298  m_diisSampleCount = diisIterationCount;
299 }
void UnrestrictedHartreeFockSolver::setDiisStartingIteration ( int  diisStartingIteration)

Definition at line 286 of file unrestrictedhartreefocksolver.cpp.

287 {
288  m_diisStartingIteration = diisStartingIteration;
289 }
void UnrestrictedHartreeFockSolver::setInitialCoefficientMatrices ( const mat &  up,
const mat &  down 
)

Definition at line 212 of file unrestrictedhartreefocksolver.cpp.

213 {
214  m_initialCoefficientMatricesSetManually = true;
215  m_initialCoefficientMatrixUp = up;
216  m_initialCoefficientMatrixDown = down;
217 }
void UnrestrictedHartreeFockSolver::setup ( )
virtual

UnrestrictedHartreeFockSolver::setup sets up the necessary matrices.

Reimplemented from HartreeFockSolver.

Definition at line 26 of file unrestrictedhartreefocksolver.cpp.

27 {
29  resetCoefficientMatrices();
30  resetFockMatrices();
31  setupDensityMatrices();
32  if(m_densityMatrixUp.n_rows > 0 && m_densityMatrixUp.n_cols > 1) {
33  m_densityMatrixUp(0,1) = 0.1; // Added asymmetry between the spin up and spin down orbitals
34  }
35  setupFockMatrices();
36 }
void UnrestrictedHartreeFockSolver::solve ( )
virtual

Reimplemented from HartreeFockSolver.

Definition at line 158 of file unrestrictedhartreefocksolver.cpp.

158  {
160  for(int i = 0; i < nIterationsMax(); i++) {
161  m_iterationsUsed = i + 1;
162  vec previousFockEnergies = m_fockEnergiesUp;
163  if(m_isDiisEnabled && i > m_diisStartingIteration) {
164  performDIIS();
165  }
166  advance();
167  if(i > 0) {
168  double stdDeviation = sum(abs(m_fockEnergiesUp - previousFockEnergies)) / m_fockEnergiesUp.n_elem;
169  if(stdDeviation < convergenceTreshold()) {
170  break;
171  }
172  }
173  }
174  calculateEnergy();
175 }

The documentation for this class was generated from the following files: