Why compute frequencies

A frequency job after an optimisation serves three purposes:

  1. Characterise the stationary point: all real frequencies → stable minimum; exactly one imaginary frequency → transition state.
  2. Provide thermochemical corrections: zero-point energy (ZPE), thermal corrections, entropy → Gibbs free energy G.
  3. Predict IR / Raman spectra: vibrational spectra directly comparable to experiment.

Basic usage: AnFreq and NumFreq

Two flavours are available:

KeywordModeNotes
Freq or AnFreqAnalytical derivativesFast and accurate. Supported for HF, DFT, MP2, CASSCF.
NumFreqNumerical derivativesAvailable for every method. Performs 6 × Natom gradient evaluations.
# Analytical frequencies (preferred when available)
! B3LYP D4 def2-TZVP Freq

# Numerical frequencies (when analytical derivatives are unavailable, e.g. CCSD(T))
! CCSD(T) cc-pVDZ NumFreq
Frequencies are only meaningful at a stationary point

A frequency calculation only makes sense at a stationary point (zero gradient). If you compute frequencies on an un-optimised geometry the translational and rotational modes acquire non-zero values, and every other mode is contaminated as a result. Always optimise first with the same method and basis set.

Combined with optimisation

The most common pattern is to chain Opt and Freq on the same keyword line:

! B3LYP D4 def2-TZVP RIJCOSX def2/J TightOpt Freq

* xyzfile 0 1 mol.xyz

Once the optimisation converges, ORCA automatically launches the frequency calculation at the same level. If you find an imaginary frequency, distorting the geometry along that mode and re-optimising usually resolves it.

Reading the output

After a frequency calculation the output contains a table like this:

-----------------------
VIBRATIONAL FREQUENCIES
-----------------------

Scaling factor for frequencies =  1.000000000  (already applied!)

   0:         0.00 cm**-1
   1:         0.00 cm**-1
   2:         0.00 cm**-1
   3:         0.00 cm**-1
   4:         0.00 cm**-1
   5:         0.00 cm**-1
   6:      1659.34 cm**-1
   7:      3805.21 cm**-1
   8:      3914.47 cm**-1

The first six entries (five for linear molecules) are the translational and rotational modes, which should always appear near zero. The remaining entries are the true vibrational modes. In the example above water has three modes: the bend (1659), symmetric stretch (3805) and antisymmetric stretch (3914).

Visualising normal coordinates

Displacement vectors for each mode appear in the NORMAL MODES section:

------------
NORMAL MODES
------------
                  0          1          2          3          4
      0    0.000000   0.000000  -0.000000   0.000000  -0.000000
      1    0.000000   0.000000   0.000000  -0.000000   0.000000
      ...

To inspect normal coordinates intuitively, use the orca_pltvib utility to generate a trajectory of the vibration:

# Extract a trajectory for mode 6 (writes an XYZ file)
orca_pltvib mol.hess 6

Handling imaginary frequencies

Imaginary frequencies appear as negative numbers in the output:

   6:      -456.78 cm**-1   ***imaginary mode***
   7:      1234.56 cm**-1
   8:      ...

If you did not intend to find a transition state, this is how to resolve it:

  1. Displace every atom slightly along the imaginary mode's normal coordinate (say ± 0.1 Å). Extracting the first amplitude frame from orca_pltvib is the easiest way.
  2. Re-optimise from this new geometry. Consider tightening to VeryTightOpt.
  3. Re-run the frequencies and confirm all modes are real.
Very small negative frequencies

Frequencies of ± 10 cm⁻¹ or so are usually numerical noise from the integration grid or the SCF threshold. Tightening to DefGrid3 VeryTightSCF and re-running often removes them.

Thermochemistry and Gibbs free energy

Once the frequencies are in, ORCA automatically prints the thermochemistry. The default reference conditions are 298.15 K and 1 atm:

-------------------------
THERMOCHEMISTRY AT 298.15K
-------------------------

Temperature         ... 298.15 K
Pressure            ... 1.00 atm
Total Mass          ... 18.01 AMU

Zero point energy                ...     0.02143521 Eh      13.45 kcal/mol
Thermal vibrational correction   ...     0.00010256 Eh       0.06 kcal/mol
Thermal rotational correction    ...     0.00141572 Eh       0.89 kcal/mol
Thermal translational correction ...     0.00141572 Eh       0.89 kcal/mol
-------------------------------------------------
Total thermal energy                  -76.39541321 Eh
Total enthalpy                        -76.39447892 Eh
Final Gibbs free energy               -76.42157345 Eh
-------------------------------------------------
G-E(el)                            ...   0.00219978 Eh       1.38 kcal/mol

The key entries are:

ItemMeaning
Zero point energyThe vibrational energy that remains at 0 K.
Total thermal energyU = Eel + ZPE + thermal corrections.
Total enthalpyH = U + pV.
Final Gibbs free energyG = H − TS. The number you usually want for reaction free energies.

Changing T and p

%freq
   Temp     373.15   # 100 °C
   Pressure 1.0      # atm
end
Low-frequency correction and quasi-RRHO

The default RRHO (rigid-rotor harmonic oscillator) model over-estimates the entropy of low-frequency modes (< 100 cm⁻¹). Applying Grimme's quasi-RRHO correction gives noticeably better free energies. Enable with %freq QuasiRRHO true CutOffFreq 35 end. The improvement is particularly visible for conformer searches and floppy molecules.

IR · Raman spectra

IR intensities are always printed alongside the frequencies. Raman intensities require either ! NumFreq or a polarisability calculation in the same job.

To turn the printed table into a spectrum, use the orca_mapspc utility:

# IR spectrum (.dat file)
orca_mapspc mol.out ir -w25

# Raman spectrum
orca_mapspc mol.out raman -w50

# Open mol.out.ir.dat or mol.out.raman.dat in gnuplot, matplotlib, …

The -w flag sets the Lorentzian / Gaussian line width in cm⁻¹. Running orca_mapspc with no arguments prints the full option list.

Useful options

%freq
   CentralDiff   true     # central differences in NumFreq (default: forward). More accurate, 2× slower.
   Increment     0.005    # displacement size (bohr). Default 0.005.
   Restart       true     # resume an interrupted NumFreq
   ProjectTR     true     # project out translational / rotational modes (default on)
   Mass2016      true     # IUPAC 2016 atomic masses
   QuasiRRHO     true     # quasi-RRHO entropy correction
   CutOffFreq    35.0     # quasi-RRHO cutoff (cm^-1), default 35
end
Scaling factors

Harmonic frequencies from DFT are typically 5–10 % too high compared to experiment. When comparing with literature, multiply by the functional-specific recommended scaling factor, e.g. ~0.961 for B3LYP/6-31G(d) and ~0.965 for B3LYP/def2-TZVP. A comprehensive table lives at NIST CCCBDB (cccbdb.nist.gov).