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, trust_radius="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.