pele.transition_states._generalized_dimer#

class pele.transition_states._generalized_dimer.GeneralizedDimer

Source

class GeneralizedDimer:

Use the generalized dimer method to find a saddle point

This should be considered experimental. It works, but I haven’t spent enough time on it to make it very robust and efficient. I would recommend using FindTransitionState instead.

Parameters:
coordsarray

The starting point for the optimization

potentialthe potential object
eigenvec0array

An initial guess for the smallest eigenvector (dimer direction)

rotational_stepsint

The number of iterations for optimizing the smallest eigenvector (rotating the dimer) between translational moves

translational_stepsint

The number of translational steps before re-optimizing the smallest eigenvector

maxiterint

the maximum number of iterations

minimizer_kwargsdict

these keyword arguments are passed to the minimizer that does the translational steps

leig_kwargsdict

these keyword arguments are passed to the class for optimizing the smallest eigenvector

Notes

The dimer method defines a way of walking along an energy surface towards a saddle point. The dimer is defined by a location and a direction, vec. vec will point along the direction of largest negative curvature, which corresponds to the eigenvector of the Hessian matrix with the smallest eigenvalue. The eigenvalue is the curvature. The eigenvector can be computed analytically if the Hessian is available, but this is often computationally expensive normally you would use gradients and an optimization function to converge towards the direction of largest curvature. If the gradient is inverted along the direction of the largest negative curvature then following that gradient will lead you towards a saddle point. As you walk towards the saddle point the direction of largest negative curvature will change, so it will need to be periodically re-optimized. Thus the main iteration loop is

1. Optimize the rotation of the dimer so that it is aligned with the direction of largest negative curvature.

2. Translate the dimer uphill following the direction of largest negative curvature while simultaneously walking downhill in all perpendicular directions.

  1. If converged, then end, else go to 1.

GeneralizedDimer.get_true_energy_gradient()

Source

def get_true_energy_gradient(self, coords):

return the true energy and gradient

GeneralizedDimer.get_coords()

Source

def get_coords(self):

return the current location of the dimer

GeneralizedDimer.stop_criterion_satisfied()

Source

def stop_criterion_satisfied(self):

return True if the stop criterion is satisfied

GeneralizedDimer.one_iteration()

Source

def one_iteration(self):

do one iteration

GeneralizedDimer.run()

Source

def run(self):

the main iteration loop

GeneralizedDimer.get_result()

Source

def get_result(self):

return a results object