qml.qchem.christiansen_bosonic

christiansen_bosonic(one, two=None, three=None, ordered=True)[source]

Generates a Christiansen bosonic 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.

Parameters:
  • one (TensorLike[float]) – one-body integrals with shape (m, n, n) where m and n are the number of modes and the maximum number of bosonic states per mode, repectively

  • two (TensorLike[float]) – two-body integrals with shape (m, m, n, n, n, n) where m and n are the number of modes and the maximum number of bosonic states per mode, repectively. Default is None which means that the two-body terms will not be included in the Hamiltonian.

  • three (TensorLike[float]) – three-body integrals with shape (m, m, m, n, n, n, n, n, n) where m and n are the number of modes and the maximum number of bosonic states per mode, repectively. Default is None which means that the two-body terms will not be included in the Hamiltonian.

  • cutoff (float) – tolerance for discarding the negligible coefficients

  • ordered (bool) – indicates if integral matrix elements are already ordered. Default is True.

Returns:

the constructed bosonic operator

Return type:

pennylane.bose.BoseSentence

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)
>>> integrals = qml.qchem.vibrational.christiansen_integrals(pes, n_states = 4)
>>> print(qml.qchem.christiansen_bosonic(integrals[0]))
0.010354801267111937 * b⁺(0) b(0)
+ 0.0019394049410426685 * b⁺(0) b(1)
+ 0.00046435758469677135 * b⁺(0) b(2)
+ 0.001638099727072391 * b⁺(0) b(3)
+ 0.0019394049410426685 * b⁺(1) b(0)
+ 0.03139978085503162 * b⁺(1) b(1)
+ 0.005580004725710029 * b⁺(1) b(2)
+ 0.0013758584515161654 * b⁺(1) b(3)
+ 0.00046435758469677135 * b⁺(2) b(0)
+ 0.005580004725710029 * b⁺(2) b(1)
+ 0.05314478483410301 * b⁺(2) b(2)
+ 0.010479092552439511 * b⁺(2) b(3)
+ 0.001638099727072391 * b⁺(3) b(0)
+ 0.0013758584515161654 * b⁺(3) b(1)
+ 0.010479092552439511 * b⁺(3) b(2)
+ 0.07565063279464881 * b⁺(3) b(3)