Reduced Density Matrix
In the normal
case the RDM is evaluated using a sparse
algorithm to reduce computation load.
Quick access
- Routines:
Used modules
-
pi()
xi()
-
-
ed_input_vars
: Contains all global input variables which can be set by the user through the input file. A specific preocedureed_read_input()
should be called to read the input file usingparse_input_variable()
procedure from SciFortran. All variables are automatically set to a default, looked for and updated by reading into the file and, sequentially looked for and updated from command line (std.input) using the notation variable_name=variable_value(s) (case independent).ed_vars_global
: Contains all variables, arrays and derived types instances shared throughout the code. Specifically, it contains definitions of theeffective_bath
, thegfmatrix
and thesector
data structures.ed_aux_funx
: Hosts a number of auxiliary procedures required in different parts of the code. Specifically, it implements: creation/annihilation fermionic operators, binary decomposition of integer representation of Fock states and setup the local impurity Hamiltonianed_eigenspace
: A class implementing a data structure to efficiently store the low part of the Fock space spectrum, automatically spreading and retrieving the eigenstates among/from MPI threads.ed_setup
: Contains procedures to set up the Exact Diagonalization calculation, executing all internal consistency checks and allocation of the global memory.ed_sector
: Contains procedures to construct the symmetry sectors corresponding to a given set of quantum numbers \(\vec{Q}\), in particular it allocated and build thesector_map
connecting the states of a given sector with the corresponding Fock ones.ed_bath
: Contains routines for setting, accessing, manipulating and clearing the bath of the Impurity problem.ed_hamiltonian_normal
: Setup and build the sector Hamiltonian, returns the correct dimension of the vectors in the Arpack/Lanczos procedure in each thread and provides an interface to Tri-Diagonalize the Hamiltonian on a Krylov basis given a starting vector.
Subroutines and functions
- subroutine ed_rdm_normal/imp_rdm_normal()
Evaluates the RDM using the saved eigen-states in the
state_list
and an efficient sparse algorithm. For any given eigen-state \(|N\rangle\) we proceed as follows. Such state is a linear combination of the basis state in a given sector:\(|N\rangle = \sum_I c_I |I\rangle = \sum_{I}C_I |I_\uparrow\rangle|B_\uparrow\rangle|I_\downarrow\rangle|B_\downarrow\rangle\)
the goal is to build:
\(\rho_{IJ} = \sum_{B_\sigma}|I_\uparrow\rangle|B_\uparrow\rangle|I_\downarrow\rangle|B_\downarrow\rangle \langle B_\downarrow|\langle J_\downarrow| \langle B_\uparrow| \langle J_\uparrow|\)
However, not all the bath configurations are admissibile in this sum. In fact if we store in a sparse map which bath configuration \(B_\sigma\) (as integer) corresponds to a given value of the impurity configuration \(I_\sigma\), then we can look for those value of \(B_\sigma\) which couples to both \(I_\sigma\) and \(J_\sigma\). This reduces the sum to all and only the terms contributing to the RDM.
In the
normal
mode we operate each \(\sigma\) independently as follows from the symmetry of the sectors.