rmgpy.statmech.HarmonicOscillator

class rmgpy.statmech.HarmonicOscillator(frequencies=None, quantum=True)

A statistical mechanical model of a set of one-dimensional independent harmonic oscillators. The attributes are:

Attribute

Description

frequencies

The vibrational frequencies of the oscillators

quantum

True to use the quantum mechanical model, False to use the classical model

In the majority of chemical applications, the energy levels of the harmonic oscillator are of similar magnitude to \(k_\mathrm{B} T\), requiring a quantum mechanical treatment. Fortunately, the harmonic oscillator has an analytical quantum mechanical solution.

Many vibrational motions are well-described as one-dimensional quantum harmonic oscillators. The time-independent Schrodinger equation for such an oscillator is given by

\[-\frac{\hbar^2}{2m} \frac{\partial^2}{\partial x^2} \Psi(x) + \frac{1}{2} m \omega^2 x^2 \Psi(x) = E \Psi(x)\]

where \(m\) is the total mass of the particle. The harmonic potential results in quantized solutions to the above with the following energy levels:

\[E_n = \left( n + \frac{1}{2} \right) \hbar \omega \hspace{2em} n = 0, 1, 2, \ldots\]

Above we have introduced \(n\) as the quantum number. Note that, even in the ground state (\(n = 0\)), the harmonic oscillator has an energy that is not zero; this energy is called the zero-point energy.

The harmonic oscillator partition function is obtained by summing over the above energy levels:

\[Q_\mathrm{vib}(T) = \sum_{n=0}^\infty \exp \left( -\frac{\left( n + \frac{1}{2} \right) \hbar \omega}{k_\mathrm{B} T} \right)\]

This summation can be evaluated explicitly to give a closed-form analytical expression for the vibrational partition function of a quantum harmonic oscillator:

\[Q_\mathrm{vib}(T) = \frac{e^{-\hbar \omega / 2 k_\mathrm{B} T}}{1 - e^{-\hbar \omega / k_\mathrm{B} T}}\]

In RMG the convention is to place the zero-point energy in with the ground-state energy of the system instead of the numerator of the vibrational partition function, which gives

\[Q_\mathrm{vib}(T) = \frac{1}{1 - e^{-\hbar \omega / k_\mathrm{B} T}}\]

The energy levels of the harmonic oscillator in chemical systems are often significant compared to the temperature of interest, so we usually use the quantum result. However, the classical limit is provided here for completeness:

\[Q_\mathrm{vib}^\mathrm{cl}(T) = \frac{k_\mathrm{B} T}{\hbar \omega}\]
as_dict()

A helper function for dumping objects as dictionaries for YAML files

Returns:

A dictionary representation of the object

Return type:

dict

frequencies

The vibrational frequencies of the oscillators.

get_density_of_states(self, ndarray e_list, ndarray dens_states_0=None) ndarray

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

get_enthalpy(self, double T) double

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

get_entropy(self, double T) double

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

get_heat_capacity(self, double T) double

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

get_partition_function(self, double T) double

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

get_sum_of_states(self, ndarray e_list, ndarray sum_states_0=None) ndarray

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

make_object(data, class_dict)

A helper function for constructing objects from a dictionary (used when loading YAML files)

Parameters:
  • data (dict) – The dictionary representation of the object

  • class_dict (dict) – A mapping of class names to the classes themselves

Returns:

None

quantum

‘bool’

Type:

quantum