qml.qchem.christiansen_hamiltonian

christiansen_hamiltonian(pes, n_states=16, cubic=False, wire_map=None, tol=1e-12)[source]

Generates a Christiansen vibrational Hamiltonian.

The Christiansen vibrational Hamiltonian is defined based on Eqs. D4-D7 of arXiv:2504.10602 as:

\[H = \sum_{i}^M \sum_{k_i, l_i}^{N_i} C_{k_i, l_i}^{(i)} b_{k_i}^{\dagger} b_{l_i} + \sum_{i<j}^{M} \sum_{k_i,l_i}^{N_i} \sum_{k_j,l_j}^{N_j} C_{k_i k_j, l_i l_j}^{(i,j)} b_{k_i}^{\dagger} b_{k_j}^{\dagger} b_{l_i} b_{l_j},\]

where \(b^{\dagger}\) and \(b\) are the bosonic creation and annihilation operators, \(M\) represents the number of normal modes and \(N\) is the number of modals. The coefficients \(C\) represent the one-mode and two-mode integrals defined as

\[C_{k_i, l_i}^{(i)} = \int \phi_i^{k_i}(Q_i) \left( T(Q_i) + V_1^{(i)}(Q_i) \right) \phi_i^{h_i}(Q_i),\]

and

\[C_{k_i, k_j, l_i, l_j}^{(i,j)} = \int \int \phi_i^{k_i}(Q_i) \phi_j^{k_j}(Q_j) V_2^{(i,j)}(Q_i, Q_j) \phi_i^{l_i}(Q_i) \phi_j^{l_j}(Q_j) \; \text{d} Q_i \text{d} Q_j,\]

where \(\phi\) represents a modal, \(Q\) represents a normal coordinate, \(T\) represents the kinetic energy operator and \(V\) represents the potential energy operator. Similarly, the three-mode integrals can be obtained following Eq. D7 of arXiv:2504.10602.

The bosonic creation and annihilation operators are then mapped to the Pauli operators as

\[b^\dagger_0 = \left(\frac{X_0 - iY_0}{2}\right), \:\: \text{...,} \:\: b^\dagger_n = \left(\frac{X_n - iY_n}{2}\right),\]

and

\[b_0 = \left(\frac{X_0 + iY_0}{2}\right), \:\: \text{...,} \:\: b_n = \left(\frac{X_n + iY_n}{2}\right),\]

where \(X\) and \(Y\) are the Pauli operators.

Parameters:
  • pes (VibrationalPES) – object containing the vibrational potential energy surface data

  • n_states (int) – maximum number of bosonic states per mode

  • cubic (bool) – Whether to include three-mode couplings. Default is False.

  • wire_map (dict) – A dictionary defining how to map the states of the Bose operator to qubit wires. If None, integers used to label the bosonic states will be used as wire labels. Defaults to None.

  • tol (float) – tolerance for discarding the imaginary part of the coefficients

Returns:

the Christiansen Hamiltonian in the qubit basis

Return type:

Operator

Example

>>> symbols  = ['H', 'F']
>>> geometry = np.array([[0.0, 0.0, -0.40277116], [0.0, 0.0, 1.40277116]])
>>> mol = qml.qchem.Molecule(symbols, geometry)
>>> pes = qml.qchem.vibrational_pes(mol, optimize=False)
>>> qml.qchem.vibrational.christiansen_hamiltonian(pes, n_states = 4)
(
    0.08527499987546708 * I(0)
  + -0.0051774006335491545 * Z(0)
  + 0.0009697024705108074 * (X(0) @ X(1))
  + 0.0009697024705108074 * (Y(0) @ Y(1))
  + 0.0002321787923591865 * (X(0) @ X(2))
  + 0.0002321787923591865 * (Y(0) @ Y(2))
  + 0.0008190498635406456 * (X(0) @ X(3))
  + 0.0008190498635406456 * (Y(0) @ Y(3))
  + -0.015699890427524253 * Z(1)
  + 0.002790002362847834 * (X(1) @ X(2))
  + 0.002790002362847834 * (Y(1) @ Y(2))
  + 0.000687929225764568 * (X(1) @ X(3))
  + 0.000687929225764568 * (Y(1) @ Y(3))
  + -0.026572392417060237 * Z(2)
  + 0.005239546276220405 * (X(2) @ X(3))
  + 0.005239546276220405 * (Y(2) @ Y(3))
  + -0.037825316397333435 * Z(3)
)