Engine(psi, model, TEBD_params)

Time Evolving Block Decimation (TEBD) ‘engine’.

RandomUnitaryEvolution(psi, TEBD_params)

Evolution of an MPS with random two-site unitaries in a TEBD-like fashion.

Module description

Time evolving block decimation (TEBD).

The TEBD algorithm (proposed in [Vidal2004]) uses a trotter decomposition of the Hamiltonian to perform a time evoltion of an MPS. It works only for nearest-neigbor hamiltonians (in tenpy given by a NearestNeighborModel), which can be written as \(H = H^{even} + H^{odd}\), such that \(H^{even}\) contains the the terms on even bonds (and similar \(H^{odd}\) the terms on odd bonds). In the simplest case, we apply first \(U=\exp(-i*dt*H^{even})\), then \(U=\exp(-i*dt*H^{odd})\) for each time step \(dt\). This is correct up to errors of \(O(dt^2)\), but to evolve until a time \(T\), we need \(T/dt\) steps, so in total it is only correct up to error of \(O(T*dt)\). Similarly, there are higher order schemata (in dt) (for more details see Engine.update()).

Remember, that bond i is between sites (i-1, i), so for a finite MPS it looks like:

|     - B0 - B1 - B2 - B3 - B4 - B5 - B6 -
|       |    |    |    |    |    |    |
|       |----|    |----|    |----|    |
|       | U1 |    | U3 |    | U5 |    |
|       |----|    |----|    |----|    |
|       |    |----|    |----|    |----|
|       |    | U2 |    | U4 |    | U6 |
|       |    |----|    |----|    |----|
|                   .
|                   .
|                   .

After each application of a Ui, the MPS needs to be truncated - otherwise the bond dimension chi would grow indefinitely. A bound for the error introduced by the truncation is returned.

If one chooses imaginary \(dt\), the exponential projects (for sufficiently long ‘time’ evolution) onto the ground state of the Hamiltonian.


The application of DMRG is typically much more efficient than imaginary TEBD! Yet, imaginary TEBD might be usefull for cross-checks and testing.