---
myst:
html_meta:
"description": "Detailed release notes for eOn v2.13.0: ARTn and IRA Fortran subprojects, OCINEB min-mode refinement, NEB strategy decomposition, Highway SIMD, and parallel image evaluation."
"keywords": "eOn release notes, ARTn, pARTn, IRA, OCINEB, NEB strategy, Highway SIMD, std::thread"
---
# Release notes
## [v2.13.0] - 2026-XX-XX
See the [CHANGELOG](project:../changelog.md) for the full fragment-by-fragment
list; this page picks out the user-facing highlights.
### Saddle search
#### ARTn via pARTn
Added ARTn as a saddle-search method through the `artn-plugin` Fortran
library, exposed in two complementary modalities:
- **Standalone** (`method = artn`): pARTn drives the full push +
eigenmode + perpendicular-relaxation cycle starting from the minimum.
`displacement.con` is ignored; an optional initial mode from
`direction.dat` biases the push.
- **Drop-in min-mode** (`min_mode_method = artn`): eOn's displacement
and epicenter logic seeds the initial structure and mode, then pARTn
takes over from the displaced configuration.
Configurable through the `[ARTn]` INI section with `push_step_size`,
`force_threshold`, `max_iterations`, and the pARTn tuning knobs
`ninit`, `nperp_limitation`, `lanczos_min_size`, `nsmooth`, and
`nnewchance`. Integer knobs with a `-1` default respect pARTn's own
upstream default; explicit values are forwarded via `set_param`.
Requires `-Dwith_artn=true` at build time. The subproject tracks
`mammasmias/artn-plugin` directly.
See the [ARTn user guide](project:../../user_guide/artn.md) for
details.
#### OCINEB hybrid (recommended)
OCINEB (Off-Path Climbing Image NEB) runs Min-Mode Following refinement
on the climbing image with Hessian eigenmode alignment, activated via
`ci_mmf = true`. For automated saddle-point refinement in production
workflows this is the recommended path. See Goswami, Gunde, Jónsson,
*Enhanced Climbing Image Nudged Elastic Band Method with Hessian
Eigenmode Alignment*, 2026,
[arXiv:2601.12630](https://arxiv.org/abs/2601.12630)
({cite:t}`neb-goswamiEnhancedClimbingImage2026`).
### NEB
#### Strategy-pattern decomposition
`NudgedElasticBand` is decomposed into modular components: tangent,
projection, spring force, OCINEB controller, spline extrema, initial
paths, and objective function. Each component is selectable via
config and covered by its own test suite.
#### Parallel image evaluation
NEB image forces now evaluate concurrently through `std::thread` (not
`std::jthread` -- Apple Clang's libc++ does not yet ship `jthread`).
Opt in via `parallel = true` in `[Main]` when the potential is
thread-safe or supports per-image instances. Achieves ~2.5x speedup
on a 5-image NEB with a Morse potential on the SVN reference setup.
Replaces the TBB-based `std::execution::par` prototype.
#### Initial paths
IDPP (Image Dependent Pair Potential) path initialization is
available via `neb.initial_path.method = idpp`. A collective IDPP
variant optimizes all movable atoms simultaneously. Optional
oversampling + cubic-spline decimation restores IDPP smoothness
after down-sampling.
#### Onsager-Machlup action paths
Minimum-action paths via the Onsager-Machlup action functional are
available with `onsager_machlup = true`. Spring stiffness can be
optimized automatically (`om_optimize_k = true`).
### Dimer
#### Parallel improved dimer
The two dimer replicas in `ImprovedDimer` evaluate forces
concurrently through `std::thread` when the potential is
thread-safe or supports per-image instances. Opt in via
`parallel = true`.
### Structure comparison
#### IRA (Iterative Rotations and Assignments)
`IRACompare` exposes `match()` (CShDA + SVD alignment),
`matchPBC()` (periodic boundary conditions; note this runs
`cshda_pbc` only, assignment without rotation/SVD), and
`findSymmetry()` (SOFI point-group detection). Requires
`-Dwith_ira=true` at build time.
### Infrastructure
#### Highway SIMD subproject
Highway is added as an optional cmake wrap subproject. When
available, `-DWITH_HIGHWAY` is set so future potential kernels can
opt in. Hand-written SIMD kernels for Morse/LJ/EAM pair loops are
staged for a follow-up release; today the main benefit is
compile-time availability of the subproject for downstream
development.
#### Eigen Fortran layout helpers
New `AtomMatrixF` type alias in `Eigen.h` plus
`from_fortran_layout_vector` covers the zero-copy
RowMajor-`(nat, 3)`-to-ColumnMajor-`(3, nat)` interop that both
ARTn and IRA rely on.
#### Upstream artn-plugin
The `artn-plugin` meson subproject now tracks
`mammasmias/artn-plugin` directly. Downstream builds no longer need
to pin the HaoZeke personal fork. The pARTn `get_error` C wrapper
is used for richer diagnostic messages; older libartn builds that
predate the wrapper fall back to `has_error` via `get_data`.
#### Test infrastructure
- `tests/test_one_pt.py` fixtures gain ARTn and IRA coverage.
- Catch2 test binaries `test_artn`, `test_ira` added.
- JSON serialization for Parameters (`load_json`, `to_json`) via
`nlohmann/json`.
### Build requirements
- Fortran compiler and LAPACK for ARTn/IRA.
- pARTn `>= c51217b4` on `mammasmias/artn-plugin:DEVEL` (includes
the `meson dependency('openblas')` CI fix; auto-cloned via
`subprojects/artn-plugin.wrap`).
- Rust `>= 1.88` and `cbindgen` for the existing `readcon-core`
subproject (unchanged from v2.12.0).
### Deprecations and breaking changes
None at the eOn public INI/Python surface. Internally,
`MinModeSaddleSearch` moves from a direct member of
`SaddleSearchJob` to a `SaddleSearchMethod` base-class pointer so
ARTn can share the polymorphism slot.