---
myst:
html_meta:
"description": "Guide to the Nudged Elastic Band (NEB) method in eOn for finding saddle points and minimum energy paths between known reactants and products."
"keywords": "eOn NEB, Nudged Elastic Band, minimum energy path, saddle point, climbing image"
---
# 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 {cite:t}`neb-jonssonNudgedElasticBand1998`,
{cite:t}`neb-sheppardPathsWhichNudged2011`, and
{cite:t}`neb-asgeirssonExploringPotentialEnergy2018`.
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 document.
```{tip}
For a step-by-step walkthrough contrasting ASE's NEB with eOn's advanced
features (energy-weighted springs, dimer refinement), see the
[atomistic-cookbook tutorial](https://atomistic-cookbook.org/examples/eon-pet-neb/eon-pet-neb.html)
on oxadiazole formation with a PET-MAD metatomic potential.
```
## Variants
- Classic nudged elastic band of {cite:t}`neb-millsQuantumThermalEffects1994` and {cite:t}`neb-schenterReversibleWorkBased1994`.
- Improved tangent method of {cite:t}`neb-henkelmanImprovedTangentEstimate2000`.
- Climbing image NEB of {cite:t}`neb-henkelmanClimbingImageNudged2000`.
- Doubly nudged method of {cite:t}`neb-trygubenkoDoublyNudgedElastic2004`.
```{versionadded} 2.0
- The energy weighted varying springs method of {cite:t}`neb-asgeirssonNudgedElasticBand2021`.
```
```{note}
`eOn`, like many other codes after {cite:t}`neb-sheppardOptimizationMethodsFinding2008` uses one optimizer instance for moving the whole band of images.
```
```{versionadded} 2.8
Via the surrogate potential interface, a native C++ implementation of the Gaussian Process accelerated NEB first described in {cite:t}`neb-koistinenNudgedElasticBand2017` and {cite:t}`neb-koistinenNudgedElasticBand2019`.
```
```{versionadded} 2.12
- Onsager-Machlup action-based NEB for minimum action paths.
- OCINEB (Off-Path Climbing Image NEB) {cite:t}`neb-goswamiEnhancedClimbingImage2026`: hybrid CI-NEB + Min-Mode Following with hessian eigenmode alignment for automated saddle point refinement.
- Parallel image force evaluation (requires TBB, `-Dwith_parallel_neb=true`).
- IDPP (Image Dependent Pair Potential) path initialization.
- Modular strategy pattern for tangent, projection, and spring force components.
```
### Onsager-Machlup NEB
The Onsager-Machlup variant replaces the standard spring force with an
action-based spring that adapts per-image based on the local force magnitude.
Enable with `onsager_machlup = true` in the NEB section.
### OCINEB (hybrid dimer refinement)
OCINEB {cite:t}`neb-goswamiEnhancedClimbingImage2026` activates a Min-Mode
Following (dimer) search on the climbing image after it stabilizes, using
hessian eigenmode alignment to refine the saddle point to higher accuracy
without additional NEB iterations. Enable with `ci_mmf = true`.
### Parallel evaluation
When compiled with TBB support (`-Dwith_parallel_neb=true`), image forces are
evaluated in parallel. Python-based potentials automatically fall back to serial
evaluation.
## Configuration
The NEB section can be specified in `config.ini`:
```{code-block} ini
[Nudged Elastic Band]
images = 7
converged_force = 0.01
climbing_image_method = true
```
Or programmatically via [rgpycrumbs](https://rgpycrumbs.rgoswami.me):
```python
from rgpycrumbs.eon.helpers import write_eon_config
config = {
"Main": {"job": "nudged_elastic_band"},
"Nudged Elastic Band": {
"images": 7,
"converged_force": 0.01,
"climbing_image_method": True,
},
}
write_eon_config(config, Path("config.ini"))
```
See {doc}`/tutorials/dict_config` for the full programmatic workflow.
```{code-block} ini
[Nudged Elastic Band]
```
```{eval-rst}
.. autopydantic_model:: eon.schema.NudgedElasticBandConfig
```
## Outputs
NEB writes the usual `results.dat`, `neb.dat`, and the final band `neb.con`.
With `write_movies = true` in `[Debug]`, eOn also writes per-iteration
`neb_path_*.con` movie files and `neb_maximage.con`. These `.con` outputs now
embed structured frame metadata via `readcon-core`, including fields such as
`energy`, `frame_index`, `neb_bead`, optional `neb_band`,
`reaction_coordinate`, `relative_energy`, and `parallel_force`.
The existing `neb.dat` and `neb_*.dat` outputs are still written and remain the
primary compatibility path for current plotting tools.
## Refinement
```{versionadded} 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.
```{eval-rst}
.. autopydantic_model:: eon.schema.RefineConfig
```
## References
```{bibliography}
---
style: alpha
filter: docname in docnames
labelprefix: NEB_
keyprefix: neb-
---
```