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 vs 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 — they 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 modes — 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 — 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).

With frequencies for both minima and transition states in hand, the next step is to connect them.