# Cluster Hamiltonian ground state MPS bond dimension

+1 vote
edited

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
bond_dim=8
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;
end
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,
Sugar

+1 vote

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.

Best,
Miles

commented by (760 points)
Hi Miles,

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

Best,
Arnab