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