SPINPACK is a big program package to calculate lowest eigenvalues and eigenstates,
spin correlations etc of quantum spin systems.
The first version was based on Nishimori's TITPACK (Lanczos method), but
it was early converted to C/C++ and completely rewritten.
Other algorithms are implemented too. See 2x2-diagonalization for example.
It is able to handle Heisenberg, t-J, and Hubbard-Systems until 64 sites
if you have enough memory, disk space and computing power.
For instance we were able to get the lowest eigenstates for the Heisenberg Hamiltonian
on a 36 site square lattice on our machines.
The package is written mainly in C to get it running on all unix systems.
C++ is only needed for complex eigenvectors and
twisted boundary conditions.
The program can use all topological symmetries and
S(z) symmetry to reduce matrix size.
The results are very reliable because the package has been used
used for more than 5 years
in scientific work.
Parallel processing (pthreads) can be used with version 1.9 for shared memory multiprocessor machines. (For unknown reasons the older PRAGMA-MP variant was not running faster. Now the same code as pthread version does its task. This is probably caused by bad parallel code generated by the PRAGMA-MP-compilers (MIPSpro 7.2.1).) Future versions will work also on MPI-systems (for PC clusters). Since version 2 the program uses Large File Support (>2GB) if available and fallback to mapped files if there is not enough memory.
Q: I try to diagonalize a 4-spin system, but I do not get the full spectrum. Why? A: Spinpack is designed to handle big systems. Therefore it uses as much symmetries as it can. The very small 4-spin system has a very special symmetry which makes it equivalent to a 2-spin system build by two s=1 spins. Spinpack uses this symmetry automaticly to give you the possibility to emulate s=1 (or s=3/2,etc) spin systems by pairs of s=1/2 spins. If you want to switch this off, edit src/config.h and change CONFIG_S1SYM to CONFIG_NOS1SYM.