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:
min_k (ForceConstant | None) – Minimum value of k
max_k (ForceConstant | None) – Maximum value of k
- coords()#
Get a flat array of all components of every atom
- 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
- 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