sf.apps.qchem.dynamics

Functions used for simulating vibrational quantum dynamics of molecules.

Photonic quantum devices can be programmed with molecular data in order to simulate the quantum dynamics of spatially-localized vibrations in molecules [9]. To that aim, the quantum device has to be programmed to implement the transformation:

\[U(t) = U_l e^{-i\hat{H}t/\hbar} U_l^\dagger,\]

where \(\hat{H} = \sum_i \hbar \omega_i a_i^\dagger a_i\) is the Hamiltonian corresponding to the harmonic normal modes, \(\omega_i\) is the vibrational frequency of the \(i\)-th normal mode, \(t\) is time, and \(U_l\) is a unitary matrix that relates the normal modes to a set of new modes that are localized on specific bonds or groups in a molecule. The matrix \(U_l\) can be obtained by maximizing the sum of the squares of the atomic contributions to the modes [10]. Having \(U_l\) and \(\omega\) for a given molecule, and assuming that it is possible to prepare the initial states of the mode, one can simulate the dynamics of vibrational excitations in the localized basis at any given time \(t\). This process has three main parts:

  • Preparation of an initial vibrational state.

  • Application of the dynamics transformation \(U(t)\).

  • Generating samples and computing the probability of observing desired states.

It is noted that the initial states can be prepared in different ways. For instance, they can be Fock states or Gaussian states such as coherent states or two-mode squeezed vacuum states.

Algorithm

The algorithm for simulating the vibrational quantum dynamics in the localized basis with a photonic device has the following form:

  1. Each optical mode is assigned to a vibrational local mode and a specific initial excitation is created using one of the state preparation methods discussed. A list of state preparations methods available in Strawberry Fields is provided here.

  2. An interferometer is configured according to the unitary \(U_l^\dagger\) and the initial state is propagated through the interferometer.

  3. For each mode, a rotation gate is designed as \(R(\theta) = \exp(i\theta \hat{a}^{\dagger}\hat{a})\) where \(\theta = -\omega t\).

  4. A second interferometer is configured according to the unitary \(U_l\) and the new state is propagated through the interferometer.

  5. The number of photons in each output mode is measured.

  6. Samples are generated and the probability of obtaining a specific excitation in a given mode (or modes) is computed for time \(t\).

This module contains functions for implementing this algorithm.

  • The function evolution() returns a custom sf operation that contains the required unitary and rotation operations explained in steps 2-4 of the algorithm.

  • The function sample_fock() generates samples for simulating vibrational quantum dynamics in molecules with a Fock input state.

  • The function sample_coherent() generates samples for simulating vibrational quantum dynamics in molecules with a coherent input state.

  • The function sample_tmsv() generates samples for simulating vibrational quantum dynamics in molecules with a two-mode squeezed vacuum input state.

  • The function prob() estimates the probability of observing a desired excitation in the generated samples.

  • The function marginals() generates single-mode marginal distributions from the displacement vector and covariance matrix of a Gaussian state.

Functions

evolution(modes)

Generates a custom sf operation for performing the transformation \(U(t) = U_l e^{-i\hat{H}t/\hbar} U_l^\dagger\) on a given state.

marginals(mu, V, n_max[, hbar])

Generate single-mode marginal distributions from the displacement vector and covariance matrix of a Gaussian state.

prob(samples, excited_state)

Estimate probability of observing an excited state.

sample_coherent(alpha, t, Ul, w, n_samples)

Generate samples for simulating vibrational quantum dynamics with an input coherent state.

sample_fock(input_state, t, Ul, w, …[, loss])

Generate samples for simulating vibrational quantum dynamics with an input Fock state.

sample_tmsv(r, t, Ul, w, n_samples[, loss])

Generate samples for simulating vibrational quantum dynamics with a two-mode squeezed vacuum input state.