Heisenberg-chains N=5

(s=1/2)-Heisenberg-chains N=5

N=2 and N=3 Heisenberg chains are to simple for spinpack, because spinpack uses symmetries and so matrix size becomes to one (see example_lc2-3.html). Use minimum N=5 sites or switch off all symmetries to see the full base:

cd exe                      # execution path
gcc -lm -o m_1d ../m_1d.c   # compile model generation code for chains
./m_1d 5 > daten.def        # generate 5 side chain model

daten.i:
 verbose=33
 xout=3 99
 pew=2         # number of EWs for convergence proof 0..NEW-1
 nev=1         # number of lowest eigenvectors nev=0..NEV
 sym_ud= 0     # no up-down-symmetry (never used for odd N)
 sym_k= -9999
 param= 1.0, 0.0
 nud=0,5   # ddddd-subspace
 a0
 nud=5,0   # uuuuu-subspace (same as ddddd-subspace)
 a0
 nud=1,4   # udddd-subspace
 a0
 nud=2,3   # uuddd-subspace
 a0

make; ./spin

# matrix output? daten.i: verbose=67 # verbose=64+3=bit5+bit1+bit0 nud=1,5
 vvv&64: B=[    # B = basis space
   0 0x0f *q(   1)  # 0x0f hex means 01111 = udddd
   1 0x17 *q(   1)  # 0x17 hex means 10111 = duddd
   2 0x1b *q(   1)
   3 0x1d *q(   1)
   4 0x1e *q(   1)
vvv&64, output_H x_max=20 lines: # matrix entries (x, y, real, imag)
 addh(    0,    0, +1/4         ,+0           ):
 addh(    0,    1, +1/2         ,+0           ):
 addh(    0,    4, +1/2         ,+0           ):
 addh(    1,    1, +1/4         ,+0           ):
 addh(    1,    2, +1/2         ,+0           ):
 addh(    1,    0, +1/2         ,+0           ):
 addh(    2,    2, +1/4         ,+0           ):
 addh(    2,    3, +1/2         ,+0           ):
 addh(    2,    1, +1/2         ,+0           ):
 addh(    3,    3, +1/4         ,+0           ):
 addh(    3,    4, +1/2         ,+0           ):
 addh(    3,    2, +1/2         ,+0           ):
 addh(    4,    4, +1/4         ,+0           ):
 addh(    4,    3, +1/2         ,+0           ):
 addh(    4,    0, +1/2         ,+0           ):
# 1/4 * ((1 2 0 0 2)
#        (2 1 2 0 0)
#        (0 2 1 2 0)
#        (0 0 2 1 2)
#        (2 0 0 2 1))
# remark: H is symmetric, 

results:
# nud=0,5 a4 eigenvals=  +1.25000000
# nud=1,4 a4 eigenvals=  -0.55901699  -0.55901699  +0.55901699  +0.55901699
#                        +1.25000000
# nud=2,3 a4 eigenvals=  -1.86803399  -1.86803399  -0.75000000  -0.55901699
#                        -0.55901699  +0.36803399  +0.36803399  +0.55901699
#                        +0.55901699  +1.25000000
#a4 sym_k= 0 0  eigenvals=  -0.75000000  +1.25000000
# a2:  -0.559016994374947 3e-10
# a0:  -0.55901699
 E0/N=  -0.11180340 E0/nw=  -0.05590170   
#! attention 2-fold degeneracy! ZiZj and other expectation values vary!
#   you have to build mean values
... ToDo

 2017-12: NOSZSYM=1 k=-1 n1=2^5=32 uuuu uuud uuudu ... ddddd = 0x00..0x1f
#     a4: korrekt  4* -1.86803399  2* -0.75 8* -0.559017 ... 6* +1.25

(high-s)-Heisenberg-chains N=5

edit src/config.h  # set NN=128 Nw=(64*NN) set maximum NN=N*(2s)
make               # recompile
cd exe             # change to executable dir
./m_1d 5 > a.def   # N=5 2s=1 base-model-file
../utils/defspin1.sh -s 14 a.def > daten.def  # 2s=14 derived-model-file
edit daten.i       # edit sym_k= -999999 and nud=10,10  # Sz=0 
./spin
# gnuplot
#plot [0:] "-" u (1/$3**.4):($5*4/($3*($3+2))/5) t "e0(1/2s)" w lp,\
# -0.8090177-0.405*x # bad loop
#  bad loop, because e0=E0/(5s(s+1)), better use e0=E0/s^2 = perfect scaling
#plot [0:] "-" u (1/$3**1.25):($5*4/($3*($3+2))/5*($3+1)/($3)) t "E0/s^2 vs. s^-5/4" w lp,\
#-0.809017-0.405*x # bad corrected gives old factor 5/4, new = 1 better
plot [0:] "-" u (2/$3):($5/($3/2)**2/5) t "E0/s^2 vs. 1/s" w lp,\
-0.809017-0.5*x
# N=5 minimum quantum sample!?  classic: cos(2*360./5)=-0.809017 has NNN-terms
# e0=E0/(5s(s+1))
#N=5 2s= 24 ERROR b_factor_lm OVL 2.0e+19 2018-11-07   __int64
#N=5 2s= 16 ERROR b_factor_lm OVL 3.5e+20 2018-11-07   __int64
# ToDo: rewrite e0=E0/(s(s+1)) to E0/s^2 
#N=5 2s= 32 t=1+8+0min err_fulltable hr_len=1023
#N=5 2s= 80 e0= k=0+ t100.16c= 1h++
N=5 2s= 60 e0= -3714.54127745 /5/930= -.798826081172 t100.16c=125m
N=5 2s= 50 e0= -2589.82287862 /5/650= -.7968685780   t100.16c=50m
# 5 2s= 50 e0= -2589.82287865          n1=203008 k=-2 0 1 ud- 2+7+Xm 1c=9m
N=5 2s= 40 e0= -1667.35858237 /5/420= -.793980277    t100.16c=14m
N=5 2s= 32 e0= -1075.01001060 /5/272= -.7904485372 HR0 gcc483=28s gcc820=25s 16c 4m
N=5 2s= 30 e0= -947.14824842 /1200= -.789290207  t=1+6+0min dbl 3m
N=5 2s= 24 e0= -612.10380895 /780= -0.78474847 dbl      n1=234e3
N=5 2s= 24 e0= -612.10380895 /780= -0.78474847 __int128 n1=234e3
N=5 2s= 20 e0= -429.19147460 /550= -0.7803481 __int128 n1=117e3
N=5 2s= 18 e0= -349.87045353                           n1=3960 k=-2 0 1 ud- 5s
N=5 2s= 16 e0= -278.63949676 /360= -0.7739986 __int128 n1=50101
N=5 2s= 16 e0= -278.63949662 /360= -0.7739986 __int128 n1=50101 vec4
# Make_cfg.inc -DTnorm2=double or -DTnorm2=__int128
N=5 2s= 14 e0= -215.49856365 /5/56= -0.769637727  n1=30381 8s __int64
N=5 2s= 14 e0= -215.49856365 /5/56= -0.769637727  n1= k=-2 0 1 ud- 4s
N=5 2s= 12 e0= -160.44758991 /5/42= -0.76403614   n1=17151 7s
N=5 2s= 12 e0= -160.44758991 /5/42= -0.76403614   n1=920 k=0+ 72s=slow_maxscfg
N=5 2s= 10 e0= -113.48646788                      n1=8801
N=5 2s= 8  e0= -74.61500327  /5/20  -0.7461500327
N=5 2s= 6  e0= -43.83280938
N=5 2s= 4  e0= -21.13900411  /5/6=  -0.704633470  n1=381
N=5 2s= 2  e0= -6.53112887   /5/2=  -0.653112887

# odd 2s: -0.809017-0.50*x+0.08*x*x
N=5 2s= 13 e0= -186.57407992
N=5 2s= 11 e0= -135.56747833 
N=5 2s= 9  e0= -92.65050359
N=5 2s= 7  e0= -57.82284574
N=5 2s= 5  e0= -31.08392860
N=5 2s= 3  e0= -12.43264503
N=5 2s= 1  e0= -1.86803399
e
# ToDo speed gcc-8.2 dbl HRMAX0 ?