Exact diagonalization of the S=1/2 Heisenberg chain
(using magnetization conservation)

Program: hchan_m

Running instructions

Input: File read.in containing:
Column 1: System size N (integer)

Example read.in (N=8)

    8

Output: File eig.dat containing:
For each sector of fixed number of up spins nu:
Line 1: nu and the block size nst, followed by nst lines with:
Column 1: Eigenvalue number (integer)
Column 2: Energy eigenvalue (real)
Column 3: Spin quantum number (real)

Examples and comments

Periodic boundary conditions are used also for N=2, resulting in energies twice the normal singlet/triplet energies. The output in this case is:

 nu = 0    nst = 1
    0      0.5000000000      1.0000000000
 nu = 1    nst = 2
    0     -1.5000000000      0.0000000000
    1      0.5000000000      1.0000000000

Following are results for N=4. Note that states 2-4 for nu=2 are degenerate (same energies in column 2). The total spin (column 3) is then not diagonal. Some linear combinations of the 3 degenerate states are produced by the diagonalization routine, resulting in the calculated expectation value of the total spin not being the eigenvalues:

 nu = 0    nst = 1
    0      1.0000000000      2.0000000000
 nu = 1    nst = 4
    0     -1.0000000000      1.0000000000
    1     -0.0000000000      1.0000000000
    2      0.0000000000      1.0000000000
    3      1.0000000000      2.0000000000
 nu = 2    nst = 6
    0     -2.0000000000      0.0000000000
    1     -1.0000000000      1.0000000000
    2      0.0000000000      0.5029870708
    3      0.0000000000      0.9699263936
    4      0.0000000000      0.7583057392
    5      1.0000000000      2.0000000000

These are the lowest couple of eigenvalues for the mz=0,...,6 sectors of 12-site chain:

 nu = 0    nst = 1
    0      3.0000000000      6.0000000000
 nu = 1    nst = 12
    0      1.0000000000      5.0000000000
    1      1.1339745962      5.0000000000
 nu = 2    nst = 66
    0     -0.9189859472      4.0000000000
    1     -0.6609656356      4.0000000000
 nu = 3    nst = 220
    0     -2.6517399155      3.0000000000
    1     -2.2903940178      3.0000000000
 nu = 4    nst = 495
    0     -4.0705293260      2.0000000000
    1     -3.6374064252      2.0000000000
 nu = 5    nst = 792
    0     -5.0315434037      1.0000000000
    1     -4.5693744108      1.0000000000
 nu = 6    nst = 924
    0     -5.3873909174      0.0000000000
    1     -5.0315434037      1.0000000000

Here the largest matrix size is already 924*924, and thus not much larger system sizes can be treated without using additional symmetries for further block diagonalization.