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")