mod hypersphere

module hypersphere

Thomson covering of (S^{d-1}).

Plasencia Gutiérrez, M.; Argáez, C.; Jónsson, H. Improved Minimum Mode Following Method for Finding First Order Saddle Points. J. Chem. Theory Comput. 2017, 13 (1), 125-134. <https://doi.org/10.1021/acs.jctc.5b01216> Even covering of the unit hypersphere for saddle-search starts.

Plasencia Gutiérrez, M.; Argáez, C.; Jónsson, H. Improved Minimum Mode Following Method for Finding First Order Saddle Points. J. Chem. Theory Comput. 2017, 13 (1), 125-134. <https://doi.org/10.1021/acs.jctc.5b01216> (ookcite: ACS bibliography; IEEE: vol. 13, no. 1, pp. 125-134, Jan. 2017). Optbench / SoftSaddle heptamer. Instead of Gaussian displacements, starting points lie on (S^{d-1}) and a Thomson-like repulsion (sum_{ineq j} 1/gamma_{ij}^{s}) with geodesic (gamma=arccos(mathbf{v}_icdotmathbf{v}_j)) and (s=1) spaces them. SoftSaddle triangulation_hight_v2 is the Gauss-Seidel update (a starts at 1, clamp to 0.2, no grow; close pairs dropped not aborted; dE signed). sort_initial_disp orders by Euclidean diameter then max-sum distance. Occupancy ArchiveHole takes one covering direction per extra, placed at the existing all-atom RMSD cap with mobile COM removed: that placement is the occupancy cap, not SoftSaddle V*R on a mobile block. The paper’s adaptive radius (grow (R) from the (lambda=0) crossing when the batch success rate drops) is not used on the covering itself. Occupancy Leave then climbs that start with ART / SoftSaddle MMF (crate::methods::activation) and quenches past the saddle.

Variables

const COVER_ETOL: f64

Relative energy change that ends the Gauss–Seidel sweep.

const COVER_NITR: usize

SoftSaddle default iteration cap (Nitr = 2E3).

const COVER_S: f64

Repulsion exponent (s) in (1/gamma^{s}). SoftSaddle uses 1.

Functions

fn all_atom_rmsd(left: &[f64], right: &[f64]) -> f64

All-atom RMSD between left and right.

fn cover_direction(n: usize, dim: usize, index: usize) -> Vec<f64>

Direction index of the shared covering, wrapping.

fn cover_points<R: rand::Rng + ?Sized>(n: usize, dim: usize, max_iter: usize, rng: &mut R) -> Vec<Vec<f64>>

Unit vectors of length dim, Thomson-spaced on (S^{d-1}).

fn default_cover_size() -> usize

Covering size: two directions per wave replica so a later Leave of the same extra is not the same point. CATALOG_WAVE when set.

fn farthest_order(points: &[Vec<f64>]) -> Vec<usize>

SoftSaddle sort_initial_disp: start at the Euclidean diameter pair, then each next point maximises the sum of Euclidean distances to those already chosen.

fn min_geodesic(points: &[Vec<f64>]) -> f64

Smallest pairwise geodesic on the covering.

fn place_around(min: &[f64], direction: &[f64], rmsd: f64, mobile: Option<&[usize]>) -> Vec<f64>

Place min + radius * direction at all-atom RMSD rmsd. Translation of the mobile set is removed so a covering direction is not a COM hop. Frozen atoms stay at min.

fn shared_cover(n: usize, dim: usize) -> Arc<Vec<Vec<f64>>>

Shared covering for (n, dim), farthest-point ordered.