Class NEB
NEB class
Methods
NEB:new (images[, k=5.[, climbing=5[, climbing_tol=0.005]]]) | Instantiating a new NEB object. |
NEB:dR (img1, img2) | Return the coordinate difference between two images |
NEB:tangent (image) | Calculate the tangent of a given image |
NEB:climbing (image) | Determine whether the queried image is climbing |
NEB:spring_force (image) | Calculate the spring force of a given image |
NEB:perpendicular_force (image) | Calculate the perpendicular force of a given image |
NEB:curvature (image) | Calculate the curvature of the force with regards to the tangent |
NEB:neb_force (image) | Calculate the resulting NEB force of a given image |
NEB:R (image) | Query the current coordinates of an image |
NEB:force (image, IO) | Query the current NEB force and optionally write out the current step information Calculates the NEB force for the current image and optionally store the current image information to the files. |
NEB:save (IO) | Store the current step of the NEB iteration with the appropriate results Append to the file NEB.results the current NEB image step results. |
NEB:init_files () | Initialize all files that will be written to |
NEB:info () | Print to screen some information regarding the NEB algorithm |
Methods
- NEB:new (images[, k=5.[, climbing=5[, climbing_tol=0.005]]])
-
Instantiating a new NEB object.
For the NEB object it is important to pass the images, and then all the NEB settings as named arguments in a table.
The NEB object implements a generic NEB algorithm as detailed in: 1. "Improved tangent estimate in the nudged elastic band method for finding minimum energy paths and saddle points", Henkelman & Jonsson, JCP (113), 2000 2. "A climbing image nudged elastic band method for finding saddle points and minimum energy paths", Henkelman, Uberuaga, & Jonsson, JCP (113), 2000
This particular implementation has been tested and initially developed by Jesper T. Rasmussen, DTU Nanotech, 2016.
When instantiating a new NEB calculator one must populate the initial, all intermediate images and a final image in a a table. The easiest way to do this can be seen in the below usage field.
To perform the NEB calculation all images (besides the initial and final) are relaxed by an external relaxation method (see Optimizer and its child classes). Due to the forces being highly non-linear as the NEB algorithm updates the forces depending on the nearest images, it is adviced to use an MD-like relaxation method such as FIRE. If one uses history based relaxation methods (LBFGS, CG, etc.) one should limit the number of history steps used.
Running the NEB class will create a huge list of files with corresponding output. Check the NEB:save function for details.
Parameters:
- images table all images (starting with the initial, and ending with the final)
- k number or table spring constant between the images, a table can be used for individual spring constants (default 5.)
- climbing
number
after this number of iterations the climbing image will be taken into account (to disable climbing, pass
false
) (default 5) - climbing_tol number the tolerance for determining whether an image is climbing or not (default 0.005)
Usage:
-- Read in the images -- Note that
read_geom
must be a function that you define to read in the -- atomic coordinates of a corresponding.xyz
file. images = {} for i = 0, n_images + 1 do images[#images+1] = flos.MDStep{R=read_geom(image_label .. i .. ".xyz")} end neb = NEB(images, {<field1 = value>, <field2 = value>}) relax = {} for i = 1, neb.n_images do relax[i] = flos.FIRE() end neb[0]:set(F=<initial-forces>, E=<initial-E>) neb[neb.n_images+1]:set(F=<final-forces>, E=<final-E>) while true do -- Calculate all forces and energies of each image for i = 1, neb.n_images do neb[i]:set(F=<forces>, E=<energy>) end -- Calculate new positions (this must be done after -- the force calculations because the coordinates depend on the -- neighbouring image forces) R = {} for i = 1, neb.n_images do f = neb:force(i) R[i] = relax:optimize(neb[i].R, neb:force(i)) end for i = 1, neb.n_images do neb:set(R=R[i]) end end - NEB:dR (img1, img2)
-
Return the coordinate difference between two images
Parameters:
- img1 int the first image
- img2 int the second image
Returns:
NEB[img2].R - NEB[img1].R
- NEB:tangent (image)
-
Calculate the tangent of a given image
Parameters:
- image int the image to calculate the tangent of
Returns:
-
tangent force
- NEB:climbing (image)
-
Determine whether the queried image is climbing
Parameters:
- image int image queried
Returns:
-
true if the image is climbing
- NEB:spring_force (image)
-
Calculate the spring force of a given image
Parameters:
- image int the image to calculate the spring force of
Returns:
-
spring force
- NEB:perpendicular_force (image)
-
Calculate the perpendicular force of a given image
Parameters:
- image int the image to calculate the perpendicular force of
Returns:
-
perpendicular force
- NEB:curvature (image)
-
Calculate the curvature of the force with regards to the tangent
Parameters:
- image int the image to calculate the curvature of
Returns:
-
curvature
- NEB:neb_force (image)
-
Calculate the resulting NEB force of a given image
Parameters:
- image int the image to calculate the NEB force of
Returns:
-
NEB force
- NEB:R (image)
-
Query the current coordinates of an image
Parameters:
- image int the image
Returns:
-
coordinates
- NEB:force (image, IO)
-
Query the current NEB force and optionally write out the current step information
Calculates the NEB force for the current image and optionally store
the current image information to the files.
The generated files are:
NEB.<image>.R
containing the relaxation steps of image<image>
NEB.<image>.F
containing the force of image<image>
NEB.<image>.F.P
containing the perpendicular force of image<image>
NEB.<image>.F.S
containing the spring force of image<image>
NEB.<image>.F.NEB
containing the NEB force of image<image>
(equivalent to the returned force)NEB.<image>.T
containing the tangent of image<image>
NEB.<image>.dR_prev
containing the reaction coordinate against the previous imageNEB.<image>.dR_next
containing the reaction coordinate against the next image
All files contains a consecutive list of the values for each iteration.
Parameters:
- image int the image
- IO bool whether or not the current step should be stored
Returns:
-
force
- NEB:save (IO)
-
Store the current step of the NEB iteration with the appropriate results
Append to the file NEB.results the current NEB image step results.
The stored data consists of the following columns:
1. Image number
2. Accummulated reaction coordinate (the 1D-norm of
NEB:dR(i-1, i)
) 3. Total energy of current iteration 4. Total energy difference from initial image 5. Image curvature 6. Maximum NEB force exerted on any given atom.Parameters:
- IO bool whether or not the results should be written
- NEB:init_files ()
- Initialize all files that will be written to
- NEB:info ()
- Print to screen some information regarding the NEB algorithm