+1 vote
asked by (770 points)
edited by

Hi again,

I am trying to make sense of the ground state of the famous cluster Hamiltonian. It is a well known fact that the cluster state has a bond dimension of 2. However, when I run the following script in Julia, it outputs an MPS of bond dimension 4 which is double of what I expect.

using ITensors

N = 10
sites = siteinds("S=1/2",N)
ampo = AutoMPO()
#Define the cluster hamiltonian
for j=2:N-1
     ampo += 8,"Sz",j-1,"Sx",j,"Sz",j+1;
ampo+= 8,"Sz",N-1,"Sx",N,"Sz",1;
ampo+= 8,"Sz",N,"Sx",1,"Sz",2;
H = MPO(ampo,sites)
sweeps = Sweeps(5) # number of sweeps is 5
maxdim!(sweeps,10,20,100,100,200) # gradually increase states kept
cutoff!(sweeps,1E-10) #desired truncation error
psi0 = randomMPS(sites,bond_dim)#create a random initial MPS
energy,psi = dmrg(H,psi0,sweeps)

I understand that the ground state energies are correct but the program seems to unnecessarily double the dimension. Is there an explanation for this phenomenon and also is there a way to circumvent the issue?

Finally, while running a dmrg script one needs to specify a initial state with some bond dimension. Is there any significance to this initial bond dimension? (After playing around with the code it is my understanding that the final bond dimension can become both more or less than the initial BD.)

commented by (430 points)
Hi, Arnab. I have a similar question. i get a error when i construct the same model in the ITensor-3 C++ version

Index: (dim=2|id=847|"n=2,Site,S=1/2") <In>
  1: 1 QN({"Sz",1})
  2: 1 QN({"Sz",-1}), Val: 2
Index: (dim=2|id=847|"n=2,Site,S=1/2")' <Out>
  1: 1 QN({"Sz",1})
  2: 1 QN({"Sz",-1}), Val: 1
Element flux is: QN({"Sz",2})
ITensor flux is: QN({"Sz",-2})
From line 327, file /Users/xuejiayu/Documents/ITensor-3/itensor/itensor_impl.h

In .set, cannot set element with flux different from ITensor flux

In .set, cannot set element with flux different from ITensor flux

you simulate same model in the C++ version ?  PS: i find when i use "auto sites = SpinHalf(L)", i will get above error, but when i use  "auto sites = SpinHalf(L,{"ConserveQNs=",false})" the code work ! it's seem like the model don't conserve Sz quantum number, but i am not well understand this issue.

Best regards,

1 Answer

+1 vote
answered by (70.1k points)

Hi Arnab,
Thanks for the question. I believe the reason for the bond dimension of 4 you're seeing is because you are using periodic boundary conditions. If you envision the MPS as going around a circle and having bond dimension 2 on every bond, but then flattening this topology into a line, now with the bond N->1 "folded" through or "doubled over" so that it overlaps with all of the bulk bonds then each bulk bond is now carrying both the usual local entanglement (requiring bond dimension 2) as well as the extra entanglement which is going from site 1 to site N, roughly speaking.

Another way of putting this is that while your Hamiltonian is periodic, your MPS isn't, so this mismatch leads to a larger bond dimension.

I tried your code, deleting the N->1 bond terms and sure enough I do get a bond dimension of 2 afterward.


commented by (770 points)
Hi Miles,

Thank you so much for your answer. It makes a lot of sense now.

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.