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:
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:
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\):
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.