Recent Changes - Search:

HomePage

PmWiki

pmwiki.org

TimeDependentHamiltonians

Suppose that we want to evolve a state {$|\Psi(t=0)\rangle$} according to the Schrödinger equation {$$\frac{\mathrm{d}}{\mathrm{d}t} |\Psi(t)\rangle = - \mathrm{i} H(t) |\Psi(t)\rangle,$$} where the Hamiltonian operator {$H(t)$} is time-dependent.

To do this, we can use a time evolution algorithm such as TEBD or TDVP where the Hamiltonian is updated each timestep. While we could simply use {$H(t)$} for a timestep starting at time {$t$}, we can get more a more accurate simulation of the evolution by using a Magnus expansion of the Hamiltonian (see Sec. 5.4 in Ref. [1]). To evolve from time {$t$} to {$t+\Delta t$}, we use the matrix exponential {$$|\Psi(t+\Delta t)\rangle = \exp(\Omega(t, \Delta t)) |\Psi(t)\rangle,$$} where {$\Omega(t, \Delta t)$} is approximated using a Magnus expansion. By simply using the Hamiltonian at the midpoint, we obtain a second-order Magnus expansion {$$\Omega^{[2]}(t, \Delta t) = -\mathrm{i}\Delta t H \left( t + \frac{\Delta t}{2} \right).$$} For greater accuracy, we could use a fourth order Magnus expansion (Eq. 254 in Ref. [1]) {$$\Omega^{[4]}(t, \Delta t) = -\frac{\mathrm{i}\Delta t}{2} (H_1 + H_2) + \frac{\Delta t^2 \sqrt{3}}{12} [H_1, H_2],$$} where {$$H_1 = H\left(t + \left(\frac{1}{2} - \frac{\sqrt{3}}{6}\right) \Delta t\right), \qquad H_2 = H\left(t + \left(\frac{1}{2} + \frac{\sqrt{3}}{6}\right) \Delta t\right).$$} Note that, since we use the commutator of the Hamiltonian at two points in time for the fourth-order Magnus expansion, the MPO used to represent the operator {$\Omega^{[4]}(t, \Delta t)$} will have a larger bond dimension and hence a greater computational cost: we could also use higher-order Magnus expansions, but these will generally involve more nested commutators, which will again increase the computational cost.

Currently, time-dependent Hamiltonians are implemented in mp-itebd, mp-tdvp and mp-itdvp. For mp-itebd, at the moment, for a given timestep, the program calculates the Lie–Trotter–Suzuki decomposition of {$\exp(\Omega(t, \Delta t))$}: in the future, it may be more effective to calculate the Magnus expansions of the different terms in the decomposition, rather than just decomposing the Magnus expansion for a given timestep. For mp-tdvp and mp-itdvp, a different Magnus expansion is used for each left and right sweep.


To perform a simulation with a time-dependent Hamiltonian using one of these tools, the Hamiltonian is specified as normal, but t (or another string specified by the --timevar option) is used to specify the time. For example, to perform a ramp in the transverse field Ising model for {$J = 1$}, {$h_x(t) = 2 - t/10$} for {$t = 0 \rightarrow 20$}, you can run

$ mp-itdvp -w psi -H "lattice:-H_zz+(2-t/10)*H_x" -o psi -t 0.01 -n 2000 -s 10 -xd 1e-10

Most basic elementary functions (e.g. sin, cos, exp, log) can be used to specify the time depdence of the Hamiltonian.

Alternatively, the filegrid function can be used to read input data from a file. filegrid(filename, x, y, z) reads the file filename, and returns the element at the array index (x, y, z) (which may be noninteger, in which case, filegrid will linearly interpolate between the neighbouring elements). The file format is the same as the gnuplot 3D format: x specifies the row, y the column, and z specifies the block (separated by empty lines). For example, if we wanted to perform a similar quench in the Ising model, and we had a file data.dat specifying how the field changes with time, such as

0.0   2.00000000
0.1   1.99000833
0.2   1.96013316
0.3   1.91067298
...
10.0  0.00000000

(where the first column specifies the time and the second specifies {$h_x$}: note that we cannot use files with column headers) then we can use the filegrid function to evolve using these parameters as follows:

$ mp-itdvp -w psi -H "lattice:-H_zz + filegrid(data.dat, t/0.1, 1) * H_x" -o psi -t 0.01 -n 2000 -s 10 -xd 1e-10

The expressions in the table can be numbers, or any expression which can be read by the toolkit; if the expression contains spaces, then you can use quotes (e.g. "2 * I(0)") or backslash escapes (e.g. 2\ *\ I(0)) to represent it.

References

[1] S. Blanes, F. Casas, J.A. Oteo, J. Ros, The Magnus expansion and some of its applications, Physics Reports 470, 151 (2009), doi:10.1016/j.physrep.2008.11.001, arXiv:0810.5488.
Edit - History - Print - Recent Changes - Search
Page last modified on October 07, 2022, at 01:29 AM