# The idmrg is not working for topological state

edited

Putting bosonic complex hopping on Honeycomb lattice check paper (http://journals.aps.org/prl/abstract/10.1103/PhysRevLett.110.067208 ), the result is not converging and the energy is increasing with each sweep and I am getting the eigenvalues of density matrix greater than one and so negative entanglement entropy. Again when taking real hopping without y-periodicity, for even sweep I am getting zero entanglement entropy, but non-zero for odd sweeps. I have the code if you want I can give you.

commented by (310 points)
Hi Dhiman,
You mentioned that you have eigenvalue of density matrix bigger than one. But I think this result must be un-physical, because the eigenvalue is the possibility. Would it be that you didn't normalize the "psi" before building the density matrix?

Zhiyu
commented by (150 points)
edited by
Basically, it should be normalized from the inside of the ITensor code, since the eigenvalues I am getting due to command idmrg(psi,H,sweeps,{"Outputlevel=",1}).

Dhiman
commented by (310 points)
So what about other eigenvalues?  If the density matrix is normalized as you said, then its trace should be 1, so that the sum of its eigenvalues should also be 1. If you get one eigenvalue larger than one, then there must be other minus value.
If that is the case, I doubt whether you made some mistakes when building density matrix. For example, maybe you didn't contract psi with dag(psi), instead, you contract psi with psi. Because one can prove that the eigenvalue of |psi><psi| is positive definite.
commented by (150 points)
Hi Zhiyu,

Yeah,I don't know somehow I fixed it.

But I still have questions.

a)For even number of sweeps the idmrg is giving 0.0000 von-Neumann entropy, but for odd number of sweeps it is giving finite value. Why??

b) let say I want to make a cylinder of length infinity with finite radius what should be my 'Nx' and 'Ny'?? For example with perimeter Ny=10 , is there any difference between Nx=100 and Nx=10??
commented by (310 points)
Hi, I am sorry that I am not sure about the problem. For your first question, exactly zero vN entropy means the direct product state. The only possibility I could imagine is that you don't establish interaction between two blocks. Which means your Hamiltonian in odd sweep is empty. You may check whether you build MPO correctly.
For the second question, I don't understand why you have "Nx". Are you really using idmrg? If you are using idmrg, as Miles said you cannot use AutoMPO, instead you have to DIY an MPO. And when constructing MPO, there is no concept of "Nx", you only have "Nuc". You may choose Nuc to be your Ny, thus system grows layer by layer, and the number of sweeps tells you the final Nx of the system. You may check the Heisenberg.h, it is a helpful example.

Zhiyu
commented by (150 points)
edited by
Thanks, I did not notice the lattice size increases with sweep . But there is Nx and Ny in the code Heisenberg.h. I think I fully understand how to make MPO by hand, and I bench marked my result with AutoMPO for dmrg and it is coming correct. But the problem occures with iDMRG.

Again another question arise, check Heisenberg.h that it is not restricting the horizontal bonds in x direction at the x=Nx or boundary. So may be idmrg works well but for dmrg it should not work well.

Dhiman
commented by (150 points)
edited by
I think I fixed it, the mistakes what I made are these,

1) Took MPO instead of IQMPO, doing so the number of sites which increases with sweep will not be printed

2) eliminate horizontal bond at the boundary x=Nx, for MPO

3) The next thing I did took N=2*Ny, which means took two columns of ribon, since idmrg works at the middle bond

But now my question is

In Heisenberg.h,
Why the horizontal bonds at the boundary are not restricted ? it may be the way to construct MPO for infinite system but not for the finite system, so idmrg should work well but dmrg should not work.
commented by (310 points)
Yeah, I agree with you that in Heisenberg.h the bond (Nx,Nx+1) on the boundary should be excluded. I guess maybe Heisenberg.h is only an template so this detail is not important. If you worry about this, maybe you can run idmrg with and without this bond and compare the results with the one in literature to verify it.
commented by (150 points)
Thanks Zhiyu.

Hi, neat that you are tackling this system. It ought to work but I can imagine any number of things that might cause a bug or lack of convergence. Can you provide more details about how you set up the code? Eg currently you can't use AutoMPO to make Hamiltonians for idmrg - did you construct the MPO yourself?

commented by (150 points)
Hi miles,

Yeah, I made MPO by hand. Now the programe is going right, I don't know somehow I fixed it.

But I still have questions.

a)For even number of sweeps the idmrg is giving 0.0000 von-Neumann entropy, but for odd number of sweeps it is giving finite value. Why??

b) let say I want to make a cylinder of length infinity with finite radius what should be my 'Nx' and 'Ny'?? For example with perimeter Ny=10 , is there any difference between Nx=100 and Nx=10??
commented by (150 points)
edited by
I think I fixed it, the mistakes what I made are these,

1) Took MPO instead of IQMPO, doing so the number of sites which increases with sweep will not be printed

2) eliminate horizontal bond at the boundary x=Nx, for MPO

3) The next thing I did took N=2*Ny, which means took two columns of ribon, since idmrg works at the middle bond

But now my question is

In Heisenberg.h
Why the horizontal bonds at the boundary are not restricted ? it may be the way to construct MPO for infinite system but not for the finite system, so idmrg should work well but dmrg should not work.
commented by (53.8k points)
Hi Dhiman, if you look at the end of Heisenberg.h, there is an if statement that checks whether the infinite variable is true or false. If it is false, then the MPO gets contracted with boundary tensors that remove the extra dangling indices at the edges.

Glad you were able to resolve your other issues. If you run into some other issues that are separate from the above ones, please post a new question as it's easier for me to keep track of unanswered questions better than comments. But comments are still very useful for clarifying questions and answers of course.

Best,
Miles
commented by (150 points)
Thanks Miles.