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)