qml.qchem.vscf_rotations

vscf_rotations(h_integrals, modals=None, cutoff=None, cutoff_ratio=1e-06)[source]

Generates the vibrational self-consistent field rotation matrices.

This functions generates the matrices \(U\) for each vibrational mode that transforms the primitive harmonic oscillator (HO) basis states (\(|\phi_j^{\text{HO}}\rangle\)) into the optimized vibrational self-consistent field (VSCF) states (\(|\psi_i^{\text{VSCF}}\rangle\)).

The relationship is defined as:

\[|\psi_i^{\text{VSCF}}\rangle = \sum_{j} U_{ji} |\phi_j^{\text{HO}}\rangle,\]

where \(j\) runs over the number of bosonic states per mode and \(i\) denotes the index of the specific VSCF state.

Parameters:
  • h_integrals (list[TensorLike[float]]) – list of n-mode expansion of Hamiltonian integrals

  • modals (list[int]) – list containing the maximum number of modals to consider for each vibrational mode. Default value is the maximum number of modals.

  • cutoff (float) – threshold value for including matrix elements into operator

  • cutoff_ratio (float) – ratio for discarding elements with respect to biggest element in the integrals. Default value is 1e-6.

Returns:

list of rotation matrices for all vibrational modes

Return type:

list(TensorLike[float])

Example

>>> symbols, charge  = ['H', 'H'], 0
>>> geometry = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 1.0]])
>>> mol = qml.qchem.Molecule(symbols, geometry, charge=charge)
>>> pes = qml.qchem.vibrational_pes(
...     mol, n_points=3, backend='cf_threadpool', cubic=True
... )
>>> h_integrals = qml.qchem.christiansen_integrals(
...     pes, n_states=4, cubic=False, backend="cf_threadpool"
... )
>>> mode_rots = qml.qchem.vscf_rotations(h_integrals)
>>> print(mode_rots[0])
[[ 0.98366824  0.17314139 -0.01438041 -0.04703255]
[ 0.16168107 -0.74327452 -0.0123072   0.64903833]
[ 0.00608058 -0.17368421 -0.9602084  -0.21862444]
[ 0.07886101 -0.62241373  0.27864235 -0.72714547]]