Entanglement entropy for a ladder

Hi!

I am trying to perform TEBD calculation for a anisotropic spin Hamiltonian on a ladder.

  1. I wanted to implement the Hamiltonian (gates) using lattice geometry, but I couldn’t figure out how to implement different interactions on the rung and leg. Can you please tell me how that can be done?

  2. Currently, I tried to run that calculation by thinking of the system as a chain of 2*Nx (Nx=ladder length) and implementing the corresponding interactions. I got " LoadError: ArgumentError: no valid permutation of dimensions" error when I tried to write the gates in leg1 and leg2 in same loop . However this error was resolved when I wrote them in different loops. Can you tell me why should that be an error?
    for j in 1:(Nx-1)

    hj = op(“Sz”, s[j]) * op(“Sz”, s[j+1]) +
    op(“Sz”, s[Nx+j]) * op(“Sz”, s[Nx+j+1])

    Gj = exp(-im * tau / 2 * hj)
    push!(gates,Gj)
    end

  3. How to calculate the entanglement entropy at the middle of the ladder (along the leg)?

Thanks

1 Like

I think I may be able to answer to all 3 of your questions by pointing out the following: when you simulate a ladder system with MPS, you are actually ordering the sites in a one-dimensional way. So the site 1 of the MPS is site (x,y) = (1,1) of the ladder; site 2 of the MPS is site (x,y) = (1,2) of the ladder; site 3 is (x,y) = (2,1); site 4 is (x,y) = (2,2); etc. It helps to draw this out pictorially.

Then for example, to answer your question (3), if you figure out which bond of the MPS divides the ladder into the two halves you want, then you just compute the entanglement entropy across this bond of the MPS, using the approach described here:
https://itensor.github.io/ITensors.jl/stable/examples/MPSandMPO.html#Computing-the-Entanglement-Entropy-of-an-MPS

Similarly, for your question (1), you just make Trotter gates acting on pairs of sites of the MPS that correspond to the pairs of the ladder sites. So if you have an interaction acting between sites (1,2) and (2,2) of the ladder, as described above those are sites 2 and 4 of the MPS so you make a gate acting on sites 2 and 4. The apply function provided by ITensor knows how to apply non-nearest-neighbor gates to an MPS for you so you don’t have to worry about that part.

Regarding the error (2) you got, it is because you were adding together two ITensors having different indices. That is not allowed (and it is not physically meaningful so you would not want it to be allowed). Based on your code example, I think you are confusing the idea of adding two ITensors with adding two many-body operators.

In many-body physics we often write things like S^z_3 S^z_4 + S^z_5 S^z_6 however this is fairly misleading notation. It is actually shorthand for

I_1 \otimes I_2 \otimes S^z_3 \otimes S^z_4 \otimes I_5 \otimes I_6 + \\ I_1 \otimes I_2 \otimes \otimes I_3 \otimes I_4 \otimes S^z_5 \otimes S^z_6

where now these are operators (tensors) acting on all the sites 1,2,…,6. If they were ITensors you could now add them successfully. But you can’t just take S^z_3 S^z_4 and S^z_5 S^z_6 and add them as ITensors. (Theoretically ITensor could put the identity operators in for you but this would only make sense in a physics context and ITensor is a general-purpose tensor library.)