Hamiltonian Setup

In ed_hamiltonian_superc we implement procedures to setup and build the sector Hamiltonian which are then used elsewhere to obtain the low part of the energy spectrum or construct the dynamical response functions.

The sector electron Hamiltonian has the form:

\[H_e = H_{\rm imp} + H_{\rm int}+ H_{\rm bath} + H_{\rm hyb}\]

where \(H_{\rm imp}\) describes all the impurity Hamiltonian terms

\[H_{\rm imp} = \sum_{ab,\sigma} \left[ H^{\rm imp}_{ab,\sigma} -\mu\delta_{ab}\right] c^{\dagger}_{a\sigma}c_{b\sigma} + \sum_{a} P_{a} c_{a\uparrow} c_{a\downarrow} + H.c.\]

where \(P_a\) is the external pair field coupled to the orbital resovled pair amplitudes.

The term \(H_{\rm int}\) describes the local electron-electron interaction in the generic Hubbard-Kanamori form with tunable parameters:

\[H_{\rm int} = \sum_{a} U_a n_{a\uparrow}n_{a\downarrow} + U'\sum_{a<b,\sigma} n_{a\sigma}n_{b\bar{\sigma}} + (U'-J)\sum_{a<b,\sigma} n_{a\sigma}n_{b\sigma} + J_x \sum_{ab} c^{\dagger}_{a\uparrow}c^{\dagger}_{b\uparrow}c_{a\downarrow}c_{b\uparrow} + J_p \sum_{ab}c^{\dagger}_{a\uparrow}c^{\dagger}_{a\downarrow}c_{b\downarrow}c_{b\uparrow}\]

where \(U_a=\) uloc, \(U'=\) ust, \(J=\) jh, \(J_x=\) jx and \(J_p=\) jp.

The \(H_{\rm bath}\) and \(H_{\rm hyb}\) describe, respectively, the bath terms of the Hamiltonian and the hopping between the impurity and the bath levels.

\[\begin{split}H_{\rm bath} & = \sum_p \sum_{ab\sigma} h^p_{ab\sigma}p^{\dagger}_{a\sigma}p_{b\sigma} + \sum_p \sum_{a} \Delta^p_a p_{a\uparrow}p_{a\downarrow} + H.c.\\\\ H_{\rm hyb} & = \sum_p \sum_{a\sigma} V^p_{a\sigma} c^{\dagger}_{a\sigma} p_{p\sigma} + H.c.\end{split}\]

In addition we include electron-phonon coupling terms of the form:

\[H = H_{ph} \otimes 1_e + H_{ph-ph}\otimes H_{e-ph}\]

Quick access

Routines:

build_hv_sector_superc(), delete_hv_sector_superc(), vecdim_hv_sector_superc(), tridiag_hv_sector_superc()

Used modules

Subroutines and functions

subroutine  ed_hamiltonian_superc/build_hv_sector_superc(isector[, hmat])

Builds the matrix-vector product \(H\times \vec{v}\) in the current sector.

  1. Building the sector through build_sector() for isector

  2. Retrieve all dimensions of the sectors, setup the MPI split in parallel mode.

  3. If total sector dimension is < lanc_dim_threshold then Hamiltonian is stored into dense matrix for Lapack diagonalization

  4. Else we proceeds according to the followins scheme:

Build Hamiltonian, \(H\times\vec{v}\) products.

ed_sparse_h = T

ed_sparse_h = F

call ed_buildh_superc_main
serial: sphtimesv_p() => spmatvec_superc_main()
MPI: sphtimesv_p() => spmatvec_mpi_superc_main()
serial: sphtimesv_p() => directmatvec_superc_main()
MPI: sphtimesv_p() => directmatvec_mpi_superc_main()
Parameters:

isector [integer] – Index of the actual sector to be analyzed

Options:

hmat (•, •) [complex] – Dense matrix to store the sector Hamiltonian is dim < lanc_dim_threshold

subroutine  ed_hamiltonian_superc/delete_hv_sector_superc()

Delete the all the memory used to construct the sector Hamiltonian and the corresponding matrix vector products. The sector is deleted, all the dimensions and MPI splitting variables are reset to zero. All the sparse matrices are deallocated having gone out of scope. The abstract interface pointer spHtimesV_p for the matrix-vector product is nullified.

function  ed_hamiltonian_superc/vecdim_hv_sector_superc(isector)

Returns the dimensions vecdim of the vectors used in the Arpack/Lanczos produces given the current sector index isector . If parallel mode is active the returned dimension corresponds to the correct chunk for each thread.

Parameters:

isector [integer] – current sector index

Return:

vecdim [integer] – vector or vector chunck dimension

subroutine  ed_hamiltonian_superc/tridiag_hv_sector_superc(isector, vvinit, alanc, blanc, norm2)

Returns the parameters \(\vec{\alpha}\) and \(\vec{\beta}\) , respectively alanc and blanc , of the partial tridiagonalization of the sector Hamiltonian on a Krylov basis with starting vector vvinit.

Input:
  • isector

  • vvinit

Output:
  • alanc corresponding to \(\vec{\alpha}\)

  • blanc corresponding to \(\vec{\beta}\)

  • norm2 the norm of the input vector \(\langle {\rm vvinit}|{\rm vvinit}\rangle\)

Parameters:
  • isector [integer]

  • vvinit (•) [complex]

  • alanc (•) [real, allocatable]

  • blanc (•) [real, allocatable]

  • norm2 [real]