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 toNone.tol (float) – tolerance for discarding the imaginary part of the coefficients
- Returns:
the Christiansen Hamiltonian in the qubit basis
- Return type:
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) )