+2 votes
asked by (180 points)

Hello all!

I'm a beginner at ITensor (c++) and MPS calculation.
Let me ask questions.

Can I calculate the time-evolution using TEBD in the system with three-site interaction?
I assume the Hamiltonian, such as

\hat{H} = \sumi si \cdot (s{i+1}\times s{i+2})

in arXiv:1901.05824v3 (Figure 11)

Can I calculate such long-range interaction by TEBD using swap gates?
Or should I use other suitable methods to calculate the Hamiltonian with long-range interaction, for example, TDVP?

I understand that the simple long-range interaction, such as \hat{h}i\hat{h}{i+n}, can be written as a product of nearest-neighbor interaction gates (including swap gate) regardless of number $n$.

My questions are

  1. Can I rewrite the interaction, such as \hat{h}i\hat{h}{i+1}\hat{h}_{i+2}, into a product of nearest-neighbor interaction?
  2. In the ITensor library, Can I calculate the time-evolution of the system with three-site interaction directly by using swap gates?

I would appreciate it if you could answer my questions.
Thank you.


1 Answer

+1 vote
answered by (70.1k points)

Hi Gri,
Thanks for the good question. The short answer is yes it can be done with ITensor, though with the support for different algorithms currently differing a bit from the C++ versus Julia version.

The current status is:
- there is a good quality TDVP package for the C++ version
- the function "apply" which performs TEBD in Julia can handle three and even more site operators very easily

Ideally we'd have both algorithms in both language - that's happening this year for TDVP in Julia but isn't done yet.

But since you said you're working in C++, TDVP would be a really great choice for this kind of interaction, which is quite straightforward to make into an MPO using the AutoMPO system. (Truly long range is trickier in both versions of ITensor, though works well on modestly sized systems or with more custom techniques to make MPOs "by hand" as it were.)

The main tricky thing to know about TDVP is that it can need a little help in the early part of a time evolution, where the state may change very rapidly. Just lowering the time step is one thing that can help, but can be insufficient. Other techniques are to use a more reliable, if slower, technique like TEBD for the few handful of time steps or to use "basis expansion" methods like those of Yang and White to help with convergence. (M. Yang is the person who actually wrote the C++ TDVP ITensor code!)

Best regards,

commented by (180 points)
Hi Miles!
Thank you very much for your rapid answer!!
I understand the C++ TDVP package will be helpful, so I will try to calculate the time-evolution using the TDVP method!

I appreciate your clear answer.
Also, thank you very much for providing the ITensor library and this support page.

commented by (70.1k points)
Glad the answer was helpful!
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.