Tutorial: Transition state optimization
Qcore supports transition state (TS) optimization using the eigenvectorfollowing 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 protontransfer TS structure of Malondialdehyde using GFNxTB. 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 OH 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 userdefined 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 lowerlevel 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 GFNxTB to find the HartreeFock TS structure. The Hessian is saved to guess_hessian and loaded in to the optimize() command with load = guess_hessian.