Tutorial: Transition state optimization
Qcore supports transition state (TS) optimization using the eigenvector-following algorithm. This is done by setting the option ts = true within the optimize() command. The minimal input for a TS optimization is:
In this example, we seek the proton-transfer TS structure of Malondialdehyde using GFN-xTB. We start with an initial structure (shown on the left) that is reasonably close to the true TS structure.
Searching for a TS is usually more difficult than geometry optimization. The model Hessian used in downhill minimization is not adequate for TS optimization. Therefore, the optimize() command will compute the exact Hessian using the energy method provided. This must contain at least one imaginary frequency. To increase the chance of finding the desired TS structure we also recommend first performing a constrained optimization. By fixing bonds/angles/dihedrals that are close to the TS, the Hessian is more likely to possess the desired imaginary frequency. Here is an example input:
In this example, we also demonstrate how to perform linked calculations:
First a constrained geometry optimization is performed, by setting the two O-H bond lengths to 1.38 angstrom and relaxing the remaining degrees of freedom of the molecule
The result of the constrained optimization is captured using the := operator to the user-defined name constrained_opt.
We can add comments anywhere in the input file and start with the "!" character
Then the TS optimization is performed by loading constrained_opt result in to the structure() subcommand
Again we name the result of the TS optimization, but now in to the variable ts_opt
Finally, we perform another vibrational frequency calculation to confirm that we obtain the desired TS structure.
Qcore also allows the Hessian to be computed at a lower-level of theory. This scheme requires care, but it can massively accelerate the process of TS optimization. In the final example below, we demonstrate calculating the Hessian using GFN-xTB to find the Hartree-Fock TS structure. The Hessian is saved to guess_hessian and loaded in to the optimize() command with load = guess_hessian.