0 votes
asked by (200 points)

I'm trying to calculate the entanglement entropy of an Ising spin chain but I'm having trouble getting consistent results from the calculation. I think I should see an entropy of order ln2 when the interaction parameter (lambda) is large, since the ground state is 2-fold degenerate. However, I see only small entropies in most cases and sometimes (inconsistently) something of order ln2. I've tried changing the sweep parameters, which seems to change the results but doesn't give me something consistent. The energy is stable with the sweep parameters, but the entanglement entropy isn't. I think I'm calculating it incorrectly, or my idea that it should be ln2 is incorrect. I've also tried larger chains, up to N=200.

I've uploaded my code below. It prints the interaction parameter, followed by the entropy and the ground and first excited states.

commented by (50.6k points)
Thanks for posting a code with your question - it's helpful to see exactly what you are doing.

1 Answer

+1 vote
answered by (50.6k points)

Hi, so the answer is that it's incorrect that dmrg (with open boundary conditions and without conserving Sz-parity symmetry) will give an entropy of ln2, except perhaps on very small system sizes.

You are right, of course, that there is a two-fold ground state degeneracy but this means that dmrg has succeeded if it gives any linear combination of these two ground states, since it's goal is just to minimize the energy. Typical DMRG calculations result in ground-state combinations which have the minimal entanglement entropy. For the ferromagnetic Ising chain this is either all spins up or all spins down, not a linear combination of the two.

The reason I mention small system sizes, is that, for small transverse field there is a tiny reduction in energy due to have a linear combination ("cat state") of both all up and all down ground states, but this energy 'gain' goes away exponentially quickly as a function of system size, so it's typically quite negligible and the truncations that happen inside DMRG will remove this solution.


commented by (50.6k points)
One other comment is that the MPS(sites) constructor creates a random product state, which is often a perfectly good starting state for a DMRG calculation. This could account for why you get different results from run to run because in the symmetry breaking phase you'll either get all up or all down spins. Also you may not be doing enough sweeps of DMRG to fully converge your calculation.

Typically I don't recommend running a lot of different DMRG calculations in a big loop. It's best to do them one at a time and carefully inspect the results and output (printout) from the dmrg function.
commented by (200 points)
Thank you for the great response, Miles!

I would like to be able to pick out the ground state with high entanglement entropy somehow. I am thinking the best way to do this would be to implement the Z2 symmetry which gives rise to this degeneracy. The symmetry operator flips every spin i.e. a product of sigma_x on every site. The entangled states should be the simultaneous eigenstates of this symmetry. However, it doesn't seem straightforward to do this since in ITensor, quantum numbers have to be specified for each basis state (e.g. in SpinHalf.h), but in this case the basis states aren't eigenstates of the symmetry operator. Is there a way to implement such a symmetry? It can be done of course by changing basis (i.e. sigma_z <-> sigma_x), which I am going to try. But I would be interested to know if there is another way.
commented by (50.6k points)
Hi, good question. So we don't have a way to implement a global symmetry which isn't a product of local symmetry operators acting on individual sites. (It's ok though, if the action is different on different sites!) So I think the only way to proceed is to do as you mentioned, which is to switch to the local basis of eigenstates of your symmetry.
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.