+1 vote
asked by (290 points)
edited by

Hi Miles

I was trying to implement the time evolution of a direct product initial state under periodic Hamiltonian. Using the autoMPO method, I constructed the Hamiltonian, but when I compared the result with the exact diagonalization, I saw inconsistency between MPS and ED results.

My initial state was with an open boundary condition. I think I will not face any issues using MPS with closed boundary conditions. Can we construct MPS with closed boundary conditions in iTensor? I went through the documentation, but I could not find any details regarding MPS with closed boundary.

I appreciate any help you can provide.

1 Answer

+1 vote
answered by (70.1k points)

Hi, thanks for the question. I think there are two considerations here:

1) the AutoMPO, MPO-based method for time evolution has turned out to not always be reliable. It is not due to a bug, but more of a limitation of the method used to exponentiate the Hamiltonian there. So I would instead recommend you use the TDVP method for time evolution. We have a code for that method here: https://github.com/ITensor/TDVP and it includes a sample code. The sample code does imaginary time evolution but you can change t to t*Complex_i to do real-time evolution. I have updated the ITensor "Code Formula" about the MPO method to note that it's better to use TDVP.

2) regarding periodic systems (I think when you say closed boundary conditions you are referring to periodic boundary conditions?) it has long been a limitation of MPS that the techniques for doing periodic systems are not as well developed. However, you can still input a periodic Hamiltonian to AutoMPO to use within TDVP. What AutoMPO does is it makes an open-boundary MPO but with a "long bond" connecting the first and last site inside the MPO.

This approach of using open-boundary MPO and MPS for periodic Hamiltonians is technically correct and works well for small system sizes. For larger systems it can lead to large bond dimensions of the MPS and can be hard to converge well.

So I think a key question is: do you really need periodic boundaries for the system you are studying? Although they are "standard" in theoretical calculations, they are often not the best choice for MPS numerics. I have more to say about that here: https://itensor.github.io/ITensors.jl/stable/faq/DMRG.html#What-boundary-conditions-should-I-choose:-open,-periodic,-or-infinite?

Best regards,
Miles

commented by (290 points)
Thank you Miles for your reply. I have another little question. Can you comment on the performance comparison of TDVP and higher-order approximants of MPO-based time evolution?
commented by (70.1k points)
Hi, good question, but the answer is kind of complicated and I'm not sure I know all of the details of how those two methods compare.

At a very high level, I would guess that TDVP is at this point a much better method than the MPO method overall. TDVP is very accurate as long as it does not run into "basis expansion" issues, while the MPO method has been found to be not very accurate.

If your question is about performance in terms of computation time or speed, then I think TDVP is also superior here, because each method takes about the same amount of time per time step, but with the MPO method you have to take small time steps, while in TDVP you can take very large time steps, as large as t=1.0 even! The actual discussion there is a bit complicated, because TDVP does have an higher cost for longer time steps, but still I think if you add up all the costs to reach some target time, TDVP is likely faster. Of course in some applications you are ok with taking small time steps because you want the information about the state at each small interval of time, so then time step size is less of a problem.

The only drawback to TDVP, really, is the basis expansion issue I mentioned earlier. This issue is discussed and a method to fix it proposed here:
https://journals.aps.org/prb/abstract/10.1103/PhysRevB.102.094315
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.

Categories

...