Exact diagonalization of the S=1/2 Heisenberg chain
(using semi-momentum states and spin-inversion symmetry)

Program: hchan_mkpz

Running instructions

The program generates all energy eigenvalues and total spin expectation values ( which equals the spin quantum number S for non-degenerate levels) in the sector of magnetization m=0 (which is where spin-inversion symmetry can be used to reduce the block size). For k=0,pi, parity quantum numbers p=-1 a nd +1 are included, whereas for other momenta the two sectors are degenerate and only p=1 states are generated.

Input

File read.in containing:
Column 1: System size N (integer)
Column 2: Estimated maximum block hilbert space size rm (integer)

Example read.in (N=8, rm=20)

    8  20

Output

File eig.dat containing, for each sector of magnetization m=0, semi-momentu m (=k*2*pi/N), parity (p=-1,+1), and spin-inversion (z=-1,+1) quantum numbers:
Line 1: k,p,z and the block size nrep, followed by nrep lines with:
Column 1: Eigenvalue number (integer)
Column 2: Energy eigenvalue (real)
Column 3: Spin quantum number (from the expectation value S*S) (real)

File low.dat containing lowest eigenstate for each sector:
Column 1: k (integer)
Column 2: p (integer)
Column 3: z (integer)
Column 4: Energy eigenvalue (real)
Column 5: Spin quantum number (real)

Examples and comments

These are all momentum 0 (k=0) and pi (k=N/2) eigenvalues for N=8:

    0    1    1         7
    1     -3.6510934089    0.0000000000
    2     -1.8019377358    2.0000000000
    3     -0.7261094450    0.0000000000
    4     -0.4450418679    2.0000000000
    5      0.3772028540    0.0000000000
    6      1.2469796037    2.0000000000
    7      2.0000000000    4.0000000000
    0    1   -1         1
    1      0.0000000000    1.0000000000
    0   -1   -1         2
    1     -1.0000000000    1.0000000000
    2      0.0000000000    1.0000000000
    4    1    1         5
    1     -2.6996281483    0.0000000000
    2     -0.7608767217    0.0000000000
    3     -0.0000000000    2.0000000000
    4      1.0000000000    2.0000000000
    5      1.4605048700    0.0000000000
    4   -1    1         1
    1      0.0000000000    2.0000000000
    4   -1   -1         4
    1     -3.1284190638    1.0000000000
    2     -1.2016396757    1.0000000000
    3      0.0000000000    3.0000000000
    4      1.3300587396    1.0000000000

Note that z=+1 and z=-1 states have even and odd total spin S, respectively. This holds for chain lengths of the form N=4n (n=integer). However, for lengths N=4n+2, the situation is the reverse. These are all N=6 eigenvalues:

    0    1    1         3
    1     -2.1180339887    1.0000000000
    2      0.1180339887    1.0000000000
    3      1.5000000000    3.0000000000
    0   -1   -1         1
    1     -1.5000000000    0.0000000000
    1    1    1         1
    1     -1.0000000000    1.0000000000
    1    1   -1         2
    1     -0.5000000000    0.0000000000
    2      1.0000000000    2.0000000000
    2    1    1         2
    1     -1.2807764064    1.0000000000
    2      0.7807764064    1.0000000000
    2    1   -1         1
    1     -0.0000000000    2.0000000000
    3    1    1         1
    1      0.5000000000    1.0000000000
    3   -1   -1         3
    1     -2.8027756377    0.0000000000
    2     -0.5000000000    2.0000000000
    3      0.8027756377    0.0000000000

There are now almost no cases of degenerate states within the blocks. For N=16, the only case is in the sector (k=8,p=1,z=1), eigenstates 211-214 (from the output file eig.dat; energy in column 2, total spinexpectation value in column 3):

  205      1.7694755225    4.0000000000
  206      1.8140181550    4.0000000000
  207      1.8894458390    2.0000000000
  208      1.9405198329    2.0000000000
  209      1.9456911098    0.0000000000
  210      1.9658445909    0.0000000000
  211      2.0000000000    5.9511599514
  212      2.0000000000    5.2310392300
  213      2.0000000000    5.6346373695
  214      2.0000000000    5.4079564124
  215      2.0375825763    4.0000000000
  216      2.0550258182    0.0000000000
  217      2.1369028899    2.0000000000
  218      2.1681216989    2.0000000000

Lowest eigenvalues in each (k,p,z) sector for N=16 (contents of the file low.dat):

    0    1    1   -7.1422963606    0.0000000000       257
    0    1   -1   -4.9014133216    1.0000000000       183
    0   -1    1   -4.1926152576    2.0000000000       158
    0   -1   -1   -5.7475957242    1.0000000000       212
    1    1    1   -5.6071498544    2.0000000000       392
    1    1   -1   -6.5234070574    1.0000000000       408
    2    1    1   -5.9642495146    0.0000000000       411
    2    1   -1   -5.9909868629    1.0000000000       397
    3    1    1   -5.5423972804    0.0000000000       392
    3    1   -1   -5.6151755979    1.0000000000       408
    4    1    1   -5.3276180525    0.0000000000       413
    4    1   -1   -5.4519656677    1.0000000000       396
    5    1    1   -5.3539458041    0.0000000000       392
    5    1   -1   -5.5253530868    1.0000000000       408
    6    1    1   -5.7799253386    2.0000000000       411
    6    1   -1   -5.8232311433    1.0000000000       397
    7    1    1   -6.0858297375    0.0000000000       392
    7    1   -1   -6.2986527255    1.0000000000       408
    8    1    1   -6.6965474266    0.0000000000       239
    8    1   -1   -4.4043228149    1.0000000000       166
    8   -1    1   -4.8151682998    2.0000000000       175
    8   -1   -1   -6.8721066784    1.0000000000       230