Skip to content

fengshi96/ExactDiagPy

Repository files navigation

ExactDiag by PRIMME: Python Realization

The program is designed to exactly diagonalize several common quantum many-body models. It uses iterative methods developed in the project PRIMME (Python wrapper of Fortran).

Another realization with Julia for Kitaev's honeycomb can be found in the repo: https://github.com/fengshi96/Honeycomb-ExactDiag which uses ARPACK instead of PRIMME. However it is significantly slower and consumes a lot more mem.

The program supports the following models: (1) Kitaev's honeycomb model + external field (2) 1D and 2D Heisenberg model + external field (3) 1D and 2D Bose Hubbard model

The program is dependent on Primme(https://pypi.org/project/primme/). To install Primme by pip:

pip install numpy   # if numpy is not installed yet
pip install scipy   # if scipy is not installed yet
pip install future  # if using python 2
pip install h5py    # if HDF5 is not installed
conda install mkl-devel # if using Anaconda Python distribution
pip install primme

The main.py takes one argument in terminal:

python main.py input.inp

The file input.inp includes all parameters that are needed to construct the Lattice and Hamiltonain:

LLX, LLY       # Number of unit cells in X and Y direction
Geometry       # Lattice Geometry, e.g. HoneyComb
Model          # Name of the model: Kitaev, Heisenberg or Hubbard
IsPeriodicX    # PBC (1) or OBC (0) in X direction
IsPeriodicY    # PBC (1) or OBC (0) in Y direction
Kxx, Kyy, Kzz  # The coupling constant of spins
Bxx, Byy, Bzz  # Magnetic field in x, y, z directions
t, U, mu       # Standard Constants in Hubbard Model
maxOccupation  # The upper bound of boson occupation number
Nstates        # Number of eigen states to keep
Option         # Axiliary options. "option=EE" calculates entanglement spectrum and entropy 
muFlux         # energy bias of fluxes in Kitaev model

The Parameter class defined in src/Parameter mounts all in the input.inp that are to be used to construct lattice and Hamiltonian.

The lattice structure are automatically printed by Lattice class. You can also call them in the code e.g. (1) Lat.mesh_ is the lattice defined on a mesh, with vacant sites = -1. (in Heisenberg there is no vacant sites) (2)Lat.nn_ is the nearest neighbor matrix. etc..

the kernel of Hamiltonian construction is in src/Hamiltonian. The connector matrices are called KzzGraph_, KxxGraph_ ..

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors