Note

TransitionState package: Transition state finding using NEB and CI-NEB method for chemical reactions and diffusion processes.

esta.transitionState package#

Submodules#

esta.transitionState.associated_legendre module#

esta.transitionState.associated_legendre.test()#

esta.transitionState.neb module#

finding the transition state using Neb class given initial and final atomic structures using

  1. normal NEB.

  2. Climbing NEB.

  3. 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)

Module contents#