IM-SRG++  0
HartreeFock Class Reference

## Public Member Functions

HartreeFock (Operator &hbare)
Constructor.

void BuildMonopoleV ()
Only the monopole part of V is needed, so construct it. More...

void BuildMonopoleV3 ()
Only the monopole part of V3 is needed. More...

void Diagonalize ()
Diagonalize the Fock matrix. More...

void UpdateF ()
Update the Fock matrix with the new transformation coefficients C. More...

void UpdateDensityMatrix ()
Update the density matrix with the new coefficients C. More...

bool CheckConvergence ()
Compare the current energies with those from the previous iteration. More...

void Solve ()
Diagonalize and UpdateF until convergence. More...

void CalcEHF ()
Evaluate the Hartree Fock energy. More...

void PrintEHF ()
Print out the Hartree Fock energy. More...

void ReorderCoefficients ()
Reorder the coefficients in C to eliminate phases etc. More...

Operator TransformToHFBasis (Operator &OpIn)
Transform an operator from oscillator basis to HF basis. More...

Operator GetNormalOrderedH ()
Return the Hamiltonian in the HF basis at the normal-ordered 2body level. More...

Operator GetOmega ()
Return a generator of the Hartree Fock transformation. More...

Operator GetHbare ()

void PrintSPE ()
Getter function for Hbare. More...

void FreeVmon ()
Free up the memory used to store Vmon3.

void GetRadialWF (index_t index, vector< double > &R, vector< double > &PSI)
Return the radial wave function of an orbit in the HF basis.

## Public Attributes

OperatorHbare
Input bare Hamiltonian.

ModelSpacemodelspace
Model Space of the Hamiltonian.

arma::mat C
transformation coefficients, 1st index is ho basis, 2nd = HF basis

arma::mat rho
density matrix rho_ij

arma::mat KE
kinetic energy

arma::mat Vij
1 body piece of 2 body potential

arma::mat V3ij
1 body piece of 3 body potential

arma::mat F
Fock matrix.

array< array< arma::mat, 2 >, 3 > Vmon
Monopole 2-body interaction.

array< array< arma::mat, 2 >, 3 > Vmon_exch
Monopole 2-body interaction.

arma::uvec holeorbs
list of hole orbits for generating density matrix

arma::rowvec hole_occ

arma::vec energies
occupations of hole orbits More...

arma::vec prev_energies
SPE's from last iteration.

double tolerance
tolerance for convergence

double EHF
Hartree-Fock energy (Normal-ordered 0-body term)

double e1hf
One-body contribution to EHF.

double e2hf
Two-body contribution to EHF.

double e3hf
Three-body contribution to EHF.

int iterations
iterations used in Solve()

vector< pair< const array< int, 6 >, double > > Vmon3

IMSRGProfiler profiler
Profiler for timing, etc.

deque< double > convergence_ediff
Save last few convergence checks for diagnostics.

deque< double > convergence_EHF
Save last few convergence checks for diagnostics.

## Member Function Documentation

 void HartreeFock::BuildMonopoleV ( )

Only the monopole part of V is needed, so construct it.

Construct an unnormalized two-body monopole interaction

$\langle ab | \bar{V}^{(2)} | cd \rangle = \sqrt{(1+\delta_{ab})(1+\delta_{cd})} \sum_{J} (2J+1) \langle ab | V^{(2)} | cd \rangle_{J}$

This method utilizes the operator method TwoBodyME::GetTBMEmonopole()

 void HartreeFock::BuildMonopoleV3 ( )

Only the monopole part of V3 is needed.

Construct an unnormalized three-body monopole interaction

$\langle iab | \bar{V}^{(3)} | jcd \rangle = \sum\limits_{J,J_{12}}\sum_{Tt_{12}}(2J+1)(2T+1) \langle (ia)J_{12}t_{12};b JT| V^{(3)} | (jc)J_{12}t_{12}; d JT\rangle$

 void HartreeFock::CalcEHF ( )

Evaluate the Hartree Fock energy.

Calculate the HF energy.

\begin{eqnarray*} E_{HF} &=& \sum_{\alpha} t_{\alpha\alpha} + \frac{1}{2}\sum_{\alpha\beta} V_{\alpha\beta\alpha\beta} + \frac{1}{6}\sum_{\alpha\beta\gamma} V_{\alpha\beta\gamma\alpha\beta\gamma} \\ &=& \sum_{ij} (2j_i+1) \rho_{ij} ( t_{ij} +\frac{1}{2}\tilde{V}^{(2)}_{ij} + \frac{1}{6}\tilde{V}^{(3)}_{ij} ) \end{eqnarray*}

Where the matrices

\begin{eqnarray*} \tilde{V}^{(2)}_{ij} &=& \sum_{ab} \rho_{ab}\bar{V}^{(2)}_{iajb} \\ \tilde{V}^{(3)}_{ij} &=& \sum_{abcd} \rho_{ab}\rho_{cd} \bar{V}^{(3)}_{iacjbd} \\ \end{eqnarray*}

have already been calculated by UpdateF().

 bool HartreeFock::CheckConvergence ( )

Compare the current energies with those from the previous iteration.

Check for convergence using difference in s.p. energies between iterations. Converged when

$\delta_{e} \equiv \sqrt{ \sum_{i}(e_{i}^{(n)}-e_{i}^{(n-1)})^2} < \textrm{tolerance}$

where $$e_{i}^{(n)}$$ is the $$i$$th eigenvalue of the Fock matrix after $$n$$ iterations.

 void HartreeFock::Diagonalize ( )

Diagonalize the Fock matrix.

[See Suhonen eq. 4.85] Diagonalize the fock matrix $$<a|F|b>$$ and put the eigenvectors in $$C(i,\alpha) = <i|\alpha>$$ and eigenvalues in the vector energies. Save the last vector of energies to check for convergence. Submatrices corresponding to different channels are diagonalized independently. This guarantees that J,Tz, and $$\pi$$ remain good.

 Operator HartreeFock::GetNormalOrderedH ( )

Return the Hamiltonian in the HF basis at the normal-ordered 2body level.

Returns the normal-ordered Hamiltonian in the Hartree-Fock basis, neglecting the residual 3-body piece.

$E_0 = E_{HF}$

$f = C^{\dagger} F C$

$\Gamma = D^{\dagger} \left(V^{(2)}+V^{(3\rightarrow 2)} \right) D$

$V^{(2\rightarrow 3)J}_{ijkl} \equiv \frac{1}{\sqrt{(1+\delta_{ij})(1+\delta_{kl})}}\sum_{ab}\sum_{J_3}(2J_{3}+1)\rho_{ab}V^{JJJ_{3}}_{ijaklb}$

Where $$F$$ is the Fock matrix obtained in UpdateF() and the matrix $$D$$ is the same as the one defined in TransformToHFBasis().

 Operator HartreeFock::GetOmega ( )

Return a generator of the Hartree Fock transformation.

Get the one-body generator corresponding to the transformation to the HF basis. Since the unitary transformation for HF is given by the $$U_{HF} = C^{\dagger}$$ matrix, we have $$e^{-\Omega} = C \Rightarrow \Omega = -\log(C)$$. The log is evaluated by diagonalizing the one-body submatrix and taking the log of the diagonal entries. This is much slower than the other methods, but it might be useful.

 void HartreeFock::PrintEHF ( )

Print out the Hartree Fock energy.

Print out the Hartree Fock energy, and the 1-, 2-, and 3-body contributions to it.

 void HartreeFock::PrintSPE ( )

Getter function for Hbare.

Print out the single-particle energies

 void HartreeFock::ReorderCoefficients ( )

Reorder the coefficients in C to eliminate phases etc.

Eigenvectors/values come out of the diagonalization energy-ordered. We want them ordered corresponding to the input ordering, i.e. we want the l,j,tz sub-blockes of the matrix C to be energy-ordered and positive along the diagonal. For a 3x3 matrix this would be something like (this needs to be updated)

$\left( \begin{array}{rrr} -0.8 & 0.2 & -0.6 \\ -0.3 & 0.3 & 0.9 \\ 0.2 & 0.9 & -0.4 \\ \end{array}\right) \rightarrow \left(\begin{array}{rrr} 0.8 & -0.6 & 0.2 \\ 0.3 & 0.9 & 0.3 \\ -0.2 & -0.4 & 0.9 \\ \end{array}\right)$

 void HartreeFock::Solve ( )

Diagonalize and UpdateF until convergence.

Diagonalize and update the Fock matrix until convergence. Then, call ReorderCoefficients() to make sure the index ordering and phases are preserved in the transformation from the original basis to the Hatree-Fock basis.

 Operator HartreeFock::TransformToHFBasis ( Operator & OpHO )

Transform an operator from oscillator basis to HF basis.

Takes in an operator expressed in the basis of the original Hamiltonian, and returns that operator in the Hartree-Fock basis.

$t_{HF} = C^{\dagger} t_{HO} C$

$V_{HF}^{J} = D^{\dagger} V^{J}_{HO} D$

The matrix $$D$$ is defined as

$D_{ab\alpha\beta} \equiv \sqrt{ \frac{1+\delta_{ab}} {1+\delta_{\alpha\beta}} } C_{a\alpha} C_{b\beta}$

The factor in the square root is due to the fact that we're using normalized TBME's. Since only kets with $$a\leq b$$ are stored, we can use the antisymmetry of the TBME's and define

$D(J)_{ab\alpha\beta} \equiv \sqrt{ \frac{1+\delta_{ab}} {1+\delta_{\alpha\beta}} } \left( C_{a\alpha} C_{b\beta} -(1-\delta_{ab})(-1)^{j_a+j_b-J} C_{b\alpha}C_{a\beta}\right)$

 void HartreeFock::UpdateDensityMatrix ( )

Update the density matrix with the new coefficients C.

one-body density matrix $$<i|\rho|j> = \sum\limits_{\beta} n_{\beta} <i|\beta> <\beta|j>$$ where $$n_{\beta}$$ ensures that beta runs over HF orbits in the core (i.e. below the fermi surface)

 void HartreeFock::UpdateF ( )

Update the Fock matrix with the new transformation coefficients C.

[See Suhonen eq 4.85]

$F_{ij} = t_{ij} + \frac{1}{2j_i+1}\sum_{ab} \rho_{ab} \bar{V}^{(2)}_{iajb} + \frac{1}{2(2j_i+1)}\sum_{abcd}\rho_{ab} \rho_{cd} \bar{V}^{(3)}_{iacjbd}$

• $$F$$ is the Fock matrix, to be diagonalized
• $$t$$ is the kinetic energy
• $$\rho$$ is the density matrix defined in UpdateDensityMatrix()
• $$\bar{V}^{(2)}$$ is the monopole component of the 2-body interaction defined in BuildMonopoleV().
• $$\bar{V}^{(3)}$$ is the monopole component of the 3-body interaction devined in BuildMonopoleV3().

## Member Data Documentation

 arma::vec HartreeFock::energies

occupations of hole orbits

vector of single particle energies

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