qml.qchem.dipole_moment¶
- dipole_moment(mol, cutoff=1e-16, core=None, active=None, mapping='jordan_wigner')[source]¶
Return a function that computes the qubit dipole moment observable.
The dipole operator in the second-quantized form is
\[\hat{D} = -\sum_{pq} d_{pq} [\hat{c}_{p\uparrow}^\dagger \hat{c}_{q\uparrow} + \hat{c}_{p\downarrow}^\dagger \hat{c}_{q\downarrow}] - \hat{D}_\mathrm{c} + \hat{D}_\mathrm{n},\]where the matrix elements \(d_{pq}\) are given by the integral of the position operator \(\hat{{\bf r}}\) over molecular orbitals \(\phi\)
\[d_{pq} = \int \phi_p^*(r) \hat{{\bf r}} \phi_q(r) dr,\]and \(\hat{c}^{\dagger}\) and \(\hat{c}\) are the creation and annihilation operators, respectively. The contribution of the core orbitals and nuclei are denoted by \(\hat{D}_\mathrm{c}\) and \(\hat{D}_\mathrm{n}\), respectively, which are computed as
\[\hat{D}_\mathrm{c} = 2 \sum_{i=1}^{N_\mathrm{core}} d_{ii},\]and
\[\hat{D}_\mathrm{n} = \sum_{i=1}^{N_\mathrm{atoms}} Z_i {\bf R}_i,\]where \(Z_i\) and \({\bf R}_i\) denote, respectively, the atomic number and the nuclear coordinates of the \(i\)-th atom of the molecule.
The fermonic dipole operator is then transformed to the qubit basis which gives
\[\hat{D} = \sum_{j} c_j P_j,\]where \(c_j\) is a numerical coefficient and \(P_j\) is a ternsor product of single-qubit Pauli operators \(X, Y, Z, I\).
- Parameters
mol (Molecule) – the molecule object
cutoff (float) – cutoff value for discarding the negligible dipole moment integrals
core (list[int]) – indices of the core orbitals
active (list[int]) – indices of the active orbitals
mapping (str) – Specifies the transformation to map the fermionic dipole operator to the Pauli basis. Input values can be
'jordan_wigner'
,'parity'
or'bravyi_kitaev'
.
- Returns
function that computes the qubit dipole moment observable
- Return type
function
Example
>>> symbols = ['H', 'H'] >>> geometry = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 1.0]], requires_grad = False) >>> alpha = np.array([[3.42525091, 0.62391373, 0.1688554], >>> [3.42525091, 0.62391373, 0.1688554]], requires_grad=True) >>> mol = qml.qchem.Molecule(symbols, geometry, alpha=alpha) >>> args = [alpha] >>> dipole_moment(mol)(*args)[2].ops [I(0), Z(0), Y(0) @ Z(1) @ Y(2), X(0) @ Z(1) @ X(2), Z(1), Y(1) @ Z(2) @ Y(3), X(1) @ Z(2) @ X(3), Z(2), Z(3)]