SPINPACK is a big program package to compute
lowest eigenvalues and eigenstates and various expectation values
(spin correlations etc) for 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 up to 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 40 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,
S(z) symmetry and spin inversion to reduce matrix size.
The results are very reliable because the package has been used
since 1997 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.
Verify download using: gpg --verify spinpack-2.26.asc spinpack-2.26.tgz
The documentation is available in the doc-path.
Most parts of the documentation are rewritten in english now. If you
still find some parts written in german or out-of-date documentation
send me an email with a short hint where I find this part and
I want to rewrite this part as soon as I can.
Please see doc/history.html for latest changes.
You can find a documentation about speed on this
spinpack-speed-page.
The most time consuming important function is b_smallest
in hilbert.c
. This function computes the representator
of a set of symmetric spin configurations (bit pattern) from a member of
this set. It also returns a phase factor and the orbit length.
It would be a great progress,
if the performance of that function could be improved.
Ideas are welcome.
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 automatically 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.