All s=1 lattices are based on s=1/2 lattices which are doubled using the defspin1.sh script.
The s=1/2 N=3 Heisenberg linear chain as minimum triangle is to simple for spinpack. For N=3 spinpack uses symmetries to form a s=3/2 spin and finally matrix size becomes to one. But you can use different bonds to circumvent this behavior. First let us see, what the s=1/2 N=3 result will be:
# # 3 # / \ # 1---2 # cd spinpack/exe gcc -o m_1d ../models/m_1d.c # J1J2Chain must be defined in m_1d.c ./m_1d 3 >daten.def # remove j2 bonds in daten.def edit daten.def # change Nw and bonds #+++model+++ # NN=Number_of_sites Nw=Number_of_bonds [Nq=quad_terms] 3 3 0 # s=site XYZ=position #=index # s Rx Ry Rz [e#] [U#] 0 1 1 0 e8 u7 1 2 1 0 e8 u7 2 3 1 0 e8 u7 # Bond s1 s2 [R= # # #] [t#] [j#] [v#] [w#] 0 0 1 R= 1 0 0 t3 j1 v0 w6 2 1 2 R= 1 0 0 t3 j1 v0 w6 4 2 0 R= 1 0 0 t3 j1 v0 w6 + #---model--- # create initial daten.i cp ../doc/daten.i . # edit daten.i nud=1,2 sym_k= -9999 param= 1, 0 a4 # a0 = lowest state, a4 = all states (for small systems) ./spin # start computation # output: LS=1 3 3 3 # detection of s=3/2 symmetry eigenvals= +0.75000000 # we get the S=3/2 result onlyNow we want to break the artificial symmetry by replacing bond indices.
edit daten.def # change Nw and bonds #+++model+++ # NN=Number_of_sites Nw=Number_of_bonds [Nq=quad_terms] 3 3 0 # s=site XYZ=position #=index # s Rx Ry Rz [e#] [U#] 0 1 1 0 e8 u7 1 2 1 0 e8 u7 2 3 1 0 e8 u7 # Bond s1 s2 [R= # # #] [t#] [j#] [v#] [w#] 0 0 1 R= 1 0 0 t3 j1 v0 w6 2 1 2 R= 1 0 0 t3 j2 v0 w6 4 2 0 R= 1 0 0 t3 j3 v0 w6 + #---model--- # create initial daten.i cp ../doc/daten.i . # edit daten.i sym_k= -9999 param= 1, 1, 1 # now we have 3 bonds, but all of same value nud=1,2 # 1st run for Sz=1/2 a4 # a0 = lowest state, a4 = all states (for small systems) nud=0,3 # 2nd run for Sz=3/2 a4 ./spin # start computation # output: LS=1 1 1 1 # everything is fine (three s=1/2 sites) eigenvals= -0.75000000 -0.75000000 +0.75000000 # Sz=1/2 subspace eigenvals= +0.75000000 # Sz=3/2 subspace
Now we have th full spectrum and can continue with the s=1 system.
../utils/defspin1.sh -s 2 > a.def cp a.def daten.def # now we find 6 sites and 12 bonds in the def-file # edit daten.i sym_ud=+1 param= 1, 1, 1 nud=3,3 a4 sym_ud=-1 # for Sz=0 we have additional spin inversion symmetry a4 nud=2,4 a4 nud=1,5 a4 nud=0,6 a4 ./spin # output: LS=3 2 2 2 2 2 2 # autodected s=1 objects LI=3 0 0 0 1 1 1 # counting 3 s=1 objects # Sz=0 sector eigenvals= -2.00000000 -2.00000000 -2.00000000 +3.00000000 eigenvals= -3.00000000 -0.00000000 +0.00000000 # Sz=1 sector eigenvals= -2.00000000 -2.00000000 -2.00000000 -0.00000000 +0.00000000 +3.00000000 # Sz=2 sector eigenvals= -0.00000000 +0.00000000 +3.00000000 # Sz=3 sector eigenvals= +3.00000000The ground state (lowest eigenvalue) has the energy -3 and is found in the Sz=0 and Sud=-1 subspace.
cd spinpack/exe gcc -o m_tilings -lm ../models/m_tilings.c # choose one of the following lattices ./m_tilings 0 2 4 0 6 > daten.def # N=12 choosing this for the sample! ./m_tilings 0 1 5 0 15 > daten.def # N=15 (odd number of sites) ./m_tilings 0 1 5 0 18 > daten.def # N=18 ./m_tilings 0 1 5 0 21 > daten.def # N=21 (odd number of sites) ./m_tilings 0 2 4 0 12 > daten.def # N=24 ./m_tilings 0 6 0 0 6 > daten.def # N=36 to big for s=1 (72bit)! # generate picture ./utils/def2fig.sh -i daten.def > a.fig # use xfig to show/edit # generate s1 file by doubling all sites cp daten.def a.def ./utils/defspin1 -s 2 a.def > daten.def # edit ../src/config.h #define CONFIG_NOS1SYM 1 #define Sud 0 # edit daten.i verbose=33 x3 99 # pick one of the automatically generated symmetries # try sym_k= 0 -9999, sym_k= -1 0 -9999, sym_k= -2 0 -9999, etc. # ... until a high orbital symmetry or translation is found # we found for N=2*12, orbital length = ... sym_k= 0 -9999 nud=12,12 # choose 2Sz=nu-nd=0 subspace a0