Dear All, I am trying to implement "density dependent hopping" into the BH model via dwa/worm code, and I am getting totally wrong results. Namely I have added operators to the "boson" sitebasis:
<OPERATOR name="bdag" matrixelement="sqrt(N+1)"> <CHANGE quantumnumber="N" change="1"/> </OPERATOR> <OPERATOR name="bdagn" matrixelement="N*sqrt(N+1)"> <CHANGE quantumnumber="N" change="1"/> </OPERATOR> <OPERATOR name="b" matrixelement="sqrt(N)"> <CHANGE quantumnumber="N" change="-1"/> </OPERATOR> <OPERATOR name="bn" matrixelement="(N-1)*sqrt(N)"> <CHANGE quantumnumber="N" change="-1"/> </OPERATOR>
I have modified the boson Hubbard Hamiltonian:
<HAMILTONIAN name="boson Hubbard"> <PARAMETER name="mu" default="0"/> <PARAMETER name="t" default="1"/> <PARAMETER name="U" default="0"/> <PARAMETER name="t'" default="0"/> <PARAMETER name="te'" default="0"/> <PARAMETER name="V" default="0"/> <PARAMETER name="V'" default="0"/> <PARAMETER name="t0" default="t"/> <PARAMETER name="t1" default="t'"/> <PARAMETER name="te0" default="te"/> <PARAMETER name="te1" default="te'"/> <BASIS ref="boson"/> <SITETERM site="i"> <PARAMETER name="mu#" default="mu"/> <PARAMETER name="U#" default="U"/> -mu#*n(i)+U#*n(i)*(n(i)-1)/2 </SITETERM> <BONDTERM source="i" target="j"> <PARAMETER name="t#" default="0"/> <PARAMETER name="te#" default="0"/> <PARAMETER name="V#" default="0"/> -t#*(bdag(i)*b(j)+bdag(j)*b(i))+te#*(bdagn(i)*b(j)+bdagn(j)*b(i)+bdag(i)*bn(j)+bdag(j)*bn(i)-bdag(i)*b(j)-bdag(j)*b(i))+ V#*n(i)*n(j) </BONDTERM> </HAMILTONIAN>
I have ran the code on square lattice (run script below) of dimension L=4:
with t=0.05 and te=0 <n^2>=3.30186272922 with t=0.05 and te=1e-9 I get <n^2>=15.6658661081 with t=0.05 and te=0.05 I get <n^2>=15..... with t=0.0 and te=0.05 I get <n^2>=3.19...
It seems when exactly one hopping term is present the output is (hopefully) reasonable. When two are present even with infinitesimal amplitude the code goes wrong. This leads me to a conclusion that the problem at least in part is "logical" in nature (the code seems to look for hopping operators and treat them in special way).
The result is the same up to mc errors no matter whether I use worm or dwa. I see no error from either code with that particular input.
Ultimately makes no sense to me. Can anyone hint me what is the problem?
Best, Mateusz Łącki
PS. My run script is here:
import sys sys.path.append('/home/lacki/alps/install22b4/lib') import pyalps
bin_dir = '/home/lacki/alps/install22b4/bin/'
for code in ['dwa','worm']: for models in ['models'+sys.argv[1],]: for t,te in [(0.05,0),(0,0.05),(0.05,0.05),(0.1,0.0),(0.0,0.1),(0.05,1e-9),(0,0),(0.,1e-9),(1e-9,0) ]: parms = [] parms.append( { 'LATTICE_LIBRARY' : "/nfs/andy2/home/lacki/robota/2020_Staggered/qmctest/lattices.xml", 'MODEL_LIBRARY' : "/nfs/andy2/home/lacki/robota/2020_Staggered/qmctest/"+models+'.xml', 'LATTICE' : "square lattice", 'MODEL' : "boson Hubbard", 'T' : 0.1, 'L' : 4 , 't' : t , 'te' : te, 'mu' : 1.1, 'U' : 1.0 , 'Nmax' : 5 , 'THERMALIZATION' : 100000, 'SWEEPS' : 20000000, 'SKIP' : 10, 'MEASURE[Winding Number]': 1, 'MEASURE[Local Density^2]': 1, } ) input_file = pyalps.writeInputFiles('parm1a'+models+'_'+str(t)+'_'+str(te)+'_'+code, parms) res = pyalps.runApplication(bin_dir+'dwa', input_file, Tmin=5, writexml=True)