qml.qchem.taylor_coeffs

taylor_coeffs(pes, max_deg=4, min_deg=3)[source]

Compute fitted coefficients for Taylor vibrational Hamiltonian.

The coefficients are defined following Eq. 5 of arXiv:1703.09313 as:

\[\Phi_{ijk} = \frac{k_{ijk}}{\sqrt{\omega_i \omega_j \omega_k}} \quad \text{and} \quad \Phi_{ijkl} = \frac{k_{ijkl}}{\sqrt{\omega_i \omega_j \omega_k \omega_l}},\]

where \(\Phi_{ijk}\) and \(\Phi_{ijkl}\) are the third- and fourth-order reduced force constants, respectively, defined in terms of the third- and fourth-order partial derivatives of the potential energy surface data.

Parameters
  • pes (VibrationalPES) – object containing the vibrational potential energy surface data

  • max_deg (int) – maximum degree of Taylor form polynomial

  • min_deg (int) – minimum degree of Taylor form polynomial

Returns

the coefficients of the one-body, two-body and three-body terms

Return type

tuple(TensorLike[float])

Example

>>> pes_onemode = np.array([[0.309, 0.115, 0.038, 0.008, 0.000, 0.006, 0.020, 0.041, 0.070]])
>>> pes_twomode = np.zeros((1, 1, 9, 9))
>>> dipole_onemode = np.zeros((1, 9, 3))
>>> gauss_weights = np.array([3.96e-05, 4.94e-03, 8.85e-02,
...                           4.33e-01, 7.20e-01, 4.33e-01,
...                           8.85e-02, 4.94e-03, 3.96e-05])
>>> grid = np.array([-3.19, -2.27, -1.47, -0.72,  0.0,  0.72,  1.47,  2.27,  3.19])
>>> pes_object = qml.qchem.VibrationalPES(
...     freqs=np.array([0.025]),
...     grid=grid,
...     uloc=np.array([[1.0]]),
...     gauss_weights=gauss_weights,
...     pes_data=[pes_onemode, pes_twomode],
...     dipole_data=[dipole_onemode],
...     localized=True,
...     dipole_level=1,
... )
>>> one, two = qml.qchem.taylor_coeffs(pes_object, 4, 2)
>>> print(one)
[[-0.00088528 -0.00361425  0.00068143]]