qdk_chemistry.algorithms.propagator.magnus_propagator module

Time-averaged propagator with Magnus expansion.

Computes the effective (time-independent) Hamiltonian for a time interval \([t_1, t_2]\) via the Magnus expansion of the time-ordered propagator. With \(A(t) = -\mathrm{i}H(t)\), the evolution is \(U(t_2, t_1) = \exp(\Omega(t_2, t_1))\), where

\[\Omega = \Omega_1 + \Omega_2 + \Omega_3 + \cdots\]

is a series of nested time integrals of \(A(t)\). The leading (order-1) term is

\[\Omega_1 = \int_{t_1}^{t_2} A(t')\,\mathrm{d}t' = -\mathrm{i}\int_{t_1}^{t_2} H(t')\,\mathrm{d}t'\]

while higher orders add nested-commutator corrections, e.g.

\[\Omega_2 = \frac{1}{2} \int_{t_1}^{t_2}\!\mathrm{d}t' \int_{t_1}^{t'}\!\mathrm{d}t''\,[A(t'), A(t'')] = -\frac{1}{2} \int_{t_1}^{t_2}\!\mathrm{d}t' \int_{t_1}^{t'}\!\mathrm{d}t''\,[H(t'), H(t'')]\]

and in general the \(\Omega_n\) follow the recursion

\[\dot\Omega_n = \sum_{k=1}^{n-1} \frac{B_k}{k!} \sum_{j_1+\cdots+j_k=n-1} \mathrm{ad}_{\Omega_{j_1}} \cdots \mathrm{ad}_{\Omega_{j_k}}(A(t))\]

where \(B_k\) are Bernoulli numbers.

Implementation status

Only the leading-order (order-1) term is currently implemented, and only for DrivenContainer Hamiltonians of the form \(H(t) = H_0 + f(t)\,H_1\). Requesting an order greater than 1, or passing any other container type, raises NotImplementedError.

Accuracy

For sufficiently smooth \(H(t)\), truncation after \(\Omega_1\) has \(O(\delta t^3)\) local error and therefore second-order global accuracy over a fixed evolution interval.

class qdk_chemistry.algorithms.propagator.magnus_propagator.MagnusPropagator[source]

Bases: Propagator

Magnus propagator for time-dependent Hamiltonian simulation.

Evaluates the effective Hamiltonian for an interval \([t_1, t_2]\) via the Magnus expansion. Currently only the leading-order (order 1, time averaging) term is implemented, and only for DrivenContainer Hamiltonians \(H(t) = H_0 + f(t)\,H_1\), for which the drive integral reduces to a scalar quadrature and

\[H_\text{eff} = H_0 + \bar f\,H_1, \qquad \bar f = \frac{1}{\delta t}\int_{t_1}^{t_2} f(t')\,\mathrm{d}t'.\]

Since \(\Omega_1 = -\mathrm{i}\int_{t_1}^{t_2}H(t')\,\mathrm{d}t'\), the propagator returns the Hermitian effective Hamiltonian \(H_\text{eff} = \mathrm{i}\Omega_1 / \delta t\). A time-stepping integrator then applies \(\exp(-\mathrm{i}\,\delta t\,H_\text{eff}) = \exp(\Omega_1)\), where \(\delta t = t_2 - t_1\). For sufficiently smooth \(H(t)\), this has \(O(\delta t^3)\) local error and second-order global accuracy over a fixed evolution interval.

Requesting an order greater than 1, or passing any other container type, raises NotImplementedError.

__init__()[source]

Initialize the Magnus propagator.

name()[source]

Return magnus as the algorithm name.

Return type:

str

class qdk_chemistry.algorithms.propagator.magnus_propagator.MagnusPropagatorSettings[source]

Bases: Settings

Settings for the Magnus propagator.

order

Magnus expansion order (default = 1). Only the leading-order term (order 1, time averaging) is currently implemented; any larger value raises NotImplementedError when the propagator runs.

Type:

int

__init__()[source]

Initialize settings with default Magnus expansion order.