File ThermochemistryCalculator.h

namespace Scine

This header file contains functions that allow for common notation for common things that can be done at a different degree of derivatives.

This header contains alias definitions defining which classes to use for the different degrees of derivatives.

namespace Utils

Enums

enum ZPVEInclusion

In NDDO semiempirical methods, the ZPVE is already included in the electronic energy due to the way they are parametrized.

In the thermochemical calculation it must then not be included again.

Values:

alreadyIncluded
notIncluded
struct ThermochemicalContainer
#include <ThermochemistryCalculator.h>

Struct containing the single thermochemical properties of interest.

Public Functions

ThermochemicalContainer operator+(const ThermochemicalContainer &rhs) const
ThermochemicalContainer operator*(double factor) const

Overloaded multiplication for unit conversion.

Public Members

double temperature = 0
double entropy = 0
double enthalpy = 0
double heatCapacityP = 0
double heatCapacityV = 0
double gibbsFreeEnergy = 0
double zeroPointVibrationalEnergy = 0
struct ThermochemicalComponentsContainer
#include <ThermochemistryCalculator.h>

Struct containing the vibrational, rotational, translational and the overall thermochemical components.

Public Functions

ThermochemicalComponentsContainer operator*(double factor) const

Overloaded multiplication for unit conversion.

Public Members

ThermochemicalContainer vibrationalComponent = {}
ThermochemicalContainer rotationalComponent = {}
ThermochemicalContainer translationalComponent = {}
ThermochemicalContainer electronicComponent = {}
ThermochemicalContainer overall = {}
class ThermochemistryCalculator

This class calculates and stores the most important thermochemical data.

The class calculates important thermochemical descriptors, as the Zero Point Vibrational Energy, the standard enthalpy of formation, the system entropy, the heat capacity and the Gibbs’ free energy from the results of a vibrational analysis.

By default a temperature of 298.15 K and a molecular symmetry number of one are assumed. They can be adapted via the functions setTemperature() and setMolecularSymmetryNumber(), respectively. Using an incorrect symmetry number results into a wrong rotational entropy.

Public Functions

ThermochemistryCalculator(ElementTypeCollection elements)
ThermochemistryCalculator(NormalModesContainer normalModesContainer, Geometry::PrincipalMomentsOfInertia principalMomentsOfInertia, ElementTypeCollection elements, int spinMulitplicity, double electronicEnergy)
ThermochemistryCalculator(const HessianMatrix &hessian, ElementTypeCollection elements, const PositionCollection &positions, int spinMultiplicity, double electronicEnergy)
~ThermochemistryCalculator()
void setTemperature(double temperature)

Setter for the temperature at which the thermochemical calculation is performed.

void setZPVEInclusion(ZPVEInclusion inclusion)

In NDDO semiempirical methods, the ZPVE is already included in the electronic energy due to the way they are parametrized.

In the thermochemical calculation it must then not be included again.

Parameters
  • inclusion: notIncluded is the standard way, alreadyIncluded is in case of the NDDO semiempirical methods.

ThermochemicalComponentsContainer calculate()
void setMolecularSymmetryNumber(int sigma)

Sets the symmetry sigma factor.

Parameters
  • sigma: The symmetry factor related to the point group symmetry of the molecule. Examples: Cn,v/h : n Dn,v/h : 2*n C_inf,v : 1 C_inf,h : 2 S_n : n/2 T : 12 O : 24 I : 60

Protected Functions

std::vector<double> getWavenumbers() const

Protected Attributes

Geometry::PrincipalMomentsOfInertia principalMomentsOfInertia_
ElementTypeCollection elements_
double temperature_ = {298.15}
int spinMultiplicity_ = {1}
double electronicEnergy_ = {0}
int sigma_ = {1}
ZPVEInclusion zpveIncluded = {ZPVEInclusion::notIncluded}

Private Functions

ThermochemicalContainer calculateVibrationalPart(double temperature) const
ThermochemicalContainer calculateRotationalPart(double temperature) const
ThermochemicalContainer calculateTranslationalPart(double temperature) const
ThermochemicalContainer calculateElectronicPart(double temperature) const
void calculateSigmaForLinearMolecule()

Private Members

NormalModesContainer normalModesContainer_ = {}