qml.qchem.christiansen_dipole¶
- christiansen_dipole(pes, n_states=16)[source]¶
Returns Christiansen dipole operator.
The Christiansen dipole operator is constructed similar to the vibrational Hamiltonian operator defined in Eqs. D4-D7 of arXiv:2504.10602. The dipole operator is defined as
\[\mu = \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( D_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) D_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 and \(D\) represents the dipole function obtained from the expansion
\[D({Q}) = \sum_i D_1(Q_i) + \sum_{i>j} D_2(Q_i,Q_j) + ....\]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
- Returns:
- a tuple containing:
Operator: the Christiansen dipole operator in the qubit basis for x-displacements
Operator: the Christiansen dipole operator in the qubit basis for y-displacements
Operator: the Christiansen dipole operator in the qubit basis for z-displacements
- Return type:
tuple
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, dipole_level=3, cubic=True) >>> dipole = qml.qchem.vibrational.christiansen_dipole(pes, n_states = 4) >>> dipole[2] ( (-0.005512522132269153+0j) * I(0) + (0.00037053485106913064+0j) * Z(0) + -0.011436347025770977 * (X(0) @ X(1)) + (-0.011436347025770977+0j) * (Y(0) @ Y(1)) + -0.0005031491268437766 * (X(0) @ X(2)) + (-0.0005031491268437766+0j) * (Y(0) @ Y(2)) + 4.230790346195971e-05 * (X(0) @ X(3)) + (4.230790346195971e-05+0j) * (Y(0) @ Y(3)) + (0.001082095170147779+0j) * Z(1) + -0.01610015762949269 * (X(1) @ X(2)) + (-0.01610015762949269+0j) * (Y(1) @ Y(2)) + -0.0008228492926524582 * (X(1) @ X(3)) + (-0.0008228492926524582+0j) * (Y(1) @ Y(3)) + (0.001734095461712748+0j) * Z(2) + -0.01960990751144681 * (X(2) @ X(3)) + (-0.01960990751144681+0j) * (Y(2) @ Y(3)) + (0.002325796649339495+0j) * Z(3) )