vibeqc.HessianFDOptions¶
- class vibeqc.HessianFDOptions(step_bohr=0.005, sym_strict=True, project_trans_rot=True, atomic_masses_amu=None, include_dipole_derivatives=False, frozen_indices=None)[source]¶
Bases:
objectKnobs for
compute_hessian_fd().- step_bohr
Centered-finite-difference displacement (default 0.005 bohr). Smaller → more sensitive to SCF round-off; larger → more anharmonicity contamination. 0.001–0.01 bohr is the practical sweet spot.
- sym_strict
Symmetrize the FD Hessian as
H = (H + H.T) / 2before mass-weighting (default True). Set False to keep the raw FD matrix — useful for diagnosing translational invariance of the gradient.- project_trans_rot
Project the 3 (linear: 2) translational + 3 (linear: 2) rotational zero modes out of the mass-weighted Hessian before diagonalisation (default True). When True, the corresponding entries of
frequencies_cm1are exactly zero so callers can slice[6:](or[5:]for linear molecules) for the vibrational subset.- atomic_masses_amu
Optional per-atom mass override (length n_atoms, in amu). Defaults to the standard atomic masses for the molecule’s Z values. Use this for isotope substitution (D for H, ¹³C, etc.).
- Parameters:
- __init__(step_bohr=0.005, sym_strict=True, project_trans_rot=True, atomic_masses_amu=None, include_dipole_derivatives=False, frozen_indices=None)¶
Methods
__init__([step_bohr, sym_strict, ...])Attributes
Atom indices to hold fixed (not displaced).
When True, also evaluate the dipole moment at every displaced geometry and assemble the dipole-derivative tensor
∂μ_β/∂R_iα(in atomic units, e).- include_dipole_derivatives: bool = False¶
When True, also evaluate the dipole moment at every displaced geometry and assemble the dipole-derivative tensor
∂μ_β/∂R_iα(in atomic units, e). Cheap because the SCF is already done — adds only onecompute_dipolecall per displacement. Required byir_intensities(). Default False.
- frozen_indices: Sequence[int] | None = None¶
Atom indices to hold fixed (not displaced). When set, the result is the partial-Hessian sub-block over the unfrozen atoms only — the
(3M, 3M)block of the full Hessian forMunfrozen atoms — and its3Mfrequencies are all vibrational: the frozen atoms anchor the system, so there are no translational/rotational zero modes andproject_trans_rotis forced off. This is the partial-Hessian vibrational analysis (PHVA; Li & Jensen, Theor. Chem. Acc. 2002) used to characterise a transition state on a slab while holding the bulk-like substrate layers fixed — it cuts the displacement count from6Nto6M.None⇒ every atom is displaced (the full Hessian). Downstreamvibeqc.compute_thermochemistry()treats a partial-Hessian result as a vibrational-only (anchored) system: no gas-phase translational / rotational partition functions.