Torsional degrees of freedom

class rmgpy.statmech.HinderedRotor(inertia=None, symmetry=1, barrier=None, fourier=None, rotationalConstant=None, quantum=False, semiclassical=True)

A statistical mechanical model of a one-dimensional hindered rotor. The attributes are:

Attribute Description
inertia The moment of inertia of the rotor
rotationalConstant The rotational constant of the rotor
symmetry The symmetry number of the rotor
fourier The \(2 x N\) array of Fourier series coefficients
barrier The barrier height of the cosine potential
quantum True to use the quantum mechanical model, False to use the classical model
semiclassical True to use the semiclassical correction, False otherwise

Note that the moment of inertia and the rotational constant are simply two ways of representing the same quantity; only one of these can be specified independently.

The Schrodinger equation for a one-dimensional hindered rotor is given by

\[-\frac{\hbar^2}{2I} \frac{d^2}{d \phi^2} \Psi(\phi) + V(\phi) \Psi(\phi) &= E \Psi(\phi)\]

where \(I\) is the reduced moment of inertia of the torsion and \(V(\phi)\) describes the potential of the torsion. There are two common forms for the potential: a simple cosine of the form

\[V(\phi) = \frac{1}{2} V_0 \left( 1 - \cos \sigma \phi \right)\]

where \(V_0\) is the barrier height and \(\sigma\) is the symmetry number, or a more general Fourier series of the form

\[V(\phi) = A + \sum_{k=1}^C \left( a_k \cos k \phi + b_k \sin k \phi \right)\]

where \(A\), \(a_k\) and \(b_k\) are fitted coefficients. Both potentials are typically defined such that the minimum of the potential is zero and is found at \(\phi = 0\).

For either the cosine or Fourier series potentials, the energy levels of the quantum hindered rotor must be determined numerically. The cosine potential does permit a closed-form representation of the classical partition function, however:

\[Q_\mathrm{hind}^\mathrm{cl}(T) = \left( \frac{2 \pi I k_\mathrm{B} T}{h^2} \right)^{1/2} \frac{2 \pi}{\sigma} \exp \left( -\frac{V_0}{2 k_\mathrm{B} T} \right) I_0 \left( \frac{V_0}{2 k_\mathrm{B} T} \right)\]

A semiclassical correction to the above is usually required to provide a reasonable estiamate of the partition function:

\[\begin{split}Q_\mathrm{hind}^\mathrm{semi}(T) &= \frac{Q_\mathrm{vib}^\mathrm{quant}(T)}{Q_\mathrm{vib}^\mathrm{cl}(T)} Q_\mathrm{hind}^\mathrm{cl}(T) \\ &= \frac{h \nu}{k_\mathrm{B} T} \frac{1}{1 - \exp \left(- h \nu / k_\mathrm{B} T \right)} \left( \frac{2 \pi I k_\mathrm{B} T}{h^2} \right)^{1/2} \frac{2 \pi}{\sigma} \exp \left( -\frac{V_0}{2 k_\mathrm{B} T} \right) I_0 \left( \frac{V_0}{2 k_\mathrm{B} T} \right)\end{split}\]

Above we have defined \(\nu\) as the vibrational frequency of the hindered rotor:

\[\nu \equiv \frac{\sigma}{2 \pi} \sqrt{\frac{V_0}{2 I}}\]
barrier

The barrier height of the cosine potential.

energies

energies: numpy.ndarray

fitCosinePotentialToData(self, ndarray angle, ndarray V)

Fit the given angles in radians and corresponding potential energies in J/mol to the cosine potential. For best results, the angle should begin at zero and end at \(2 \pi\), with the minimum energy conformation having a potential of zero be placed at zero angle. The fit is attempted at several possible values of the symmetry number in order to determine which one is correct.

fitFourierPotentialToData(self, ndarray angle, ndarray V)

Fit the given angles in radians and corresponding potential energies in J/mol to the Fourier series potential. For best results, the angle should begin at zero and end at \(2 \pi\), with the minimum energy conformation having a potential of zero be placed at zero angle.

fourier

The \(2 x N\) array of Fourier series coefficients.

frequency

frequency: ‘double’

getDensityOfStates(self, ndarray Elist, ndarray densStates0=None) → ndarray

Return the density of states \(\rho(E) \ dE\) at the specified energies Elist in J/mol above the ground state. If an initial density of states densStates0 is given, the rotor density of states will be convoluted into these states.

getEnthalpy(self, double T) → double

Return the enthalpy in J/mol for the degree of freedom at the specified temperature T in K.

getEntropy(self, double T) → double

Return the entropy in J/mol*K for the degree of freedom at the specified temperature T in K.

getFrequency(self) → double

Return the frequency of vibration in cm^-1 corresponding to the limit of harmonic oscillation.

getHamiltonian(self, int Nbasis) → ndarray

Return the to the Hamiltonian matrix for the hindered rotor for the given number of basis functions Nbasis. The Hamiltonian matrix is returned in banded lower triangular form and with units of J/mol.

getHeatCapacity(self, double T) → double

Return the heat capacity in J/mol*K for the degree of freedom at the specified temperature T in K.

getLevelDegeneracy(self, int J) → int

Return the degeneracy of level J.

getLevelEnergy(self, int J) → double

Return the energy of level J in J.

getPartitionFunction(self, double T) → double

Return the value of the partition function \(Q(T)\) at the specified temperature T in K.

getPotential(self, double phi) → double

Return the value of the hindered rotor potential \(V(\phi)\) in J/mol at the angle phi in radians.

getSumOfStates(self, ndarray Elist, ndarray sumStates0=None) → ndarray

Return the sum of states \(N(E)\) at the specified energies Elist in J/mol above the ground state. If an initial sum of states sumStates0 is given, the rotor sum of states will be convoluted into these states.

inertia

The moment of inertia of the rotor.

quantum

quantum: ‘bool’

rotationalConstant

The rotational constant of the rotor.

semiclassical

semiclassical: ‘bool’

solveSchrodingerEquation(self, int Nbasis=401) → ndarray

Solves the one-dimensional time-independent Schrodinger equation to determine the energy levels of a one-dimensional hindered rotor with a Fourier series potential using Nbasis basis functions. For the purposes of this function it is usually sufficient to use 401 basis functions (the default). Returns the energy eigenvalues of the Hamiltonian matrix in J/mol.

symmetry

symmetry: ‘int’