+1 vote
asked by (160 points)

I was trying to do some time evolution of a Hamiltonian containing 3 spin interactions using the exactApplyMPO method.

However, I cant exponentiate the hamiltonian using the toexp function which can only take up to 2 spin term.

How should I proceed?

commented by (26.2k points)
By the way, if you are feeling ambitious, you could begin your project by expanding our AutoMPO feature to handle this case. Most of the machinery is the same as the case that does the regular (non-exponentiated) MPO, but the pieces have to be arranged in a different pattern in order to make the exponential. If you added this feature, I'd do a writeup on the ITensor news page with a photo of you similar to this one of Anna Keselman: http://itensor.org/news.html#autompo
commented by (160 points)
reshown by
Thanks for the reply.

Related to this three site issue,

If we have a tensor of two sites, we can decompose it back to mps form using svdbond.
Is there a way to decompose a tensor of three sites into mps form?
I know one could manually do two svd and set the mps matrices, however, in doing so the orthogonality center is no longer well defined, even though in principle it is well defined if one has handled the svd correctly.

commented by (26.2k points)
Hi Kenny,
Good question. So yes this can be done. Say that you do repeated SVD's of a tensor in the way that you described, then manually set the tensors of an MPS using the results of these SVD's. Then you are right that the orthogonality center will not be defined for this MPS object, even though the tensors are known to you to have the orthogonality property.

So to fix this, after you finish setting the MPS tensors, you can call the .leftLim(ll) and .righLim(rl) methods on the MPS. Here ll and rl are integers saying what value you want the leftLim and rightLim to have.
(More documentation here: http://itensor.org/docs.cgi?page=classes/mps )

For the specific case of site 1 being the orthogonality center, if the MPS is called "psi" you should do:

Likewise, if you want the center to be "j", you should do .leftLim(j-1) and .rightLim(j+1).

As I write this, it occurs to me that it would probably be good to have a convenience function that just takes the center site number "j" and sets the left/right lim for you.

commented by (160 points)
Ahh I see. This is very helpful.


1 Answer

0 votes
answered by (26.2k points)
selected by
Best answer

Hi, so AutoMPO's containing more than two-site operators cannot currently be exponentiated using the toExpH feature. It is a feature we'd like to add soon.

If you definitely need to time evolve a Hamiltonian with more than two-site terms, then an alternative could be to use a "time step targeting" method such as TDVP or the method described in this paper:

Best regards,

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.