Implicit time evolution methods#

Implicit methods solve the time evolution by inverting a linear system at each step. While more computationally expensive per step than explicit methods, they offer superior stability for stiff problems and can use larger time steps.

Crank-Nicolson method#

The Crank-Nicolson method is a second-order implicit approach that combines the forward Euler method and its backward counterpart at the \(k\) and \(k+1\) iterations, respectively. The approximation of the state at the \(k\)-th iteration is expressed as

\[\left(\mathbb{I}+\frac{i\Delta t}{2}H\right)\psi_{k+1}=\left(\mathbb{I}-\frac{i\Delta t}{2}H\right)\psi_{k}.\]

Each step requires solving a linear system, which in SeeMPS is done using the conjugate gradient method.

crank_nicolson(H, time, state[, steps, ...])

Solve a Schrodinger equation using a fourth order Runge-Kutta method.

Radau IIA method#

For stiff problems requiring high-order accuracy, SeeMPS provides the Radau IIA integrator with either 3 or 5 stages (order 5 and 9, respectively).

The algorithm requires solving for a vector of stage derivatives \(K\) in

\[\left[\mathbb{I}_s \otimes \mathbb{I} + \frac{\delta t}{\hbar} (A \otimes \bar{H})\right] K = -\frac{1}{\hbar} \mathbf{1} \otimes (\bar{H} \mathbf{v}(t)),\]

where \(A\) is the Butcher matrix of size \(s \times s\), \(s\) is the number of stages, and \(\mathbf{1}\) is a vector of ones. This system is solved for \(K\), and the state update is obtained by contracting the stage index with the Runge-Kutta weights \(b\):

\[\mathbf{v}(t+\delta t) = \mathbf{v}(t) + \delta t \sum_{j=1}^s b_j K_j.\]

The linear system is solved using DMRG-based matrix inversion.

radau(H, time, state[, steps, stages, ...])

Solve a Schrödinger equation using an implicit Radau IIA method with either 3 or 5 stages (order 5 or 9, respectively).

See also#