VPTSystem
Provides a little helper for setting up the input system for a VPT job
__init__(self, mol, internals=None, dummy_atoms=None, modes=None, local_modes=None, mode_selection=None, mode_transformation=None, full_surface_mode_selection=None, potential_derivatives=None, potential_function=None, order=2, dipole_derivatives=None, eckart_embed=False, copy_mol=False):
mol:str | list | Moleculethe molecule or system specification to use (doesn’t really even need to be a molecule)
internals:list | dictthe Z-matrix for the internal coordinates optionally with a specification of a
conversionandinverseTo supply a conversion function, provide adictlike so{ 'zmatrix': [[atom1, bond1, angle1, dihed1], [atom2, bond2, angle2, dihed2], ...] or None, 'conversion': 'a function to convert from Z-matrix coordinates to desired coordinates', 'inverse': 'the inverse conversion' }modes:MolecularVibrations|dictthe normal modes to use if not already supplied by the Molecule
potential_derivatives:Iterable[np.ndarray]the derivatives of the potential to use for expansions
dipole_derivatives:Iterable[np.ndarray]the set of dipole derivatives to use for expansions
prep_local_modes(self, dRdX, dXdR=None, sort_freqs=False):
@property
nmodes(self):
Provides the number of modes in the system
:returns:_
get_potential_derivatives(self, potential_function, order=2, **fd_opts):
Computes potential derivatives for the given function through finite difference
potential_function:Anyorder:Anyfd_opts:Any:returns:_
@classmethod
from_harmonic_scan(cls, scan_array):
When using functions of internal (Z-matrix/polyspherical) coordinates, a sample form of the conversion function is
def conv(r, t, f, **kwargs):
'''
Takes the bond lengths (`r`), angles `(t)` and dihedrals `(f)`,
and returns new coordinates that are functions of these coordinates
'''
... # convert the coordinates
return np.array([r, t, f])
and then the inverse function will take the output of conv and return the original Z-matrix/polyspherical coordinates.