A GPU-accelerated set of programs to diagonalize tight-binding Hamiltonians up to 32 orbitals. The tight-binding input file is modeled after the tight-binding output of Wannier90. They calculate the real part of the charge susceptibility (Lindhard susceptibility) perturbatively.
nvcc compiler (CUDA Toolkit). Confirmed to work for CUDA Toolkit 11.0, probably back-compatible to CUDA Toolkit 10.0.
Run the make.sh script in /src after changing the include directory.
An example tight-binding model, Nb_tb.dat, is provided for the purposes of testing the code. Any tight-binding model can be used, however, that is up to 32 states/orbitals (due to GPU batch diagonalization limits).
Refer to example_run.sh for usage for running the code.
We expect the user to use Wannier90 to generate the tight-binding moddel, with flag write_hr=.true. or write_tb=.true. Some lines in the files need to be deleted; the util/wannier_filter_hr.py script will do that for the write_hr output file.
You must have a tight-binding data file on hand, with the following format: {Rx} {Ry} {Rz} {orb1} {orb2} {Real part of H} {Imag part of H}
{Rx, Ry, Rz} are the unit cell numbers in x,y,z directions {orb1, orb2} are the tight-binding orbitals used, output by wannier90 or made by hand. They are just numbered 1-{norb}.