Computes thermodynamic properties from vibrational frequencies and molecular geometry.
This module implements standard RRHO thermochemistry calculations including: - Zero-point vibrational energy (ZPE) - Translational, rotational, vibrational, and electronic contributions - Thermal corrections to energy, enthalpy, and Gibbs free energy
Default conditions: T = 298.15 K, P = 1 atm Output follows Gaussian-style formatting for compatibility.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=dp), | public, | parameter | :: | DEFAULT_PRESSURE | = | 1.0_dp |
Default pressure in atm |
| integer, | public, | parameter | :: | DEFAULT_SPIN_MULTIPLICITY | = | 1 |
Default spin multiplicity (singlet) |
| integer, | public, | parameter | :: | DEFAULT_SYMMETRY_NUMBER | = | 1 |
Default symmetry number |
| real(kind=dp), | public, | parameter | :: | DEFAULT_TEMPERATURE | = | 298.15_dp |
Default temperature in Kelvin |
| real(kind=dp), | private, | parameter | :: | IMAG_FREQ_THRESHOLD | = | 0.0_dp |
Threshold for considering a frequency as imaginary |
| real(kind=dp), | private, | parameter | :: | LINEAR_THRESHOLD | = | 1.0e-6_dp |
Threshold for considering a moment of inertia as zero (linear molecule detection) |
Container for thermochemistry calculation results
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=dp), | public | :: | Cv_rot | = | 0.0_dp |
Rotational heat capacity |
|
| real(kind=dp), | public | :: | Cv_trans | = | 0.0_dp |
Translational heat capacity |
|
| real(kind=dp), | public | :: | Cv_vib | = | 0.0_dp |
Vibrational heat capacity |
|
| real(kind=dp), | public | :: | E_elec | = | 0.0_dp |
Electronic thermal energy (always 0) |
|
| real(kind=dp), | public | :: | E_rot | = | 0.0_dp |
Rotational thermal energy |
|
| real(kind=dp), | public | :: | E_trans | = | 0.0_dp |
Translational thermal energy |
|
| real(kind=dp), | public | :: | E_vib | = | 0.0_dp |
Vibrational thermal energy (excluding ZPE) |
|
| real(kind=dp), | public | :: | S_elec | = | 0.0_dp |
Electronic entropy |
|
| real(kind=dp), | public | :: | S_rot | = | 0.0_dp |
Rotational entropy |
|
| real(kind=dp), | public | :: | S_trans | = | 0.0_dp |
Translational entropy |
|
| real(kind=dp), | public | :: | S_vib | = | 0.0_dp |
Vibrational entropy |
|
| logical, | public | :: | is_linear | = | .false. |
True if molecule is linear |
|
| real(kind=dp), | public | :: | moments(3) | = | 0.0_dp |
Principal moments of inertia in amu*Angstrom^2 |
|
| integer, | public | :: | n_imag_freqs | = | 0 |
Number of imaginary frequencies (skipped) |
|
| integer, | public | :: | n_real_freqs | = | 0 |
Number of real vibrational frequencies |
|
| real(kind=dp), | public | :: | pressure | = | DEFAULT_PRESSURE |
Pressure in atm |
|
| real(kind=dp), | public | :: | q_rot | = | 0.0_dp |
Rotational partition function |
|
| real(kind=dp), | public | :: | q_trans | = | 0.0_dp |
Translational partition function |
|
| real(kind=dp), | public | :: | q_vib | = | 1.0_dp |
Vibrational partition function |
|
| real(kind=dp), | public | :: | rot_const(3) | = | 0.0_dp |
Rotational constants in GHz |
|
| integer, | public | :: | spin_multiplicity | = | DEFAULT_SPIN_MULTIPLICITY |
Electronic spin multiplicity |
|
| integer, | public | :: | symmetry_number | = | DEFAULT_SYMMETRY_NUMBER |
Rotational symmetry number |
|
| real(kind=dp), | public | :: | temperature | = | DEFAULT_TEMPERATURE |
Temperature in K |
|
| real(kind=dp), | public | :: | thermal_correction_energy | = | 0.0_dp |
E_tot = ZPE + E_trans + E_rot + E_vib |
|
| real(kind=dp), | public | :: | thermal_correction_enthalpy | = | 0.0_dp |
H = E_tot + RT |
|
| real(kind=dp), | public | :: | thermal_correction_gibbs | = | 0.0_dp |
G = H - TS |
|
| real(kind=dp), | public | :: | total_mass | = | 0.0_dp |
Total mass in amu |
|
| real(kind=dp), | public | :: | zpe_hartree | = | 0.0_dp |
ZPE in Hartree |
|
| real(kind=dp), | public | :: | zpe_kcalmol | = | 0.0_dp |
ZPE in kcal/mol |
Compute electronic entropy contribution.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | spin_multiplicity |
Electronic spin multiplicity (2S+1) |
||
| real(kind=dp), | intent(out) | :: | S_elec |
Electronic entropy in cal/(mol*K) |
Compute the principal moments of inertia and detect linear molecules.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | coords(:,:) |
Atomic coordinates (3, n_atoms) in Bohr |
||
| integer, | intent(in) | :: | atomic_numbers(:) |
Atomic numbers |
||
| integer, | intent(in) | :: | n_atoms |
Number of atoms |
||
| real(kind=dp), | intent(out) | :: | center_of_mass(3) |
Center of mass in Angstrom |
||
| real(kind=dp), | intent(out) | :: | moments(3) |
Principal moments in amu*Angstrom^2 |
||
| real(kind=dp), | intent(out) | :: | principal_axes(3,3) |
Principal axis vectors (columns) |
||
| logical, | intent(out) | :: | is_linear |
True if molecule is linear |
||
| real(kind=dp), | intent(out) | :: | total_mass |
Total mass in amu |
Convert moments of inertia to rotational constants in GHz.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | moments(3) |
Moments in amu*Angstrom^2 |
||
| logical, | intent(in) | :: | is_linear |
True if linear molecule |
||
| real(kind=dp), | intent(out) | :: | rot_const(3) |
Rotational constants in GHz |
Compute rotational contributions to thermodynamic properties.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | moments(3) |
Principal moments in amu*Angstrom^2 |
||
| real(kind=dp), | intent(in) | :: | temperature |
Temperature in K |
||
| integer, | intent(in) | :: | symmetry_number |
Rotational symmetry number |
||
| logical, | intent(in) | :: | is_linear |
True if linear molecule |
||
| real(kind=dp), | intent(out) | :: | E |
Thermal energy in Hartree |
||
| real(kind=dp), | intent(out) | :: | S |
Entropy in cal/(mol*K) |
||
| real(kind=dp), | intent(out) | :: | Cv |
Heat capacity in cal/(mol*K) |
Main driver for thermochemistry calculations.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | coords(:,:) |
Coordinates (3, n_atoms) in Bohr |
||
| integer, | intent(in) | :: | atomic_numbers(:) |
Atomic numbers |
||
| real(kind=dp), | intent(in) | :: | frequencies(:) |
Frequencies in cm^-1 |
||
| integer, | intent(in) | :: | n_atoms |
Number of atoms |
||
| integer, | intent(in) | :: | n_freqs |
Number of frequencies |
||
| type(thermochemistry_result_t), | intent(out) | :: | result |
Output results |
||
| real(kind=dp), | intent(in), | optional | :: | temperature |
Temperature in K (default 298.15) |
|
| real(kind=dp), | intent(in), | optional | :: | pressure |
Pressure in atm (default 1.0) |
|
| integer, | intent(in), | optional | :: | symmetry_number |
Symmetry number (default 1) |
|
| integer, | intent(in), | optional | :: | spin_multiplicity |
Spin multiplicity (default 1) |
Compute translational contributions to thermodynamic properties.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | total_mass |
Total mass in amu |
||
| real(kind=dp), | intent(in) | :: | temperature |
Temperature in K |
||
| real(kind=dp), | intent(in) | :: | pressure |
Pressure in atm |
||
| real(kind=dp), | intent(out) | :: | E |
Thermal energy in Hartree |
||
| real(kind=dp), | intent(out) | :: | S |
Entropy in cal/(mol*K) |
||
| real(kind=dp), | intent(out) | :: | Cv |
Heat capacity in cal/(mol*K) |
Compute vibrational contributions to thermodynamic properties.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | frequencies(:) |
Frequencies in cm^-1 |
||
| integer, | intent(in) | :: | n_freqs |
Number of frequencies |
||
| real(kind=dp), | intent(in) | :: | temperature |
Temperature in K |
||
| real(kind=dp), | intent(out) | :: | E |
Thermal energy in Hartree (excluding ZPE) |
||
| real(kind=dp), | intent(out) | :: | S |
Entropy in cal/(mol*K) |
||
| real(kind=dp), | intent(out) | :: | Cv |
Heat capacity in cal/(mol*K) |
Compute zero-point vibrational energy from frequencies.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | frequencies(:) |
Vibrational frequencies in cm^-1 |
||
| integer, | intent(in) | :: | n_freqs |
Total number of frequencies |
||
| integer, | intent(out) | :: | n_real |
Number of real (positive) frequencies used |
||
| real(kind=dp), | intent(out) | :: | zpe_hartree |
ZPE in Hartree |
||
| real(kind=dp), | intent(out) | :: | zpe_kcalmol |
ZPE in kcal/mol |
Print thermochemistry results.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(thermochemistry_result_t), | intent(in) | :: | result | |||
| real(kind=dp), | intent(in) | :: | electronic_energy |
Electronic energy in Hartree |
||
| integer, | intent(in), | optional | :: | unit |
Output unit (default: stdout) |
Compute partition functions for translation, rotation, and vibration.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | total_mass |
Total mass in amu |
||
| real(kind=dp), | intent(in) | :: | moments(3) |
Principal moments in amu*Angstrom^2 |
||
| real(kind=dp), | intent(in) | :: | frequencies(:) |
Frequencies in cm^-1 |
||
| integer, | intent(in) | :: | n_freqs |
Number of frequencies |
||
| real(kind=dp), | intent(in) | :: | temperature |
Temperature in K |
||
| real(kind=dp), | intent(in) | :: | pressure |
Pressure in atm |
||
| integer, | intent(in) | :: | sigma |
Symmetry number |
||
| logical, | intent(in) | :: | is_linear |
True if linear molecule |
||
| real(kind=dp), | intent(out) | :: | q_trans |
Translational partition function |
||
| real(kind=dp), | intent(out) | :: | q_rot |
Rotational partition function |
||
| real(kind=dp), | intent(out) | :: | q_vib |
Vibrational partition function |