+1 vote

Hi Miles,

I found something really strange for a free fermion model as simple as this:

using ITensors
let
N = 4
numb_sweeps = 10
sweeps = Sweeps(numb_sweeps)
maxdim!(sweeps,10,20,100)
cutoff!(sweeps,1e-10)

sites = siteinds("Fermion",N)
states = ["Occ","Emp","Emp","Emp"]
psi0 = productMPS(sites,states)

ampo = AutoMPO()

ampo += "C",1,"Cdag",3
ampo += "C",3,"Cdag",1
H = MPO(ampo,sites)

energy,psi = dmrg(H,psi0,sweeps)
return
end


This is a 4-site system with only one fermion put on the 1st site and it only hops between site 1 and site 3. However, the DMRG doesn't give the correct GS energy. Same thing happens when the hopping is between site 1 and site 4. It's only when the hopping is between site 1 and site 2 that the correct GS energy is obtained. From my understanding, all the three cases should give exactly the same result. Am I actually missing something trivial?

Thanks a lot for your time
-Mason

commented by (64.6k points)
Hi Mason, my best guess is itâ€™s a convergence issue. Did you try turning on a non-zero noise at every sweep? So like noise!(sweeps,1e-5).

When so many terms of the Hamiltonian are missing and the only non zero one is not local in a 1d, MPS sense, it can be quite hard for DMRG to find the actual ground state.

Another approach would be to prepare the initial state to something that has a better chance of converging, such as an initial state with a bond dimension greater than 1.
commented by (700 points)
Thanks! The noise approach works perfectly.

+1 vote
noise!(sweeps,1E-5)