Release notes

[v2.13.0] - 2026-XX-XX

See the CHANGELOG for the full fragment-by-fragment list; this page picks out the user-facing highlights.

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.