Python codes to solve bilinear biquadratic (BLBQ) spin models by exact diagonalization (ED).
These codes use the open-source QuSpin Python package (https://weinbe58.github.io/QuSpin/), whose installation guide can be found at https://weinbe58.github.io/QuSpin/Installation.html. The recommended installation uses Anaconda/Miniconda to install Python3 and manage all package dependencies.
The spin Hamiltonian under consideration reads as
where J is the exchange coupling, is a parameter that determines the relative strength between the bilinear and biquadratic terms, and denote spin-s operators at site i. The sum over i runs from 1 to N-1 (N mod N) for open (periodic) boundary conditions, where N is the length of the spin chain.
There are 3 types of code available, which compute different quantities.
-
The code 'excE_S2.py' computes excitation energies with respect to the ground state, and the expectation value of the operator with for the corresponding eigenstates.
-
The code 'Szi.py' computes the expectation value of the operator for eigenstates.
-
The codes 'ssw_S0GS.py' and 'ssw_S1GS.py' compute the spin spectral weights of excitations from a ground state with total spin S=0 and S=1, respectively. The spin spectral weight at site i for the eigenstate M' is formally defined as
where denotes the equilibrium occupation of the state M. This calculation is done at zero temperature, so that is the inverse of the ground state degeneracy for the ground states, and zero for all other eigenstates. It must also be noted that a selection rule imposes that the spin spectral weights can only be non-zero if the total spins of the ground state and the eigenstate M' differ from 0,+-1.
All codes take as inputs the following "physical parameters": s, N, J, and a variable BC that can be set to 0 (1) for open (periodic) boundary conditions.
In addition, the codes also have as inputs some of the following parameters: Sz denotes the symmetry sector in which the calculations are done, DeltaE sets the energy range for the excitations, nLanczos is the number of Lanczos vectors used in the diagonalization routine, and neigen is the number of eigenstates considered.
- Excitation spectrum, within the range of 50 meV, of an N=5 spin-1 open chain, with J = 18.4 meV and (note: for spin-1 chains, we know that we can obtain all energy levels in the symmetry sector with ).
python excE_S2.py 1 5 18.4 0.085 0 0 50 10
- Same as in 1 for a cyclic chain.
python excE_S2.py 1 5 18.4 0.085 1 0 50 10
python Szi.py 1 5 18.4 0.085 0 1 3
- Spin spectral weights of all allowed excitations within the range of 50 meV, for the same model as in 1 (note: from the output of 1, we already know that this model gives a ground state with S=1).
python ssw_S1GS.py 1 5 18.4 0.085 0 50 30
- Spin spectral weigths of all allowed excitations within the range of 50 meV, for the same model as in 2 (note: from the output of 2, we already know that this model gives a ground state with S=0).
python ssw_S0GS.py 1 5 18.4 0.085 1 50 30