SPINPACK is a big program package to compute
lowest eigenvalues and eigenstates and various expectation values
(spin correlations etc) for quantum
spin systems.
These model systems can for example describe magnetic properties of insulators
at very low temperatures (T=0) where the magnetic moments of the particles
form entangled quantum states.
The first SPINPACK 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. Since version 2.30 MPI can also be used.
Verify download using:
gpg --verify spinpack-2.41.tgz.asc spinpack-2.41.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.
One of my ideas is to use FPGAs but my impression
on 2009 was, that the FPGA/VHDL-Compiler and Xilings-tools are so slow,
badly scaling and buggy, that code generation and debugging is really no
fun and a much better FPGA toolchain is needed for HPC.
Please use these data for your work or verify my data. Questions and corrections are welcome. If you miss data or explanations here, please send a note to me.
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.
This picture is showing a small sample of a possible Hilbert matrix.
The non-zero elements are shown as black pixels (v2.33 Feb2008 kago36z14j2).
This picture is showing a small sample of a possible Hilbert matrix.
The non-zero elements are shown as black (J1) and gray (J2) pixels
(v2.42 Nov2011 j1j2-chain N=18 Sz=0 k=0). Config space is sorted by
J1-Ising-model-Energy to show structures of the matrix.
Ising energy ranges are shown as slightly grayed arrays.
. . .
Ground state energy scaling for finite size spin=1/2-AFM-chains N=4..40
using up to 300GB memory to store the N=39 sparse matrix and 245 CPU-houres
(2011, src=lc.gpl).