mod featomic_hop¶
- module featomic_hop¶
featomic SOAP power-spectrum leftover hop. Recommended hop in a featomic SOAP power spectrum.
The calculator is featomic
soap_power_spectrum. High-l(l ≥ 5) leftoverp_i − μis a defect patch when some centres stick out of the species mean. On a closed shell that leftover is a core-versus-surface breath: the quench returns the same packing. The packing label is the unit species meanμ(the bank Dcut). When leftover is a shell mode the hop places one point of the Plasencia cover of the displacement sphere. A fivefold residual is the fallback, then a kick ofμ. Occupancy archive holes and packing kicks then ring-lens that Cartesian step: pentagon atoms when the occupied profile has 5-rings, triangle atoms when it does not. Champion leftover SOAP is not that lens. No Marks, fcc, or 421 target.Variables
- const CALCULATOR: &str¶
Calculator name passed to
Calculator::new.
- const LMIN: i32¶
Power-spectrum angular channels kept in the leftover.
- const SOAP_DCUT_FALLBACK: f64¶
Dcutwhen every seed is the same packing.High-
lmean SOAP of LJ75 Mackay vs Marks is 0.163; of a structure to itself is 0. The bank used to fall back tomerge_radius(0.7), which is a length, and 0.163 < 0.7 so Marks was a duplicate of Mackay. This floor sits below the packing gap and above numerical zero, so a one-funnel seed bank still admits the other funnel.
- const SOAP_PACK_ESCAPE: f64¶
Cloud-mean distance a hole step walks before it stops.
Measured on the LJ75 icosahedral fixture, twelve seeds, sweeping this from one to five merge radii: the walk reaches 0.33 to 0.55 in the cloud mean and the quench that follows returns to the same DECAF family every time, at every distance. Distance is not what separates packings here, so there is nothing to buy by walking further, and the extra Cartesian displacement is not free. Occupancy Leave uses this walk as the archive-hole start.
- const SOAP_PACK_GAP: f64¶
Packing-class gap on unit mean SOAP. Ico isomers sit under
SOAP_PACK_MERGE. Mackay vs Marks is 0.163. A bank sample closer than this is the same funnel, not a class another chain opened, and adopting it restamps the walk onto ico.
- const SOAP_PACK_MERGE: f64¶
Merge radius on unit mean SOAP: isomers of one packing, not Marks.
LJ75 ico-isomer high-
lsits below0.4of the ico-Marks gap (0.163). This floor is above that isomer band and below the packing gap, so a well-tempered deposit fills the occupied superbasin and not the other funnel.
Functions
- fn atom_leftover_rms(x: ArrayView1<f64>, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>) -> Array1<f64>¶
Per-atom leftover RMS of the high-
lpower spectrum.
- fn first_that_moves(origin: ArrayView1<f64>, steps: &[Array1<f64>]) -> Array1<f64>¶
First proposal that actually moves, in order.
A closed shell has no leftover direction. The order is one covering displacement, then the fivefold residual, then the ordinary kick.
- fn in_stored_well(x: ArrayView1<f64>, wells: &[Array1<f64>], rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>) -> bool¶
Whether the structure’s leftover-SOAP packing mean sits in a stored well.
- fn leave_archive_hole<R: Rng + ?Sized>(x: ArrayView1<f64>, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>, rmsd: f64, rng: &mut R) -> Array1<f64>¶
Extra ArchiveHole: one SoftSaddle covering direction around the occupied minimum, then the existing RMSD cap.
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). Gaussian kicks reconverge on the same exit; an even covering of (S^{3N-1}) does not. Champion leftover walks isomers of the occupied packing (
step_into_holeof its wells). This start is leftover-orthogonal to that walk: a Cartesian direction from the covering, not a packing-mean (nu=3) increment. Species unused. No named morphology.
- fn leave_archive_hole_at<R: Rng + ?Sized>(x: ArrayView1<f64>, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>, rmsd: f64, cover_index: Option<usize>, rng: &mut R) -> Array1<f64>¶
leave_archive_holeon covering directioncover_index.Nonedraws an index fromrngso a lone call is still a covering point, not a Gaussian. Occupancy extras passreplica + leave_count * waveso the wave does not share one direction.
-
fn leave_occupied_packing<R, Q>(x: ArrayView1<f64>, wells: &[Array1<f64>], rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>, mut quench: Q, rng: &mut R) -> Array1<f64>¶
where
R: Rng + ?Sized,
Q: FnMut(ArrayView1<f64>) -> Array1<f64>
¶ Leave an occupied packing: hole, quench, keep the quench only when the trial chains to no packing on file. Off-well is not a packing change and neither is another isomer. Failed attempts kick mean SOAP off the occupied packing. A dead kick stays at the origin so
crate::catalog::occupancy_leave_adoptRefuse does not install a same-packing hole.This is the leftover-SOAP hole generator, and the hop loop no longer reaches for it on a refused Leave: a hole of the occupied packing quenches into the occupied packing.
crate::known_basin::leave_packing_ladderis the escalation.
- fn leftover_profile_distance(a: ArrayView1<f64>, b: ArrayView1<f64>, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>) -> f64¶
Sorted per-atom leftover-RMS L2. This is the metric that collapsed.
Closed shells share a core-versus-surface leftover magnitude, so Mackay and Marks sit almost on top of each other. Kept so a test can name the failure; the bank must not call this.
- fn leftover_rms(x: ArrayView1<f64>, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>) -> f64¶
RMS of the featomic leftover on the mobile, species-conditioned cloud.
- fn packing_archive() -> Vec<Array1<f64>>¶
Occupied packing means last stored by
set_packing_archive.
- fn set_packing_archive(wells: Vec<Array1<f64>>)¶
Replace the packing archive used by
step_away_featomic.
- fn soap_bank_distance(a: ArrayView1<f64>, b: ArrayView1<f64>, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>) -> f64¶
Distance between two packings in mean SOAP, not leftover RMS.
Leftover RMS is a core-versus-surface magnitude. It is almost the same on every closed shell, so Dcut collapsed to 10^{-3} and the bank treated every Mackay isomer as a new basin. The mean spectrum is the packing.
- fn soap_bank_distance_lmin(a: ArrayView1<f64>, b: ArrayView1<f64>, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>, lmin: i32) -> f64¶
Mean-SOAP L2 with a chosen angular floor.
lmin = 0is the full spectrum; production leftover hops keepLMIN.
- fn soap_cloud_mean(x: ArrayView1<f64>, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>) -> Array1<f64>¶
Species-conditioned mean high-
lSOAP. The packing label.
- fn soap_morphology(x: ArrayView1<f64>, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>) -> Array1<f64>¶
Mean-spectrum morphology the bank acquisition model fits.
- fn step_away_featomic<R: Rng + ?Sized>(x: ArrayView1<f64>, rmsd: f64, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>, rng: &mut R) -> Array1<f64>¶
SOAP hop through featomic
soap_power_spectrum.A local leftover patch when some centres stick out of the species mean. A packing-mean kick when leftover is a closed-shell breath or numerically gone.
- fn step_away_featomic_at<R: Rng + ?Sized>(x: ArrayView1<f64>, rmsd: f64, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>, rng: &mut R) -> Array1<f64>¶
Same hop as
step_away_featomic, atrmsdwith no extra floor.
- fn step_into_hole<R: Rng + ?Sized>(x: ArrayView1<f64>, wells: &[Array1<f64>], soap_step: f64, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>, rng: &mut R) -> Array1<f64>¶
Walk coordinates so the packing mean moves toward a hole in the shared SOAP archive.
J = ∂μ/∂xis already built for the leftover hop. The Cartesian 0.35 cap keepsμinside one packing and the quench is a projector back onto that packing. The step size here is in SOAP: each microstep asks forsoap_stepof mean-spectrum change, with only a loose Cartesian guard. Repeat untilμsits outside every well.
- fn step_into_hole_escaping<R: Rng + ?Sized>(x: ArrayView1<f64>, wells: &[Array1<f64>], soap_step: f64, escape: f64, rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>, rng: &mut R) -> Array1<f64>¶
step_into_holewith the escape distance supplied, so the distance a Leave has to cover can be measured rather than assumed.
- fn surplus_reseed<R: Rng + ?Sized>(x: ArrayView1<f64>, wells: &[Array1<f64>], rcut: f64, species: Option<&[u32]>, mobile: Option<&[usize]>, rng: &mut R) -> Option<Array1<f64>>¶
Surplus Hyperband start: step the current packing mean into a SOAP hole of the occupied cloud. Empty wells yield
Noneso the caller Leaves OtherFamily or ArchiveHole. Not a parent clone and not a named morphology.