The idmrg is not working for topological state

0 votes
asked Mar 14 by Dhiman (150 points)
edited Mar 14 by Dhiman

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.

Thanks in advance.

commented Mar 14 by Zhiyu (280 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 Mar 14 by Dhiman (150 points)
edited Mar 14 by Dhiman
Thanks for your reply,Zhiyu.
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 Mar 14 by Zhiyu (280 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 Mar 15 by Dhiman (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 Mar 18 by Zhiyu (280 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 Mar 18 by Dhiman (150 points)
edited Mar 18 by Dhiman
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 Mar 18 by Dhiman (150 points)
edited Mar 18 by Dhiman
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 Mar 20 by Zhiyu (280 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 Mar 22 by Dhiman (150 points)
Thanks Zhiyu.

1 Answer

0 votes
answered Mar 15 by miles (19,400 points)

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 Mar 15 by Dhiman (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 Mar 18 by Dhiman (150 points)
edited Mar 18 by Dhiman
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 Mar 22 by miles (19,400 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 Mar 22 by Dhiman (150 points)
Thanks Miles.
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.
...