Hamiltonian Setup
The ED_HAMILTONIAN_NONSU2 module contains the implementation of
the superconducting sector Hamiltonian constructor.
The Hamiltonian is 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:
where \(H_{\rm imp}\) describes all the impurity Hamiltonian terms
where \(T^i_a\) are the excitonic field components, each proportional to the 4 generators of the \(SU(2)\), coupled to the exciton amplitudes.
The term \(H_{\rm int}\) describes the local electron-electron interaction in the generic Hubbard-Kanamori form with tunable parameters:
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.
Note
In the current implementation the nonsu2 mode does not
support (yet?) the presence of electron-phonon coupling terms.
Quick access
- Routines:
build_hv_sector_nonsu2(),delete_hv_sector_nonsu2(),tridiag_hv_sector_nonsu2(),vecdim_hv_sector_nonsu2()
Used modules
ed_hamiltonian_nonsu2_common: Common variables and types for Hamiltonian construction,NONSU2caseed_hamiltonian_nonsu2_stored_hxv: Routines for sparese matrix-vector product,NONSU2caseed_hamiltonian_nonsu2_direct_hxv: Routines for direct matrix-vector product,NONSU2case
Subroutines and functions
- subroutine ed_hamiltonian_nonsu2/build_hv_sector_nonsu2(isector[, hmat])
Builds the matrix-vector product \(H\times \vec{v}\) in the current sector.
Building the sector through
build_sector()forisectorRetrieve all dimensions of the sectors, setup the MPI split in parallel mode.
If total sector dimension is <
lanc_dim_thresholdthen Hamiltonian is stored into dense matrix for Lapack diagonalizationElse we proceeds according to the followins scheme:
Build Hamiltonian, \(H\times\vec{v}\) products. ed_sparse_h=Ted_sparse_h=Fcalled_buildh_nonsu2_mainserial:sphtimesv_p=>spmatvec_nonsu2_mainMPI:sphtimesv_p=>spmatvec_mpi_nonsu2_mainserial:sphtimesv_p=>directmatvec_nonsu2_mainMPI:sphtimesv_p=>directmatvec_mpi_nonsu2_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_nonsu2/delete_hv_sector_nonsu2()
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_pfor the matrix-vector product is nullified.
- function ed_hamiltonian_nonsu2/vecdim_hv_sector_nonsu2(isector)
Returns the dimensions
vecdimof the vectors used in the Arpack/Lanczos produces given the current sector indexisector. If parallel mode is active the returned dimension corresponds to the correct chunk for each thread.- Parameters:
isector [integer] – current sector index
- Result:
vecdim [integer] – vector or vector chunck dimension
- subroutine ed_hamiltonian_nonsu2/tridiag_hv_sector_nonsu2(isector, vvinit, alanc, blanc, norm2)
Returns the parameters \(\vec{\alpha}\) and \(\vec{\beta}\) , respectively
alancandblanc, of the partial tridiagonalization of the sector Hamiltonian on a Krylov basis with starting vectorvvinit.- Parameters:
isector [integer] – Current sector index
vvinit (•) [complex] – Input vector for the construction of the tridiagonal or Krylov basis
alanc (•) [real, allocatable] – \(\vec{\alpha}\) or diagonal parameters of the tridiagonal basis
blanc (•) [real, allocatable] – \(\vec{\beta}\) or sub-/over-diagonal parameters of the tridiagonal basis
norm2 [real] – Norm of the input vector \(\langle {\rm vvinit}|{\rm vvinit}\rangle\)