Ground state of a disordered model from TEBD

Hi Miles/Others!
I have the following question: Suppose I want to find a GS of the XXZ chain in a random magnetic field in the z direction. I want to use the imaginary-time TEBD algorithm, as implemented in ITensor via gates. How to include the random field term on the gates? I did the following change on the standard code given in your manuals :

:

   for j in 1:(N - 1)
    s1 = s[j]
    s2 = s[j + 1]
    if j!=(N-1)
    hj =
      op("Sz", s1) * op("Sz", s2) +
      1 / 2 * op("S+", s1) * op("S-", s2) +
      1 / 2 * op("S-", s1) * op("S+", s2) +
      hR[j]*op("Sz",s1)*op(ID,s2);
    else
      hj= op("Sz", s1) * op("Sz", s2) +
      1 / 2 * op("S+", s1) * op("S-", s2) +
      1 / 2 * op("S-", s1) * op("S+", s2) +
      hR[j]*op("Sz",s1)*op(ID,s2)+hR[j+1]*op(ID,s1)*op("Sz",s2);
    end
    Gj = exp( im * tau*im / 2 * hj)
    push!(gates, Gj)
  end

where hR is the random field vector and ID is the 2x2 Identity matrix. This gives a wrong GS energy, whereas for the zero field case the code gives the right result. What would be the right way of implementing the disorder term? General question: How about performance of the TEBD in disordered systems (convergence, stucking in local minima…) with respect to TDVP for finding the GS?

Best regards
Murod

Hi Murod, Where is the correct GS energy for hR[i]!=0.0 that you are comparing to, comming from?

1 Like

Hi Murod,
In addition to Jan’s question, I would say you are going about implementing the field term in basically the correct way. It’s a good idea to multiply the field terms by an identity operator (you can just put the string “Id” instead of the variable ID into the op function).

So if you aren’t getting the result you expect it is probably one of two things, or some combination of both:

  1. you have a slight bug or error in your code. For example, you might be including the field on each site j twice, in which case you would need to put a factor of 1/2 on the field terms, though be careful about the boundaries where you might again only include the fields once.
  2. the TEBD approach might not be converged, for various reasons which could be that you are not evolving for a long enough time, or perhaps that you have residual Trotter or MPS truncation errors. If the second one, you could always do TEBD for a while with a larger time step then take the resulting state and evolve it some more with a smaller time step.

You may also want to consider using TEBD to prepare a reasonably good initial state then input this state to DMRG which is a much more precise and robust algorithm when it succeeds, although it can struggle for disordered systems (which is why mixing TEBD + DMRG could be a good combination).

Hi Jan,
The results are compared with the ED results for small chain lengths.
Best regards,
Murod

Hi Miles,
Thanks for your response.

  1. The ED code was benchmarked several times, so the results should be correct. Instead, the TEBD code definitely has some bug. If the given piece of code does not contain any bugs, then it is not clear where the problem is.

  2. The chain length are L~10, so I doubt that it stucks in some local minimum.

Best regards,

Murod

Ok THanks. Are you using auto MPO (OpSum) to create the MPO used for ED calculations? Where I am going with this is that there may be a way to compare H_mpo with Sum_j hj.

Jan,
No, the ED code is self-written, not based on ITensors. Thanks for your suggestion.
Murod

OK, then I agree with Miles, try building MPO using opsum, with the same hR[j] as one of ED calculations. Then use DMRG to confirm the GS energy matches ED. This will guide the next step.

Hi Murod,
I also want to clarify that my response was not intended to say that your TEBD code has no bugs. It could definitely have some bugs. I just looked over it briefly, and in general we do not debug (and in fact cannot) debug users’ code for them. What I was saying was that your code looks reasonable and possibly correct, but it’s certainly possible that it’s not correct and contains a subtle error somewhere. Or it could be that you need to use TEBD differently e.g. such as evolving for a longer time.

In addition to Jan’s idea, another thing you could try is using your TEBD code for a system with a uniform, instead of disordered, magnetic field to check that case as well and compare to ED and DMRG.

Best regards,
Miles

1 Like

Jan, Miles,
The bug was on the energy measurement process. Thanks for your suggestions.

Best regards,
Murod

Glad to hear you figured out the issue :+1: