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 (
Optional
[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
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)