+1 vote
asked by (700 points)

Hi Miles,

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

using ITensors
N = 4
numb_sweeps = 10
sweeps = Sweeps(numb_sweeps)

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)    

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

commented by (70.1k 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 Answer

+1 vote
answered by (70.1k points)
selected by
Best answer

Hi Mason,
I checked myself and as mentioned above, putting a line like


fixes the issue. Cases like this where the Hamiltonian is very sparse and/or not very 1d-like need techniques like the DMRG noise term to converge well. Another important technique for convergence is choosing a more generic initial state such as one with a finite bond dimension, though I found that noise alone was sufficient here.


Welcome to ITensor Support Q&A, where you can ask questions and receive answers from other members of the community.

Formatting Tips:
  • To format code, indent by four spaces
  • To format inline LaTeX, surround it by @@ on both sides
  • To format LaTeX on its own line, surround it by $$ above and below
  • For LaTeX, it may be necessary to backslash-escape underscore characters to obtain proper formatting. So for example writing \sum\_i to represent a sum over i.
If you cannot register due to firewall issues (e.g. you cannot see the capcha box) please email Miles Stoudenmire to ask for an account.

To report ITensor bugs, please use the issue tracker.