Transition state optimisation

There are two algorithms available in DL-FIND to search for transition states: partitioned rational function optimisation (P-RFO) and the dimer method.

P-RFO

P-RFO is a traditional transition state optimisation algorithm which involves a full Hessian calculation to find the transition state mode to follow. It is therefore only suitable for the optimisation of small molecules.

The directory samples/transition_states/ contains an example optimisation of the transition state for ammonia inversion (prfo_nh3.nwchem.py). This follows a similar pattern to the minimisation example, except it searches for a maximum in one dimension (i.e. a transition state).

First, we read in the ammonia molecule from disk, and set up the QM calculation as in previous examples:

# Read in NH3 geometry from disk
my_mol = Fragment(coords="nh3.xyz")

# Set up the QM calculation
my_theory = NWChem(frag=my_mol, method="dft", functional="blyp", basis="3-21g")

We then call DL-FIND with the option algorithm=prfo to specify a P-RFO transition state optimisation:

# Request an optimisation using DL-FIND
opt = Opt(theory=my_theory, coordinates="dlc", algorithm="prfo", tolerance=0.0003)
opt.run()

Here we are using delocalised internal coordinates (coordinates="dlc") rather than cartesian coordinates for efficiency. The advantages and disadvantages of the various coordinate systems available in DL-FIND will be discussed in a later tutorial.

The dimer method

The dimer method defines two connected geometry images which are rotated to determine the direction to the transition state. This avoids the need to calculate a Hessian and is therefore recommended for optimising systems with many degrees of freedom.

The dimer method can be chosen by specifying dimer=True as in the example dimer_nh3.nwchem.py. The recommended optimisation algorithm for use with the dimer method is lbfgs:

# Request an optimisation using DL-FIND
opt = Opt(theory=my_theory, dimer=True, coordinates="dlc", algorithm="lbfgs",
          delta=0.01, tolerance=0.0003, trustradius="const")
opt.run()

You should find that the dimer method converges to the same result as P-RFO, with very similar final energies and structures (check prfo_opt.xyz and dimer_opt.xyz). Due to the approximations made by the dimer method you may find it takes a few more cycles to converge than P-RFO, but this is usually outweighed by the cost of calculating the Hessian in P-RFO, especially for large systems.

Both the P-RFO and dimer methods require a reasonable initial guess at the transition state structure in order to converge efficiently. In the next tutorial we will look at a method which only requires knowledge of the reactant and product states.