Original NEB#

The theory behind this original NEB implementation is taken from Henkelman and H. J ́onsson, J. Chem. Phys. 113, 9978 (2000)

class autode.neb.original.Image(species: Species, name: str, k: ForceConstant)#
__init__(species: Species, name: str, k: ForceConstant)#

Image in a NEB

Parameters:
  • name (str) – Name of this image

  • k (ForceConstant) – Force constant of the harmonic potential joining this image to its neighbour(s)

get_force(im_l: Image, im_r: Image) ndarray#

Compute F_i. Notation from: Henkelman and H. J ́onsson, J. Chem. Phys. 113, 9978 (2000)

also a copy in autode/common

Parameters:

im_r (autode.neb.Image) – Right image (i+1)

property gradient: ndarray | None#

Gradient (dE/dx) at this geometry.

iteration#

Current optimisation iteration of this image

class autode.neb.original.Images(init_k: ForceConstant, min_k: ForceConstant | None = None, max_k: ForceConstant | None = None)#
__init__(init_k: ForceConstant, min_k: ForceConstant | None = None, max_k: ForceConstant | None = None)#

Set of images joined by harmonic springs with force constant k

Parameters:
append_species(species: Species) None#

Add a species to the list of images

coords()#

Get a flat array of all components of every atom

copy() Images#

Return a shallow copy of the list.

increment()#

Advance all the iteration numbers on the images to name correctly also update force constants

plot_energies(save=False, name='None', color=None, xlabel='NEB coordinate')#

Plot the NEB surface

set_coords(coords)#

Set the flat array of coordinates to the species in the images

class autode.neb.original.NEB(init_k: ~autode.values.ForceConstant = Force constant(0.1 Ha Å^-2), **kwargs)#
__init__(init_k: ~autode.values.ForceConstant = Force constant(0.1 Ha Å^-2), **kwargs)#

Nudged elastic band (NEB)

Warning: The initial/final species or those in a species list must have the same atom ordering.

calculate(method: ~autode.wrappers.methods.Method, n_cores: int, name_prefix: str = '', etol_per_image: float | ~autode.values.PotentialEnergy = Energy(0.6 kcal mol-1)) None#

Optimise the NEB using forces calculated from electronic structure

Parameters:
  • n_cores – Number of cores to use for the calculation

  • name_prefix – Prefix for the naming of the geometry and plot generated by this function

  • etol_per_image – Energy tolerance per image to use in the L-BFGS-B minimisation

classmethod from_end_points(initial: ~autode.species.species.Species, final: ~autode.species.species.Species, num: int, init_k: ~autode.values.ForceConstant = Force constant(0.1 Ha Å^-2)) NEB#

Construct a nudged elastic band from only the endpoints. The atomic ordering must be identical in the initial and final species

final: Final/right-most species in the NEB

num: Number of images to create

init_k: Initial force constant

Returns:

(NEB):

classmethod from_file(filename: str, init_k: float | None = None) NEB#

Create a nudged elastic band from a .xyz file containing multiple images.

classmethod from_list(species_list: ~typing.Sequence[~autode.species.species.Species], init_k: ~autode.values.ForceConstant = Force constant(0.1 Ha Å^-2)) NEB#

Nudged elastic band constructed from list of species

Return type:

(NEB)

idpp_relax() None#

Relax the NEB using the image dependent pair potential

property init_k: ForceConstant#

Initial force constant used to in this NEB

property max_atom_distance_between_images: Distance#
partition(max_delta: Distance, distance_idxs: Sequence[int] | None = None) None#

Partition this NEB such that there are no distances between images exceeding max_delta. Will run IDPP (image dependent pair potential) relaxations on intermediate images.

image and the maximum is over the atom-wise distance

Parameters:

distance_idxs – Indexes of atoms used to calculate the max_delta. If none then all distances are used. For example if only distance_idxs = [0] then |x_k,0 - x_k+1,0| will be calculated, where 0 is the atom index and k is the image index

property peak_species: Species | None#

highest energy saddle point

Type:

TS guess species for this NEB

print_geometries(name='neb') None#
autode.neb.original.derivative(flat_coords, images, method, n_cores, plot_energies)#

Compute the derivative of the total energy with respect to all components. Several arguments are unused as SciPy requires the jacobian function to have the same signature as the function that’s being minimised. See: https://tinyurl.com/scipyopt

autode.neb.original.energy_gradient(image, method, n_cores)#

Calculate energies and gradients for an image using a EST method

autode.neb.original.total_energy(flat_coords, images, method, n_cores, plot_energies)#

Compute the total energy across all images