Lanczos

The Lanczos method is a way to find the lowest eigenvalue and eigenvector efficiently without building the whole Hessian matrix. At each iteration, a new direction is added to the searching space by timing the Hessian, H, to the previous direction, v. Hv can be evaluated by finite difference: Hv = F(x0+dR*v) - F(x0), where F is the force and dR is the finite difference step, i.e. the separation distance in the dimer method. After ith iteration, the explored space spanned by \(\{ \rm{v, Hv, H^{2}v, \cdots, H^{i-1}v} \}\), which is the Krylov subspace. The lowest eigenvalue usually converges when i is much less than the dimensionality of the system. 1 2

Usage

The lanczos_atoms is a subclass of SSDimer_atoms, which employs the Lanczos algorithm to find the lowest curvature mode (the rotational part in ssdimer).

class lanczos_atoms(SSDimer_atoms):

rotationOpt: not valid

Example:

from tsase.dimer import lanczos
d = lanczos.lanczos_atoms(p, rotationMax = 10, phi_tol=3, ss = False)
# use quickmin optimizer in ssdimer
d.search(minForce = 0.0001, movie = "dimer2.movie", interval = 20 )
### Or use other first order optimizer in ase.
### Second order optimizers cannot be used when "ss = True".
#dyn = MDMin(d)
#dyn.run(fmax=0.0001)

References

1
  1. Lanczos, “An iteration method for the solution of the eigenvalue problem of linear differential and integral operators”, (United States Government Press Office, 1950).

2
  1. Zeng, P. Xiao, and G. Henkelman, “Unification of algorithms for minimum mode optimization”, J. Chem. Phys. 140, 044115 (2014). DOI