Time-evolution computations

The time-evolution of the configuration interaction method is done by computing the ground state at a specified truncation level, and choosing initial conditions for the coefficient vector \(\mathbf{c}\). The default choice is the ground state coefficient vector found from the ground state computations, but other choices are valid as well as long as the normalization of the coefficient vector is the same as for the eigenstates.

Time-dependent configuration interaction super class

Similarly to the ground state computations, the truncation level of the Slater determinants decides which time-dependent configuration interaction class to use. However, this time the truncation level of the class decides which ground state solver to use, whereas the time-dependent part only requires an initial state represented as a coefficient vector \(\mathbf{c}\).

class configuration_interaction.tdci.TimeDependentConfigurationInteraction(system, s=None, verbose=False)

Abstract base class defining the skeleton of a time-dependent configuration interaction solver.

Parameters
  • system (QuantumSystems) – Quantum systems instance.

  • s (int) – Spin projection number to keep. Default is None and all determinants are kept.

  • verbose (bool) – Print timer and logging info. Default value is False.

__call__(current_time, prev_c)

Function computing the right-hand side of the time-dependent Schrödinger equation for the coefficient vector \(\mathbf{c}(t)\). That is, this function finds the time-derivative of the coefficient vector from

\[\dot{\mathbf{c}} = -i\mathbf{H}(t)\mathbf{c}(t).\]

This function is made to resemble the right-hand side functions typically used for differential equation solvers.

Parameters
  • current_time (float) – Current timestep.

  • prev_c (np.ndarray) – Coefficient vector at previous timestep.

Returns

Time-derivative of coefficient vector at current timestep.

Return type

np.ndarray

compute_energy(current_time, c)

Function computing the energy of the time-evolved system with a time-evolved Hamiltonian.

\[E(t) = \frac{ \langle\Psi(t)\rvert \hat{H}(t) \lvert\Psi(t)\rangle }{ \langle\Psi(t)\rvert\Psi(t)\rangle } = \frac{ \mathbf{c}^{\dagger}(t) \mathbf{H}(t) \mathbf{c}(t) }{ \mathbf{c}^{\dagger}(t) \mathbf{c}(t) },\]

where \(\lvert\Psi(t)\rangle\) is the time-evolved state given by

\[\lvert\Psi(t)\rangle = c_I(t)\lvert\Phi_I\rangle,\]

with \(\lvert\Phi_I\rangle\) being Slater determinants.

Parameters
  • current_time (float) – Current timestep.

  • c (np.ndarray) – Coefficient vector at current timestep.

Returns

The time-dependent energy \(E(t)\).

Return type

float

compute_one_body_density_matrix(current_time, c, tol=1e-05)

Compute one-body density matrix for the time-dependent state \(\rvert\Psi(t)\rangle\),

\[\rho^{q}_{p}(t) = \langle\Psi(t)\rvert \hat{c}^{\dagger}_{p} \hat{c}_{q} \lvert\Psi(t)\rangle.\]
Parameters
  • current_time (float) – Current timestep.

  • c (np.ndarray) – Coefficient vector at current timestep.

  • tol (float) – Tolerance of trace warning. Default is tol=1e-5.

Returns

The one-body density matrix \(\rho^{q}_{p}(t)\).

Return type

np.ndarray

compute_one_body_expectation_value(current_time, c, mat, tol=1e-05)

Function computing the expectation value of a one-body operator. For a given one-body operator \(\hat{A}\) by

\[\langle \hat{A} \rangle = \rho^{q}_{p} A^{p}_{q},\]

where \(p, q\) are general single-particle indices.

Parameters
  • current_time (float) – The current time step.

  • c (np.ndarray) – The coefficient vector at the current time step.

  • mat (np.ndarray) – The one-body operator to evalute, as a matrix. The dimensionality of the matrix must be the same as the one-body density matrix, i.e., the number of basis functions l.

  • tol (float) – Tolerance for the one-body density matrix construction. Default value is 1e-5.

Returns

The expectation value of the one-body operator.

Return type

complex

compute_overlap(current_time, c, c_0)

Function computing the overlap between two states, viz.

\[A(t, t_0) = \frac{ \lvert \langle \Psi(t) \rvert \Psi(t_0) \rangle \rvert^2 }{ \langle\Psi(t)\rvert\Psi(t)\rangle \langle\Psi(t_0)\rvert\Psi(t_0)\rangle } = \frac{ \lvert \mathbf{c}^{\dagger}(t) \mathbf{c}(t_0) \rvert^2 }{ \lvert\mathbf{c}(t)\rvert^2 \lvert\mathbf{c}(t_0)\rvert^2 },\]

where the \(\mathbf{c}(t)\) are the coefficient vectors of the states \(\lvert\Psi(t)\rangle\) at specificed time-points.

Parameters
  • current_time (float) – Current timestep.

  • c (np.ndarray) – Coefficient vector at current timestep.

  • c_0 (np.ndarray) – The state to compare overlap with.

Returns

The autocorrelation absolute squared.

Return type

float

compute_particle_density(current_time, c, tol=1e-05)

Compute particle density \(\rho(x, t)\) for the time-dependent state \(\rvert\Psi(t)\rangle\),

\[\rho(x, t) = \phi^{*}_q(x) \rho^{q}_{p}(t) \phi_p(x).\]
Parameters
  • current_time (float) – Current timestep.

  • c (np.ndarray) – Coefficient vector at current timestep.

  • tol (float) – Tolerance parameter for the one-body density matrix. Default is tol=1e-5.

Returns

The particle density on the same grid as the single-particle functions.

Return type

np.ndarray

Creating truncated TDCI-classes

This function is the time-dependent equivalent of the function defined for the time-independent case

As an example of the setup of different classes we demonstrate the default classes:

TDCIS = get_tdci_class("CIS")
TDCID = get_tdci_class("CID")
TDCISD = get_tdci_class("CISD")
TDCIDT = get_tdci_class("CIDT")
TDCISDT = get_tdci_class("CISDT")
TDCIDTQ = get_tdci_class("CIDTQ")
TDCISDTQ = get_tdci_class("CISDTQ")