--- myst: html_meta: "description": "Guide to the ARTn (Activation-Relaxation Technique nouveau) saddle search method in eOn." "keywords": "eOn ARTn, pARTn, activation relaxation, saddle point search, min-mode following" --- # ARTn (Activation-Relaxation Technique nouveau) ```{versionadded} 2.13 ``` The Activation-Relaxation Technique nouveau (ARTn) {cite:t}`artn-barkemaEventBasedRelaxationAtomistic1996,artn-maasMousseau2005` is a saddle point search method that uses an explicit push phase followed by Lanczos eigenvalue computation and perpendicular relaxation. It is implemented via the [pARTn](https://gitlab.com/mammasmias/artn-plugin) Fortran library. ## How ARTn differs from Dimer/Lanczos Unlike the [dimer](project:dimer.md) and [Lanczos](project:lanczos.md) methods, which follow the lowest eigenmode from a given starting point, ARTn actively *pushes* the system away from a local minimum before searching for the saddle: 1. **Push phase**: displace atoms away from the minimum by `push_step_size` 2. **Lanczos phase**: compute the lowest eigenvalue via internal Lanczos 3. **Perpendicular relaxation**: FIRE relaxation orthogonal to the push direction 4. **Convergence check**: iterate until force threshold is met or saddle found This push-based exploration can find saddles that gradient-following methods miss, making ARTn complementary to Dimer/Lanczos rather than a replacement. ## Force call costs Each ARTn step (one call to `artn_step`) requires exactly 1 external force evaluation. However, ARTn typically needs more total steps than Lanczos because of the push and perpendicular relaxation overhead. Illustrative benchmark on LJ38 TS optimization (100 near-saddle structures, OptBench): | Method | Avg force calls | Median | Failed/100 | |---------|-----------------|--------|------------| | Lanczos | 238 | 178 | 0 | | ARTn | 426 | 269 | 10 | | Dimer | 523 | 359 | 0 | On this benchmark ARTn is faster than Dimer when it converges but less robust on non-periodic clusters (10% failure rate from the push phase causing "box explosion" on systems without periodic boundary conditions). Treat these numbers as workload-specific rather than universal performance guarantees; for periodic bulk and surface systems, which are ARTn's design target, the failure rate is expected to be lower. ## Usage ARTn requires the `artn-plugin` Fortran subproject source to be available under `subprojects/` (for example via `meson subprojects download artn-plugin`). When present, eOn builds it via CMake at configure time as a workaround for Meson's current Fortran submodule scanner limitations. ARTn can be used in two ways: **As a standalone method** (``method = artn``): ARTn starts directly from ``pos.con`` and handles its own push, internal Lanczos eigenmode estimation, and perpendicular relaxation (FIRE). ``displacement.con`` is ignored in this mode, and an optional initial mode from ``direction.dat`` biases the push direction when present. ```{code-block} ini [Saddle Search] method = artn [ARTn] push_step_size = 0.3 force_threshold = 0.05 max_iterations = 500 ``` **As a min-mode drop-in** (``min_mode_method = artn``): eOn's displacement and epicenter logic seeds the initial structure and mode, then ARTn takes over from the displaced configuration. This is useful when eOn's displacement strategy (e.g. least-coordinated weighting) should control where the search starts. ```{code-block} ini [Saddle Search] method = min_mode min_mode_method = artn [ARTn] push_step_size = 0.3 force_threshold = 0.05 max_iterations = 500 ``` ### Parameters - **`push_step_size`**: Step size (Angstrom) for the initial push away from the minimum. Maps to pARTn's ``push_step_size``. Larger values explore further but risk instability on clusters. - **`force_threshold`**: Force convergence criterion (eV/Angstrom). Maps to pARTn's ``forc_thr``. - **`max_iterations`**: Maximum number of ARTn steps. - **`ninit`**: Number of initial push steps before Lanczos eigenmode estimation. Default ``-1`` keeps pARTn's own default. Set ``0`` to skip the push and go directly to Lanczos (appropriate when eOn supplies the displacement); larger values let ARTn explore further from the minimum before engaging Lanczos. Maps to pARTn's ``ninit``. - **`nperp_limitation`**: Comma-separated integers controlling the maximum number of perpendicular relaxation steps per Lanczos cycle. ``default`` uses pARTn defaults (tuned for exploration from a minimum). ``-1`` for unlimited perp-relax (smooth potentials in refinement). ``20,30`` limits steps (recommended for corrugated/ML potentials). Maps to pARTn's ``nperp_limitation``. - **`lanczos_min_size`**: Minimum Lanczos iterations before convergence check. Default ``-1`` uses pARTn default (3). Set to ``1`` for refinement near a known saddle. Maps to pARTn's ``lanczos_min_size``. - **`nsmooth`**: Number of smooth interpolation steps between push direction and eigenvector. ``-1`` uses pARTn default. ``0`` disables smoothing. Maps to pARTn's ``nsmooth``. ## Build requirements ARTn requires a Fortran compiler and LAPACK. Download the subproject first, then let eOn build it automatically at configure time: ```{code-block} shell meson subprojects download artn-plugin meson setup builddir -Dwith_artn=true ``` Or with a prebuilt library: ```{code-block} shell meson setup builddir -Dwith_artn=true \ -Dartn_libdir=/path/to/lib -Dartn_includedir=/path/to/include ``` ## Comparison with kart The [kart](https://gitlab.com/groupe_mousseau/kart) kinetic ART code also integrates pARTn, but differently: kart calls the Fortran API directly and embeds LAMMPS force computation inside the ARTn loop. eOn uses only the C API (`artn.h`) and treats ARTn as a black-box step function, keeping the potential abstraction layer intact. This means eOn's ARTn works with any potential backend (LJ, EAM, LAMMPS, XTB, metatomic, etc.) without modification. ## References ```{bibliography} --- style: alpha filter: docname in docnames labelprefix: ARTN_ keyprefix: artn- --- ```