Image dependent pair potential#

class autode.neb.idpp.IDPP(images: Images)#

Image dependent pair potential (IDPP) objective function from https://arxiv.org/pdf/1406.1512.pdf

\[S = Σ_i Σ_{j>i} w(r_{ij}) (r_{ij}^{(k)} - r_{ij})^2\]

where \(r_{ij}\) is the distance between atoms i and j and \(r_{ij}^{(k)} = r_{ij}^{(1)} + k(r_{ij}^{(N)} - r_{ij}^{(1)})/N\) for \(N\) images. The weight function is \(w(r_{ij}) = r_{ij}^{-4}\), as suggested in the paper.

__call__(image: Image) PotentialEnergy#

Value of the IDPP objective function for a single image defined by,

\[S_k = 0.5 Σ_i Σ_{j \ne i} w(r_{ij}) (r_{ij}^{(k)} - r_{ij})^2\]

where \(i\) and \(j\) enumerate over atoms for an image indexed by \(k\).

Returns:

\(S_k\)

Return type:

(float)

__init__(images: Images)#

Initialise a IDPP potential from a set of NEB images

_set_distance_matrices(images: Images) None#

For each image determine the optimum distance matrix using

\[r_{ij}^{(k)} = r_{ij}^{(1)} + k (r_{ij}^{(N)} - r_{ij}^{(1)}) / N\]

and set the the diagonal indices of each distance matrix.

grad(image: Image) ndarray#

Gradient of the potential with respect to displacement of the Cartesian components: \(\nabla S = (dS/dx_0, dS/dy_0, dS/dz_0, dS/dx_1, ...)\) where the numbers denote different atoms. For example,

\[\frac{dS}{dx_0} = -2 \sum_{i \ne j} \left[2(c-r_{ij})r_{ij}^{-6} + w(r_{ij})r_{ij}^{-1}) \right](c - r_{ij})(x_0 - x_j)\]

where \(c = r_{ij}^{(k)}\).

Returns:

\(\nabla S\)

Return type:

(np.ndarray)