Reduced Density Matrix

In the superc case the RDM is evaluated using a sparse algorithm to reduce computation load.

Quick access

Routines:

imp_rdm_superc()

Used modules

  • sf_constants

  • sf_iotools

  • sf_arrays

  • sf_linalg

  • ed_input_vars: Contains all global input variables which can be set by the user through the input file. A specific preocedure ed_read_input() should be called to read the input file using parse_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 the effective_bath, the gfmatrix and the sector 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 Hamiltonian

  • ed_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 the sector_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_superc

Subroutines and functions

subroutine  ed_rdm_superc/imp_rdm_superc()

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 superc mode we need to enforce the link between different spin orientation imposed by the symmetry of the sectors.