Page 1 of 1

About calculating the momentum for entanglement spectrum

Posted: 01 Oct 2018, 23:08
by wye
Hi, all!

I have posted an issue on the github and then found this forum. I think it may help to ask it here as well.

I am using the package to do some dmrg calculation in 2D and I need to calculate the momentum for entanglement spectrum. However, I find the entanglement spectrum I get from the function (in the class ..networks.mps.MPS) compute_K() is different from any entanglement spectrum I get directly from the function entanglement_spectrum(), which calculates the entanglement spectrum for every site(bond). Also, the momentum I get, which I read from the angle of the entanglement spectrum, is not at all what I suppose (n*2Pi/Ly). I want to understand what entanglement_spectrum compute_K calculates and how to get the correct momentum I want.
(The lattice I am using is Kagome lattice.)

Re: About calculating the momentum for entanglement spectrum

Posted: 02 Oct 2018, 08:56
by Leon
By my (limited) understanding: compute_K() calculates the y-momentum resolved entanglement spectrum, where y is the direction along the circumference of your cylinder. This is done by obtaining the dominant eigenvector of the mixed transfer matrix found by 'rotating' part of the cylinder around the axis. This should give you the entanglement spectrum split out in (relative) momentum sectors. The documentetion suggests you look at [1], I believe [2] is also a good resource.

1.Pollmann, F. & Turner, A. M. Detection of symmetry-protected topological phases in one dimension. Physical Review B - Condensed Matter and Materials Physics 86, (2012).
2.Cincio, L. & Vidal, G. Characterizing topological order by studying the ground states on an infinite cylinder. Physical Review Letters 110, (2013).

Re: About calculating the momentum for entanglement spectrum

Posted: 02 Oct 2018, 14:50
by Johannes
Thanks for pointing that out, Leon! Looks like this forum was a good idea :)

I've added your reference [2] to the documentation of compute_K(), in particular the appendix in the arXiv version of the paper has some very nice figures and explanations. (It will take one night until you see it in the online documentation)

Indeed, the compute_K function calculates the eigenvalues of the generalized transfermatrix where some sites where permuted such that it corresponds to a 'rotation' around the cylinder. Note that this makes only sense if the state is really invariant under such a rotation, it is therefore important to check that the ov returned by compute_K is (close to) 1. (I've also updated the documentation of compute_K to mention this). The angles should indeed be something like \(n 2\pi/L_y\), otherwise something went wrong...

In contrast, entanglement_spectrum gives you directly the spectrum calculated from the singular values)for a cut at any bond in the DMRG snake, completely ignoring the intrinsic 2D lattice structure. Bond 0 corresponds to the cut between unit cells of the infinite DMRG, and should thus give you the same entanglement spectrum as compute_K. Other bonds correspond to cutting a "ring" around the cylinder open, so the entanglement spectrum at these points does not have such a straight-forward physical interpretation - it involves both inter- and intra-ring correlations and depends on the order of the DMRG snake in the 2D lattice.

Re: About calculating the momentum for entanglement spectrum

Posted: 02 Oct 2018, 16:17
by wye
Thank you very much for your kind reply! Reference 2 is indeed a very good reference :D And I like the idea of the forum very much as well

However, I indeed do not find that the entanglement spectrum works (as I suspected) for kagome lattice. For Ly = 4 I get 2.337148476855845 as entanglement entropy from compute_K but the entanglement entropy I get from the bonds are
[2.26209158 2.72188282 3.14966819 2.92131673 2.93699007 3.36739954
3.18781597 3.03773729 3.24524948 2.82196255 2.68957983 2.90895576]

which are not the same. The discrepancy is bigger when the bond dimension is smaller. For example, when the bond dimension is 20, I get 0.1965899925682937 yet the entanglement entropy I get from the bonds are
[ 0.32077845 -2.8208142 -2.8208142 -2.8208142 0.32077845 0.32077845
0.32077845 1.97698226 -1.33542536 -2.8208142 -2.8208142 0.32077845
-2.292292 2.9338489 0.32077845 -2.8208142 -1.27262901 1.91418591
-0.22955456 0.87111146]
BTW, I get this very wierd momentum
[ 1.56218483e+00 3.08749287e+00 3.68768012e-02 1.56218483e+00
-1.57940782e+00 -1.57940782e+00 1.56218483e+00 1.42249077e-02
3.11014476e+00 1.56218483e+00 -1.57940782e+00 4.55528649e-02
1.56218483e+00 1.56218483e+00 1.48851933e-01 2.97551773e+00]
Just to display a few of them. You can see that they are similar to expected values but not quite the same (0.1 or 0.2 different). The discrepancy is also bigger when the bond dimension is smaller? Does this mean that in order for them to match I need to go to "sufficient many bonds"?

Re: About calculating the momentum for entanglement spectrum

Posted: 09 Oct 2018, 22:47
by Johannes
What is the value of the "ov" returned by compute_K()?

Is your DMRG converged well? Do you maybe expect/have symmetry breaking?
An entanglement entropy of 3.3 at some bonds is already quite large, did you choose the bond dimension large enough that you are fairly converged and have acceptably small truncation errors?
Is your state in canonical form, i.e. what does psi.norm_test() return?