Explanation#

Two seams#

rgsaddle does not implement an optimizer. rgmin does. This crate assembles a force (NEB band or inverted lowest mode) and asks rgmin::Solver for one step. Hosts interleave trust regions, drift budgets, acquisition, or a hybrid MMF between steps.

That is why run is documented as a convenience loop over step and nothing more.

eOn branch structure#

Tangents, springs, projections, and the climbing-image force follow eOn’s NEBTangent / NEBSpringForce / NEBForceProjection with the same branches. The climbing image arms when the convergence force falls under factor * baseline or under an absolute trigger.

Periodicity#

Positions stay unwrapped Cartesian. Cell wraps per-atom differences for the band mechanics on an orthorhombic box. Neighbor lists, when a surface wants them, are vesin’s job.

FIRE as the default#

The projected NEB force is not a gradient of a potential. rgmin’s session L-BFGS still applies an energy-decrease acceptance on that path, so every NEB step is refused. FIRE steps unconditionally, which is what eOn’s velocity NEB stepper does. Hosts that want L-BFGS set BandConfig.method and own the acceptance gap.