Parse Umatrix

EDIpack2.0 offers the user two ways of providing the interaction Hamiltonian.

The default way is to use the in-built variables ULOC, UST, JH, JX, JP, which implement a Hubbard-Kanamori Hamiltonian for a maximum of 5 orbitals.

Alternatively, the user can provide a plain text file containing the second-quantized two-body operators. This is achieved by setting the ED_READ_UMATRIX flag to T in the input file. The filename (without extension) has to be provide via the UMATRIX_FILE variable (default name umatrix ). The actual file in the execution folder will need to have the .restart suffix. When doing a real-space DMFT simulation, the prefix will need to be _ineqXXXX.restart , where XXXX is a 4-digit incresing number corresponding to the index of the inequivalent site.

Each umatrix file needs to have the following format:

NORB BANDS
i1 j1 k1 l1 U_i1j1k1l1
i2 j2 k2 l2 U_i2j2k2l2

NORB is the number of orbitals. Empty lines and lines starting with #,%,! are ignored. The indices i,j,k,l are of the form o s where o is an integer number for the orbital index (starting from 1, maximum NORB ) and s is u for \(\uparrow\) spin and d for \(\downarrow\) spin. Each line of the file represents an operator of this form

\[\frac{1}{2}\sum_{i,j,k,l} c^{\dagger}_i c^{\dagger}_j U_{ijkl} c_l c_k\]

Note the inversion of the l and k operators with respect to \(U_{ijkl}\). The coefficient is given by the following formula

\[U_{ijkl} = \int \mathrm{d}x \int \mathrm{d}y \phi_i^{*}(x) \phi_j^{*}(y) U(x, y) \phi_k(x) \phi_l(y).\]

Note that the \(\frac{1}{2}\) prefactor is applied internally and does not need to be included by the user.

What follows is an example for a Hubbard-Kanamori interaction corresponding to the default input variables ULOC = 100, UST = 10, JH = JX = JP = 1 .

2 BANDS

#ULOC
1 d 1 u 1 d 1 u 100.0
1 u 1 d 1 u 1 d 100.0
2 d 2 u 2 d 2 u 100.0
2 u 2 d 2 u 2 d 100.0

#UST
1 d 2 u 1 d 2 u 10.0
1 u 2 d 1 u 2 d 10.0
2 d 1 u 2 d 1 u 10.0
2 u 1 d 2 u 1 d 10.0

#UST-JH
1 u 2 u 1 u 2 u 9.0
2 d 1 d 2 d 1 d 9.0
2 u 1 u 2 u 1 u 9.0
1 d 2 d 1 d 2 d 9.0

#JX, JP
1 d 1 u 2 d 2 u 1.0
1 d 2 u 2 d 1 u 1.0
1 u 1 d 2 u 2 d 1.0
1 u 2 d 2 u 1 d 1.0
2 d 1 u 1 d 2 u 1.0
2 d 2 u 1 d 1 u 1.0
2 u 1 d 1 u 2 d 1.0
2 u 2 d 1 u 1 d 1.0

Quick access

Routines:

read_umatrix_file()

Used modules

External modules

Subroutines and functions

subroutine  ed_parse_umatrix/read_umatrix_file(ufile)

This subroutine reads the interaction Hamiltonian from a user-specified file. Empty and commented lines are ignored. Each two-body operator is then parsed to recognize whether it is of the form ULOC, UST, JH, JX, JP. If so, those coefficients are populated. If not, the operator is saved in a dynamically allocated "sundry" array. Since EDIpack applies operators from right to left as \(c\rightarrow c^{\dagger} \rightarrow c \rightarrow c^{\dagger}\) the read two-body operators need to be properly ordered. If mean-field terms arise from the anticommutation, these are stored in an array mfHloc of dimension [2, 2, Norb, Norb], which will be added to impHloc upon Fock space H construction. If ED_VERBOSE > 3, this routine will print extensive information about the read file(s) and the type of the operators therein contained.

Parameters:

ufile [character(len=*)] – File containing a properly formatted interaction Hamiltonian