Generalization of the TDVP function

Hey all,

I know that the TDVP method based on solving the time dependent Schrodinger equation but I thought if there is a way to implement this method in order to develop on time the density matrix ? if not, is there any other known method rather than TEBD ?

TDVP can be generalized this way. It’s a subject that has been written about pretty thoroughly in the literature, so I would recommend you start there, for example this review article:
https://iopscience.iop.org/article/10.1088/2058-9565/aae724/meta

Or other papers like this one and references therein:

https://arxiv.org/abs/1501.02025

Finally, please limit questions in the ITensor Julia section to questions about the ITensor library and its use, thank you. I’m going to recategorize this post to the “DMRG and Numerical Methods” section.

Hey Miles,
Thank you for your reply, I will pay more attention next time to the subject.

Is there any way to use the function tdvp on the Package of ITensorTDVP for MPO object ?

You can just convert the MPO to an MPS and that will work with ITensorTDVP.jl.

Hey mtfishman,
thank you for your reply, I tried to do that, but I got an error that says something about ProjMPO function which I didn’t used…

I will write a little example:

n=3 
site=siteinds("Qubit",n)
rho=MPO(site,n->1/2*[1 1; 1 1])
H=randomMPO(site)
rho_mps=convert(MPS,rho)
rho_mps= tdvp(H,rho_mps,-0.1im)

And the error goes like:

LoadError: The order of the ProjMPO-ITensor product P*v is not equal to the order of the ITensor v, this is probably due to an index mismatch.
Common reasons for this error: 
(1) You are trying to multiply the ProjMPO with the 2-site wave-function at the wrong position.
(2) `orthogonalize!` was called, changing the MPS without updating the ProjMPO.

P*v inds: ((dim=2|id=191|"Qubit,Site,n=3")'', (dim=2|id=191|"Qubit,Site,n=3")', (dim=1|id=61|"Link,l=2")') 

v inds: ((dim=2|id=638|"Qubit,Site,n=1")', (dim=2|id=638|"Qubit,Site,n=1"), (dim=2|id=569|"Qubit,Site,n=2")', (dim=2|id=569|"Qubit,Site,n=2"), (dim=1|id=61|"Link,l=2"))

I tried to switch position of indices but it didn’t work at all. Am I in the right direction for doing it correctly ?

A few comments here:

(1) when you get errors from a function taking ITensors or ITensor objects such as MPO and MPS as input, please print the objects to see if they have compatible indices.

(2) from the code above, when I run it and print H and rho_mps before the call to TDVP, I see that the MPO only has one physical index per MPO tensor. In contrast, rho_mps has two physical indices per tensor. You can think of one of these as the ket index and one as the bra index. This must be the case because rho_mps came from “folding” the leg of an MPO to the other side to “purify” the MPO into an MPS, but it is now an MPS with “doubled” site indices. So in this representation, the kind of linear operator (MPO) that can act on this has to have four physical sites per tensor.

(3) technically, you could do further processing of rho_mps to again have one physical site per tensor, but now there would be twice the number of sites (system size of 2N). This is perfectly ok. It is just a choice, but you have to be aware of this choice and corresponding make H in an appropriate way.

(4) following the principles of quantum mechanics and following the literature on open systems, which you should please carefully read, the correct way to infinitesimally evolve a mixed state or density matrix is not by acting H onto it on one side, the way one would for a pure state. Instead you need a “Liouvillian superoperator” which basically means, in the absence of a coupling to an external bath, that you need to act with H twice, once on the ket indices and again on the bra indices, and add these contributions together to generate an infinitesimal time step. (Here in words I am describing the commutator on the right-hand side of the equation defining the dynamics of a density matrix.)

So basically in (4) above I’m saying that you can’t just input H into TDVP, even if you’ve mapped your density matrix to an MPS, and expect to be computing the correct dynamics.