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
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 ?