# Infinite temperature expectation value

Hi, I am trying to evaluate the infinite temperature expectation value of an operator at different times in a spin-1 chain, as in Fig. 1 of https://arxiv.org/abs/1904.04266.
The Hamiltonian contains three sites terms (Eq. 1 in the article), so I cannot use toExp() for the time evolution. Any idea of how I could overcome this problem?

I tried using the TDVP library but it time-evolves the MPS, it seems I need to use Heisenberg representation to time-evolve the MPO.

Best,
Dario

The easiest way I could think of would be to use the TEBD algorithm, which would be easy enough in the C++ or Julia versions. Have you looked into that?

You can look here:

http://itensor.org/docs.cgi?vers=julia&page=getting_started/mps_time_evolution

and here:

http://itensor.org/docs.cgi?vers=cppv3&page=formulas/tevol_trotter

commented by (130 points)
Hi, thank you for the quick answer.
I have watched the method used in the link for C++, but it relies on the BondGate class which only works for two-site gates, so I don't think it is of help for my case.

Do you have any other tip?
commented by (14.1k points)
The easiest thing to do if you are using the C++ library would be to make a new BondGate class, for example called BondGate3, by copying and modifying the current BondGate class to allow for 3-site gates (essentially by adding a third data field i3 and modifying the constructors of the class to accept that 3rd position). Then you would need to write a modified version of the gateTEvol function (https://github.com/ITensor/ITensor/blob/684bb4207da536dce59f1f2589b60ec23d1d61cb/itensor/mps/tevol.h ) which worked with the BondGate3 gates.

Otherwise, in the Julia version, you can already directly make 3-site gates and they will work with the apply function, by generalizing the example http://itensor.org/docs.cgi?vers=julia&page=getting_started/mps_time_evolution .
commented by (130 points)
Thank you very much, I will try what you suggested for c++.