Hamiltonian Setup
In ed_hamiltonian_nonsu2
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:
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()
,vecdim_hv_sector_nonsu2()
,tridiag_hv_sector_nonsu2()
Used modules
ed_hamiltonian_nonsu2_common
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()
forisector
Retrieve all dimensions of the sectors, setup the MPI split in parallel mode.
If total sector dimension is <
lanc_dim_threshold
then Hamiltonian is stored into dense matrix for Lapack diagonalizationElse we proceeds according to the followins scheme:
ed_sparse_h
=T
ed_sparse_h
=F
called_buildh_nonsu2_main
serial:sphtimesv_p
=>
spmatvec_nonsu2_main
MPI:sphtimesv_p
=>
spmatvec_mpi_nonsu2_main
serial:sphtimesv_p
=>
directmatvec_nonsu2_main
MPI: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_p
for the matrix-vector product is nullified.
- function ed_hamiltonian_nonsu2/vecdim_hv_sector_nonsu2(isector)
Returns the dimensions
vecdim
of 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
- Return:
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
alanc
andblanc
, of the partial tridiagonalization of the sector Hamiltonian on a Krylov basis with starting vectorvvinit
.- 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]