harmonic_analysis

psi4.driver.qcdb.vib.harmonic_analysis(hess, geom, mass, basisset, irrep_labels, dipder=None, project_trans=True, project_rot=True)[source]

Extract frequencies, normal modes and other properties from electronic Hessian. Like so much other Psi4 goodness, originally by @andysim

Parameters:
  • hess (ndarray) – (3*nat, 3*nat) non-mass-weighted Hessian in atomic units, [Eh/a0/a0].

  • geom (ndarray) – (nat, 3) geometry [a0] at which Hessian computed.

  • mass (ndarray) – (nat,) atomic masses [u].

  • basisset (BasisSet) – Basis set object (can be dummy, e.g., STO-3G) for SALCs.

  • irrep_labels (List[str]) – Irreducible representation labels.

  • dipder (ndarray) – (3, 3 * nat) dipole derivatives in atomic units, [Eh a0/u] or [(e a0/a0)^2/u]

  • project_trans (bool) – Idealized translations projected out of final vibrational analysis.

  • project_rot (bool) – Idealized rotations projected out of final vibrational analysis.

Returns:

Returns dictionary of vibration Datum objects (fields: label units data comment). Also returns text suitable for printing.

Return type:

dict, str

Notes

key

description (label & comment)

units

data (real/imaginary modes)

omega

frequency

cm^-1

ndarray(ndof) complex (real/imag)

q

normal mode, normalized mass-weighted

a0 u^1/2

ndarray(ndof, ndof) float

w

normal mode, un-mass-weighted

a0

ndarray(ndof, ndof) float

x

normal mode, normalized un-mass-weighted

a0

ndarray(ndof, ndof) float

degeneracy

degree of degeneracy

ndarray(ndof) int

TRV

translation/rotation/vibration

ndarray(ndof) str ‘TR’ or ‘V’ or ‘-’ for partial

gamma

irreducible representation

ndarray(ndof) str irrep or None if unclassifiable

mu

reduced mass

u

ndarray(ndof) float (+/+)

k

force constant

mDyne/A

ndarray(ndof) float (+/-)

DQ0

RMS deviation v=0

a0 u^1/2

ndarray(ndof) float (+/0)

Qtp0

Turning point v=0

a0 u^1/2

ndarray(ndof) float (+/0)

Xtp0

Turning point v=0

a0

ndarray(ndof) float (+/0)

theta_vib

char temp

K

ndarray(ndof) float (+/0)

IR_intensity

infrared intensity

km/mol

ndarray(ndof) float (+/+)

Examples

>>> # displacement of first atom in highest energy mode
>>> vibinfo['x'].data[:, -1].reshape(nat, 3)[0]
>>> # remove translations & rotations
>>> vibonly = filter_nonvib(vibinfo)