Mode Refinement

The vibrational Mode Refinement method not only refines frequencies, but also tries to correct the vibrational modes themselves. If we start from e.g. a semi-empirical method such as in MOPAC, we can get approximations for the vibrational modes. Mode Refinement then re-calculates part of the Hessian for a subset of these modes using a more accurate method such as GGA DFT, and updates the normal modes themselves to fit this more accurate method. It is intended to circumvent the expensive calculation of the Hessian if you are only interested in a (small) part of the full spectrum. This is based on the method in [12].

See also

The GUI tutorial on Mode Refinement.

Theory

We are going to start from a set of normal modes \(b\), obtained from e.g. a semi-empirical or force-field method. First, this task runs the numerical frequency calculation for all selected normal modes, but this time using an ab initio method such as DFT. During the finite difference steps, we also calculate the projection of the Hessian onto the normal modes:

\[\sigma_i = H^m \cdot b_i^m = \frac{\partial{}^{2}E}{\partial{}R_i^{m}\partial{}b^m}\]

This term is calculated through finite differences on the analytical gradients of the electronic energy along the mass-weighted normal modes \(b^m\). The index \(i\) denotes the \(3N\) nuclear coordinates. These projections are then used to construct a Rayleigh matrix:

\[\tilde{H}^m = {B^m}^T \cdot H^m \cdot B^m = {B^m}^T \cdot \Sigma\]

Here, \(B^m\) and \(\Sigma\) are matrices containing the \(b^m\) and \(\sigma\) vectors. The eigenvectors of \(\tilde{H}^m\) give us the coefficient series for linear combinations of the normal modes \(b^m\) such that we obtain a new set of modes \(q\):

\[q^m = \sum_k c_k \cdot b_k^m\]

These modes \(q\) are the closest approximation to the DFT-modes that we could obtain from a linear combination of the approximate modes \(b\). In other words: the approximate modes \(b\) are used as a basis for finding the modes from a more sophisticated theory.

Calculation setup

This method inherently features a trade-off:

  • The computational benefit comes from only performing the finite difference calculations for the selected modes. By only selecting a small set of modes that we are interested in, we minimise computational expense.
  • The more modes we select, the larger the basis for constructing the refined modes. Running for a larger number of modes yields better results. (In the extreme case, running for all 3N modes equates to constructing the full Hessian.)

In practice, Mode Refinement requires you to select a reasonable portion of the spectrum to get accurate results. Specifically, you should select all modes in a region of the spectrum which look similar. Ring structures for instance often feature broad frequency regions with many ring distortions. Even if you are only interested in a couple of these, you should still select all modes in this region, to assure sufficient basis size. Vibrational modes involving ring substituents can however be omitted, which is where we save computation time.

If you are interested only in IR-active vibrations, you could further minimise the basis by only selecting the approximate modes which are IR-active (since adding the non-active modes to the linear expansion does not affect the IR-intensity of the refined modes). Do note that if the semi-empirical method used for calculating the approximate modes yields poor approximations for the dipole gradients, it may be safer to include also modes with very low IR intensity. This is because their low IR-activity may have only been due to the low accuracy of the approximate method.

See also

A tutorial showing this basis representability.

A Mode Refinement calculation is set up by requesting the ModeRefinement task:

Task ModeRefinement

ModeRefinement

   ModePath adf.rkf

   ModeSelect
      ...
   End

   Displacement 0.001

   ScanModes true

End

The details of the calculation are specified in the ModeRefinement block. Here, ModePath specifies the AMS output file containing the normal modes for which you want to calculate the frequencies. The ModeSelect block is used to specify which of the modes in this file will be selected for refinement. A more detailed overview of this block is given in the section Selecting modes on the main page. Finally, Displacement can be used to specify the stepsize (in Bohr) for the finite differences. The stepsize is provided for displacements along the Cartesian normal modes.

The ScanModes key in the ModeRefinement block can be used to automatically run a numerical frequencies calculation on the new modes \(q\). Mode Refinement uses a linear combination of modes and properties, all obtained through finite differences. These results may still contain some minor errors due to the accumulation of numerical errors from the linear expansion, or stepsize issues in the numerical frequency calculations. While commonly not necessary, it is possible to run an additional numerical refinement calculation on the new modes to minimise these errors. Only in exceptional cases will these errors be significant. Running this additional refinement step is therefore only necessary if you need complete certainty that the results are accurate.

Overview of input options

Below is the overview for all the keys in the ModeRefinement block:

ModeRefinement
   Displacement float
   ModePath string
   ModeSelect
      FreqAndIRRange float_list
      FreqRange float_list
      Full [True | False]
      HighFreq integer
      HighIR integer
      IRRange float_list
      ImFreq [True | False]
      LowFreq integer
      LowFreqNoIm integer
      LowIR integer
      ModeNumber integer_list
   End
   ScanModes [True | False]
End
ModeRefinement
Type:Block
Description:Input data for ModeRefinement tasks.
Displacement
Type:Float
Default value:0.001
Description:Step size for finite difference calculation of frequencies and IR intensities.
ModePath
Type:String
Description:Path to a .rkf file containing the modes which are to be scanned. Which modes will be refined is selected using the criteria from the [ModeSelect] block.)
ModeSelect
Type:Block
Description:Pick which modes to refine from those read from file.
FreqAndIRRange
Type:Float List
Unit:cm-1 and km/mol
Recurring:True
Description:Specifies a combined frequency and IR intensity range within which all modes will be refined. (First 2 numbers are the frequency range, last 2 numbers are the IR intensity range.)
FreqRange
Type:Float List
Unit:cm-1
Recurring:True
Description:Specifies a frequency range within which all modes will be refined. (2 numbers: a upper and a lower bound.)
Full
Type:Bool
Default value:False
Description:Refine all modes.
HighFreq
Type:Integer
Description:Refine the N modes with the highest frequencies.
HighIR
Type:Integer
Description:Refine the N modes with the largest IR intensities.
IRRange
Type:Float List
Unit:km/mol
Recurring:True
Description:Specifies an IR intensity range within which all modes will be refined. (2 numbers: a upper and a lower bound.)
ImFreq
Type:Bool
Default value:False
Description:Refine all modes with imaginary frequencies.
LowFreq
Type:Integer
Description:Refine the N modes with the lowest frequencies. (Includes imaginary modes which are recorded with negative frequencies.)
LowFreqNoIm
Type:Integer
Description:Refine the N modes with the lowest non-negative frequencies. (Imaginary modes have negative frequencies and are thus omitted here.)
LowIR
Type:Integer
Description:Refine the N modes with the smallest IR intensities.
ModeNumber
Type:Integer List
Description:Indices of the modes to refine.
ScanModes
Type:Bool
Default value:False
Description:If enabled an additional displacement will be performed along the new modes at the end of the calculation to obtain refined frequencies and IR intensities. Equivalent to running the output file of the mode tracking calculation through the AMS ModeScanning task.