Nudged Elastic Band#
The nudged elastic band (NEB) is a method for finding saddle points and minimum energy paths between known reactants and products. The method works by optimizing a number of intermediate images along the reaction path. Each image finds the lowest energy possible while maintaining equal spacing to neighboring images. This constrained optimization is done by adding spring forces along the band between images and by projecting out the component of the force due to the potential perpendicular to the band.
Details may be found in Jonsson et al. [NEB_JMJ98], Sheppard and Henkelman [NEB_SH11], and Ásgeirsson and Jónsson [NEB_AsgeirssonJonsson18].
In order to run a nudged elastic band calculation, set job to nudged_elastic_band in the [Main] section. Details of the optimizer can be set as per the Optimizer document.
Variants#
Classic nudged elastic band of Mills and Jónsson [NEB_MJonsson94] and Schenter et al. [NEB_SMJonsson94].
Improved tangent method of Henkelman and Jónsson [NEB_HJonsson00].
Climbing image NEB of Henkelman et al. [NEB_HUJonsson00].
Doubly nudged method of Trygubenko and Wales [NEB_TW04].
Added in version 2.0:
The energy weighted varying springs method of Ásgeirsson et al. [NEB_AsgeirssonBB+21].
Note
eOn, like many other codes after Sheppard et al. [NEB_STH08] uses one optimizer instance for moving the whole band of images.
Added in version 2.8: Via the surrogate potential interface, a native C++ implementation of the Gaussian Process accelerated NEB first described in Koistinen et al. [NEB_KDagbjartsdottirAsgeirsson+17] and Koistinen et al. [NEB_KAsgeirssonVJonsson19].
Configuration#
[Nudged Elastic Band]
Changed in version 3.1_TBA: In TOML, this will be [NEB]
- pydantic model eon.schema.NudgedElasticBandConfig[source]#
Show JSON schema
{ "title": "NudgedElasticBandConfig", "type": "object", "properties": { "images": { "default": 5, "description": "Number of NEB images between the fixed endpoints.", "title": "Images", "type": "integer" }, "spring": { "default": 5.0, "description": "The spring constant, in eV/Ang^2 between the images.", "title": "Spring", "type": "number" }, "climbing_image_method": { "default": true, "description": "Indicates if the climbing image method is used.", "title": "Climbing Image Method", "type": "boolean" }, "old_tangent": { "default": false, "description": "Indicates if the old tangent method is used.", "title": "Old Tangent", "type": "boolean" }, "neb_max_iterations": { "default": 1000, "description": "Maximum number of iterations allowed for the NEB.", "title": "Neb Max Iterations", "type": "integer" }, "neb_climbing_image_converged_only": { "default": true, "description": "Indicates if only the climbing image converged is used.", "title": "Neb Climbing Image Converged Only", "type": "boolean" }, "neb_doubly_nudged": { "default": false, "description": "Indicates if the doubly nudged method is used.", "title": "Neb Doubly Nudged", "type": "boolean" }, "neb_doubly_nudged_switching": { "default": false, "description": "Indicates if the doubly nudged switching method is used.", "title": "Neb Doubly Nudged Switching", "type": "boolean" }, "neb_elastic_band": { "default": false, "description": "Indicates if the elastic band method is used.", "title": "Neb Elastic Band", "type": "boolean" }, "converged_force": { "default": 0.01, "description": "Converged force threshold for the NEB.", "title": "Converged Force", "type": "number" }, "onsager_machlup": { "default": false, "description": "Indicates if the Onsager-Machlup (OM) Action is used.", "title": "Onsager Machlup", "type": "boolean" }, "om_optimize_k": { "default": true, "description": "Indicates if the Onsager-Machlup (OM) Action spacing is recalculated at each step.", "title": "Om Optimize K", "type": "boolean" }, "om_k_scale": { "default": 1.0, "description": "Indicates stiffness of OM adaption of springs.", "title": "Om K Scale", "type": "number" }, "om_k_min": { "default": 0.1, "description": "Minimum stiffness.", "title": "Om K Min", "type": "number" }, "om_k_max": { "default": 100, "description": "Minimum stiffness.", "title": "Om K Max", "type": "number" }, "energy_weighted": { "default": false, "description": "Indicates if the energy-weighted method is used.", "title": "Energy Weighted", "type": "boolean" }, "ew_trigger": { "default": 10.0, "description": "Threshold for the energy-weighted method.", "title": "Ew Trigger", "type": "number" }, "ew_ksp_min": { "default": 0.972, "description": "Minimum value for KSP in the energy-weighted method.", "title": "Ew Ksp Min", "type": "number" }, "ew_ksp_max": { "default": 9.72, "description": "Maximum value for KSP in the energy-weighted method.", "title": "Ew Ksp Max", "type": "number" }, "initial_path_in": { "default": "", "description": "File from which the initial path is read.", "title": "Initial Path In", "type": "string" }, "initializer": { "default": "linear", "description": "Initialization strategy.", "enum": [ "linear", "idpp", "idpp_collective", "sidpp", "file" ], "title": "Initializer", "type": "string" }, "init_max_iterations": { "default": 5000, "description": "Steps to run the IDPP for.", "title": "Init Max Iterations", "type": "integer" }, "init_max_move": { "default": 0.1, "description": "Max move for NEB initialization.", "title": "Init Max Move", "type": "number" }, "init_force_threshold": { "default": 0.001, "description": "Force threshold for NEB IDPP initialization.", "title": "Init Force Threshold", "type": "number" }, "sidpp_growth_alpha": { "default": 0.33, "description": "The step size for adding new images in S-IDPP.", "title": "Sidpp Growth Alpha", "type": "number" }, "minimize_endpoints": { "default": true, "description": "Minimize the reactant and product before the NEB.", "title": "Minimize Endpoints", "type": "boolean" }, "minimize_endpoints_for_ipath": { "default": false, "description": "Minimize the reactant and product before the NEB, even if an initial path is provided.", "title": "Minimize Endpoints For Ipath", "type": "boolean" }, "ci_after": { "default": Infinity, "description": "Convergence before the CI is turned on.", "title": "Ci After", "type": "number" }, "ci_mmf": { "default": false, "description": "Use an MMF method for the CI.", "title": "Ci Mmf", "type": "boolean" }, "ci_mmf_after": { "default": 0.5, "description": "Convergence before the CI is turned on.", "title": "Ci Mmf After", "type": "number" }, "ci_mmf_nsteps": { "default": 10, "description": "Number of steps for which the MMF is run at the CI image.", "title": "Ci Mmf Nsteps", "type": "integer" }, "ci_mmf_ci_stability_count": { "default": 5, "description": "Number of stable iterations before settling on a CI image index.", "title": "Ci Mmf Ci Stability Count", "type": "integer" }, "ci_mmf_angle": { "default": 0.8, "description": "Alignment threshold w.r.t NEB mode.", "title": "Ci Mmf Angle", "type": "number" }, "ci_mmf_penalty_base": { "default": 0.1, "description": "Baseline for losing mode.", "title": "Ci Mmf Penalty Base", "type": "number" }, "ci_mmf_penalty_strength": { "default": 0.5, "description": "Multiplier for losing mode.", "title": "Ci Mmf Penalty Strength", "type": "number" }, "setup_mmf_peaks": { "default": true, "description": "Generate modes and peak configurations.", "title": "Setup Mmf Peaks", "type": "boolean" }, "mmf_peak_tolerance": { "default": 0.05, "description": "Generate modes and peak configurations.", "title": "Mmf Peak Tolerance", "type": "number" } } }
- Config:
use_attribute_docstrings: bool = True
- Fields:
- field ci_mmf_ci_stability_count: int = 5#
Number of stable iterations before settling on a CI image index.
- field climbing_image_method: bool = True#
As discussed in Henkelman et al. [NEB_HUJonsson00].
Indicates if the climbing image method is used.
- field converged_force: float = 0.01#
This defaults to being the same as
eon.schema.OptimizerConfig.converged_forceConverged force threshold for the NEB.
- field energy_weighted: bool = False#
Method as demonstrated in Ásgeirsson et al. [NEB_AsgeirssonBB+21].
Indicates if the energy-weighted method is used.
- field initial_path_in: str = ''#
This file must contain a list of .con files, one per image on the path.
File from which the initial path is read.
- field initializer: Literal['linear', 'idpp', 'idpp_collective', 'sidpp', 'file'] = 'linear'#
Options: -
linear: Euclidean distance based image interpolation for initial NEB paths. -idpp: Image depedent pair potential initialzation Smidstrup et al. [NEB_SPSJonsson14]. -idpp_collective: IDPP as a potential initialized with the NEB. -sidpp: Sequential Image depedent pair potential initialzation Schmerwitz et al. [NEB_SAsgeirssonJonsson24]. -file: Start from an arbitrary path, needs initial_path_in set as well.Initialization strategy.
- field minimize_endpoints_for_ipath: bool = False#
Minimize the reactant and product before the NEB, even if an initial path is provided.
- field neb_climbing_image_converged_only: bool = True#
Indicates if only the climbing image converged is used.
- field neb_doubly_nudged_switching: bool = False#
Method as demonstrated in Trygubenko and Wales [NEB_TW04].
Indicates if the doubly nudged switching method is used.
- field old_tangent: bool = False#
From Mills and Jónsson [NEB_MJonsson94], before Henkelman and Jónsson [NEB_HJonsson00].
Indicates if the old tangent method is used.
- field om_k_scale: float = 1.0#
Stiffness: - > 1 (stiff) provides a smoother path but may “cut corners” near the saddle - < 1 (softer) hugs valleys but paths may become jagged/noisy
Indicates stiffness of OM adaption of springs.
- field om_optimize_k: bool = True#
Indicates if the Onsager-Machlup (OM) Action spacing is recalculated at each step.
Refinement#
Added in version 2.0.
Far from the minimum energy path, second order optimizers like those using the
LBFGS may not be optimal. In these situations, to traverse uninteresting
sections of the potential energy surface rapidly, it is best to use an
accelerating optimizer like QuickMin to begin with and transition to LBFGS
later. To facilitate this, the [Refine] section has been introduced.
- pydantic model eon.schema.RefineConfig[source]#
Show JSON schema
{ "title": "RefineConfig", "type": "object", "properties": { "refine_opt_method": { "default": "none", "description": "The optimization method to use for refinement.", "enum": [ "none", "cg", "lbfgs", "fire", "box", "qm" ], "title": "Refine Opt Method", "type": "string" }, "refine_threshold": { "default": 0.5, "description": "Threshold for refinement optimization.", "title": "Refine Threshold", "type": "number" } } }
- Config:
use_attribute_docstrings: bool = True
- Fields:
- field refine_opt_method: Literal['none', 'cg', 'lbfgs', 'fire', 'box', 'qm'] = 'none'#
- Options:
none: No refinement optimizationcg: Conjugate gradientlbfgs: Limited Memory Broyden-Fletcher-Goldfarb-Shanno QuasiNewton optimizerfire: Fast inertial relaxation enginebox: Optimizes the atom positions and box using quickminqm: Quickmin
The optimization method to use for refinement.
References#
Graeme Henkelman and Hannes Jónsson. Improved tangent estimate in the nudged elastic band method for finding minimum energy paths and saddle points. The Journal of Chemical Physics, 113(22):9978–9985, December 2000. doi:10.1063/1.1323224.
Graeme Henkelman, Blas P. Uberuaga, and Hannes Jónsson. A climbing image nudged elastic band method for finding saddle points and minimum energy paths. The Journal of Chemical Physics, 113(22):9901–9904, November 2000. doi:10.1063/1.1329672.
Hannes Jonsson, Greg Mills, and Karsten W. Jacobsen. Nudged elastic band method for finding minimum energy paths of transitions. In Classical and Quantum Dynamics in Condensed Phase Simulations, pages 385–404. World Scientific, June 1998. doi:10.1142/9789812839664_0016.
Olli-Pekka Koistinen, Freyja B. Dagbjartsdóttir, Vilhjálmur Ásgeirsson, Aki Vehtari, and Hannes Jónsson. Nudged elastic band calculations accelerated with Gaussian process regression. The Journal of Chemical Physics, 147(15):152720, September 2017. doi:10.1063/1.4986787.
Olli-Pekka Koistinen, Vilhjálmur Ásgeirsson, Aki Vehtari, and Hannes Jónsson. Nudged Elastic Band Calculations Accelerated with Gaussian Process Regression Based on Inverse Interatomic Distances. Journal of Chemical Theory and Computation, 15(12):6738–6751, December 2019. doi:10.1021/acs.jctc.9b00692.
D. Mandelli and M. Parrinello. A modified nudged elastic band algorithm with adaptive spring lengths. Journal of Chemical Physics, 155(7):74103, August 2021. doi:10.1063/5.0059593.
Greg Mills and Hannes Jónsson. Quantum and thermal effects in H 2 dissociative adsorption: Evaluation of free energy barriers in multidimensional quantum systems. Physical Review Letters, 72(7):1124–1127, February 1994. doi:10.1103/PhysRevLett.72.1124.
Gregory K. Schenter, Gregory Mills, and Hannes Jónsson. Reversible work based quantum transition state theory. The Journal of Chemical Physics, 101(10):8964–8971, November 1994. doi:10.1063/1.468447.
Yorick L. A. Schmerwitz, Vilhjálmur Ásgeirsson, and Hannes Jónsson. Improved Initialization of Optimal Path Calculations Using Sequential Traversal over the Image-Dependent Pair Potential Surface. Journal of Chemical Theory and Computation, 20(1):155–163, January 2024. doi:10.1021/acs.jctc.3c01111.
Daniel Sheppard and Graeme Henkelman. Paths to which the nudged elastic band converges. Journal of Computational Chemistry, 32(8):1769–1771, 2011. doi:10.1002/jcc.21748.
Daniel Sheppard, Rye Terrell, and Graeme Henkelman. Optimization methods for finding minimum energy paths. The Journal of Chemical Physics, 128(13):134106, April 2008. doi:10.1063/1.2841941.
Søren Smidstrup, Andreas Pedersen, Kurt Stokbro, and Hannes Jónsson. Improved initial guess for minimum energy path calculations. The Journal of Chemical Physics, 140(21):214106, June 2014. doi:10.1063/1.4878664.
Semen A. Trygubenko and David J. Wales. A doubly nudged elastic band method for finding transition states. The Journal of Chemical Physics, 120(5):2082–2094, February 2004. doi:10.1063/1.1636455.
Vilhjálmur Ásgeirsson, Benedikt Orri Birgisson, Ragnar Bjornsson, Ute Becker, Frank Neese, Christoph Riplinger, and Hannes Jónsson. Nudged Elastic Band Method for Molecular Reactions Using Energy-Weighted Springs Combined with Eigenvector Following. Journal of Chemical Theory and Computation, 17(8):4929–4945, August 2021. doi:10.1021/acs.jctc.1c00462.
Vilhjálmur Ásgeirsson and Hannes Jónsson. Exploring Potential Energy Surfaces with Saddle Point Searches. In Wanda Andreoni and Sidney Yip, editors, Handbook of Materials Modeling, pages 1–26. Springer International Publishing, Cham, 2018. doi:10.1007/978-3-319-42913-7_28-1.