Nudged Elastic Band

Module that performs double ended transition states by the nudged elastic band. Double ended searches take two endpoint minima and aim to locate a minimum energy pathway between them, the maxima on this path are candidates for transition states.

class topsearch.transition_states.nudged_elastic_band.NudgedElasticBand(potential: Potential, force_constant: float, image_density: float, max_images: int, neb_conv_crit: float, output_level: int = 0)

Description

Takes in the coordinates of two endpoint minima and perform a double-ended transition state search using the nudged elastic band algorithm (https://doi.org/10.1142/9789812839664_0016). Produces an initial linear interpolation with linear_interpolation or dihedral_interpolation. Optimise this initial guess using minimise_interpolation And pick out transition state candidates using find_ts_candidates The whole process is performed by run()

potential

The function which we are finding minimum energy paths on

Type:

class instance

minimiser

The local minimiser used for optimising the band

Type:

class instance

force_constant

The value of the force constant used in harmonic part of band energy

Type:

float

image_density

The density of images, per distance unit, in the initial band interpolations

Type:

float

original_image_density

Store of image_density to return image_density to value once updated

Type:

float

max_images

The maximum allowed number of images in the nudged elastic band

Type:

int

force_constants

An array of force constants for the nudged elastic band, one per image

Type:

np array

n_images

The number of images in the given band after initial interpolation

Type:

int

band_bounds

The bounds on the function range that can be passed to optimiser Same as potential bounds, but one per image

Type:

list

band_function_gradient(band: NDArray[Any, Any]) tuple[float, NDArray[Any, Any]]

Return the total energy and the gradient of the nudged elastic band, this involves the summation of the true function and a series of harmonic terms between adjacent images

band_potential_function(band: NDArray[Any, Any]) tuple[float, NDArray[Any, Any]]

Return the total energy of the band, and an array giving the true function evaluated at each image of the band

dihedral_interpolation(coords1: StandardCoordinates, coords2: NDArray[Any, Any], permutation: NDArray[Any, Any]) NDArray[Any, Any]

Interpolate linearly in the space of dihedrals, angles and bond lengths, which will be much more appropriate for molecules

find_tangent_differences(band: NDArray[Any, Any], energies: NDArray[Any, Any]) NDArray[Any, Any]

Compute the tangent vectors between consecutive images in the band, these are calculated from lower to higher connected images in the Upwind scheme. Returns array of tangents, one for each image (apart from endpoints)

find_ts_candidates(band: NDArray[Any, Any]) tuple[NDArray[Any, Any], NDArray[Any, Any]]

Find the local maxima of the nudged elastic band and return the indices of these candidate transition states and their coordinates

get_force_constants() None

Get the array of force constants for the harmonic potential

initial_interpolation(coords1: StandardCoordinates, coords2: NDArray[Any, Any], attempts: int, permutation: NDArray[Any, Any]) NDArray[Any, Any]

Return initial interpolation band using the appropriate number of images based on previous attempts. Set force constants and bounds attributes for use in other methods

linear_interpolation(coords1: StandardCoordinates, coords2: NDArray[Any, Any]) NDArray[Any, Any]

Produce a linear interpolation between two points with a number of images specified by self.image_density

minimise_interpolation(band: NDArray[Any, Any]) NDArray[Any, Any]

Perform minimisation of the given interpolation between endpoints using box-contrained LBFGS and return the optimised band

perpendicular_component(vec1: NDArray[Any, Any], vec2: NDArray[Any, Any]) NDArray[Any, Any]

Return perpendicular component of vector vec1 relative to vec2

revert_image_density() None

Revert the image density to its original value

run(coords1: StandardCoordinates, coords2: NDArray[Any, Any], attempts: int = 0, permutation: NDArray[Any, Any] = None) tuple[NDArray[Any, Any], NDArray[Any, Any]]

Complete double-ended transition state search when provided with two minima. Returns an array of transition state candidates taken as maxima on the approximate minimum energy path

update_image_density(attempts: int) None

Update the image density parameter