Exact Diagonalization: Normal

How Exact Diagonalization/Arpack/Lanczos is performed

Quick access

Routines:

diagonalize_impurity_normal()

Used modules

  • ed_input_vars: User-accessible input variables

  • ed_vars_global: Global variable accessible throughout the code

  • ed_eigenspace: Data types for the eigenspace

  • ed_aux_funx: Assortment of auxiliary procedures required throughout the code

  • ed_setup: Routines for solver environment initialization and finalization

  • ed_sector: Routines for Fock space sectors creation and manipulation

  • ed_hamiltonian_normal: Routines for Hamiltonian construction, NORMAL case

External modules

Subroutines and functions

subroutine  ed_diag_normal/diagonalize_impurity_normal()

This procedure performs the diagonalization of the Hamiltonian in each symmetry sector for ed_mode = normal , i.e. for quantum number \(\vec{Q}=[\vec{N}_\uparrow,\vec{N}_\downarrow]\).

The diagonalization proceeds in three steps.

  1. Setup the diagonalization of selected sectors only if the file sectorfile exists.

  2. Perform a cycle over all the symmetry sectors \({\cal S}(\vec{Q})\)

  • Decide if the sector should be diagonalized, i.e. if this is a twin sector and ed_twin is True.

  • Setup the Arpack/Lanczos parameters neigen , nblock , nitermax

  • Construct the sector Hamiltonian and/or just associate the correct matrix-vector product in build_hv_sector_normal

  • call sp_eigh (Arpack) or sp_lanc_eigh (Lanczos) or eigh (Lapack) according to the dimension of the sector and the value of lanc_method

  • Retrieve the eigen-states and save them to state_list

  1. Analyze the state_list , find the overall groundstate \(|\psi_0\rangle\) , trim the list using the cutoff \(\epsilon\) to that \(e^{-\beta E_{max}} < \epsilon\) , create an histogram of the states requested to each sector and use it to increase or decrease those number according to the contribution of each sector to the spectrum.