esta.transitionState package
Contents
Note
TransitionState package: Transition state finding using NEB and CI-NEB method for chemical reactions and diffusion processes.
esta.transitionState package#
Submodules#
esta.transitionState.neb module#
finding the transition state using Neb class given initial and final atomic structures using
normal NEB.
Climbing NEB.
Automatic NEB methods .. to be done.
__author__ = ‘sk’
__email__ = ‘sonukumar.physics@gmail.com’
__date__ = ‘Nov, 2017’
Note
We take N+1 images in the elastic band. The end point images are input relaxed structures (reactant and product as an example). The N-1 images are created or feed and after that these images are optimized to get converged elastic band. i.e. 0 1 2 3 … i … N —> N+1 images; 0 and N images are fixed
- class esta.transitionState.neb.Neb(position, force, energy=None)#
Bases:
object
class Neb: calculate the nedged force on all the images in the elastic band
- nedged force = (true force/dft force )_perpendicular componet + (spring
force)_parallel component
- property get_force_ci#
get force on the climbing image
Note
force_ci = force_dft - 2* dot_product (force_dft_vector , tangent_vector) tangent_vector
- get_force_perpen()#
get the perpendicular force acting on each image excluding end points;
Note
force_perpendicular = force_dft - dot_product (force_dft , tangent_vector) tangent_vector
force_dft is force obtained from dft or some model calculation!
- property get_nudged_force#
- get_spring_force_parallel(spring_constant=None)#
get the spring force parallel to the tangent, given the self.atomic positions and spring_constant (optional)
- get_tangent()#
get an estimate of the tangent at each image along the elastic band
Note
Two ways to estimation:
1) Graeme Henkelman, et al. OURNAL OF CHEMICAL PHYSICS VOLUME 113, NUMBER 22 8 DECEMBER 2000
2) Graeme Henkelman and H Jonsson , JOURNAL OF CHEMICAL PHYSICS VOLUME 113, NUMBER 22 8 DECEMBER 2000; note: improved estimate needs energy of each image present in position variable
- Parameters
energy (array) – array of energies (DFT or some other energy calculator) of length equal to the number of images in the elastic band (also need position and force —> from self.position, self.force)
- Returns
tangent – array of rank 3 with shape (n_images, natoms, 3); tangent array at each inbetween images to get perpendicular and parallel component of true/dft forces and spring forces Note: first and last tangents are kept zero and never used!!
- Return type
array
esta.transitionState.optimizer module#
Optimizer routines to update the atomic posiitons.
- esta.transitionState.optimizer.bfgs_line(pos, posold, force, forceold, dstep, maxstep, img)#
Optimizer: Broyden-Fletcher-Goldfarb-Shanno (BFGS) :param pos: atomic positions in the current step :type pos: float :param posold: atomic positions in the previous step :type posold: float :param force: force acting on each atoms in the current step :type force: float :param forceold: force acting on each atoms in the previous step :type forceold: float :param dstep: step size :type dstep: float :param maxstep: allowed maximum step size :type maxstep: float :param img: image index :type img: int
- Returns
updated atomic positions
- Return type
float
- esta.transitionState.optimizer.conjugate_gradient(pos, force, force_old, maxstep, img)#
Optimizer: Conjugate Gradient (CG) It alternatively follows the direction of force and conjugate direction of force. :param pos: atomic positions in the current step :type pos: float :param force: force acting on each atoms in the current step :type force: float :param force_old: force acting on each atoms in the previous step :type force_old: float :param maxstep: allowed maximum step size :type maxstep: float :param img: image index :type img: int
- Returns
updated atomic positions
- Return type
float
- esta.transitionState.optimizer.quick_min(pos, posold, force, dstep, maxstep)#
Optimizer: Quick-Min (QM) :param pos: atomic positions in the current step :type pos: float :param posold: atomic positions in the previous step :type posold: float :param force: force acting on each atoms in the current step :type force: float :param dstep: step size :type dstep: float :param maxstep: allowed maximum step size :type maxstep: float
- Returns
updated atomic positions
- Return type
float
- esta.transitionState.optimizer.steepest_descent(pos, force, dstep)#
Optimizer: Steepest Descent (SD) :param pos: atomic positions in the current step :type pos: float :param force: force acting on each atoms in the current step :type force: float :param dstep: step size :type dstep: float
- Returns
updated atomic positions
- Return type
float
esta.transitionState.potential_2D module#
calculate the potential energy on 2D surface using the following potential energy function: v(x,y) = Ax cos(2pix) + Ay sin(2piy)
x –> 0 to 4 y –> -2 to 2
- esta.transitionState.potential_2D.get_potential_energy()#
v(x,y) = Ax cos(2pix) + Ay sin(2piy)