Loading [MathJax]/jax/output/HTML-CSS/jax.js

qml.qchem.fermionic_dipole

fermionic_dipole(mol, cutoff=1e-18, core=None, active=None)[source]

Return a function that builds the fermionic dipole moment observable.

The dipole operator in the second-quantized form is

ˆD=pqdpq[ˆcpˆcq+ˆcpˆcq]ˆDc+ˆDn,

where the matrix elements dpq are given by the integral of the position operator ˆr over molecular orbitals ϕ

dpq=ϕp(r)ˆrϕq(r)dr,

and ˆc and ˆc are the creation and annihilation operators, respectively. The contribution of the core orbitals and nuclei are denoted by ˆDc and ˆDn, respectively, which are computed as

ˆDc=2Ncorei=1dii,

and

ˆDn=Natomsi=1ZiRi,

where Zi and Ri denote, respectively, the atomic number and the nuclear coordinates of the i-th atom of the molecule.

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

Returns

function that builds the fermionic 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]
>>> fermionic_dipole(mol)(*args)[2]
-0.4999999988651487 * a⁺(0) a(0)
+ 0.82709948984052 * a⁺(0) a(2)
+ -0.4999999988651487 * a⁺(1) a(1)
+ 0.82709948984052 * a⁺(1) a(3)
+ 0.82709948984052 * a⁺(2) a(0)
+ -0.4999999899792451 * a⁺(2) a(2)
+ 0.82709948984052 * a⁺(3) a(1)
+ -0.4999999899792451 * a⁺(3) a(3)
+ 1.0 * I