pub struct GediisOptimizer {
pub config: GediisConfig,
pub rise_tracker: EnergyRiseTracker,
}Expand description
Main GEDIIS optimizer.
Fields§
§config: GediisConfigConfiguration
rise_tracker: EnergyRiseTrackerEnergy rise tracker
Implementations§
Source§impl GediisOptimizer
impl GediisOptimizer
Sourcepub fn with_config(config: GediisConfig) -> Self
pub fn with_config(config: GediisConfig) -> Self
Creates a new GEDIIS optimizer with specified configuration.
Sourcepub fn select_variant(
&self,
rms_error: f64,
energy_rises: bool,
n_points: usize,
energies: Option<&VecDeque<f64>>,
) -> GediisVariant
pub fn select_variant( &self, rms_error: f64, energy_rises: bool, n_points: usize, energies: Option<&VecDeque<f64>>, ) -> GediisVariant
Selects the appropriate GEDIIS variant based on optimization state.
Implements the decision logic from Old Code GeoDIS:
- OKEnD requires NGDIIS >= 4 for TS search, >= 2 for minimum
- OKEnD also requires |DC| >= SmlDif where DC = E(1) - E(2)
- EnDIS used when RMSErr > SimSw or energy rises
Sourcepub fn compute_step(
&mut self,
coords: &VecDeque<DVector<f64>>,
grads: &VecDeque<DVector<f64>>,
energies: &VecDeque<f64>,
quad_steps: Option<&VecDeque<DVector<f64>>>,
) -> Option<(DVector<f64>, Vec<f64>)>
pub fn compute_step( &mut self, coords: &VecDeque<DVector<f64>>, grads: &VecDeque<DVector<f64>>, energies: &VecDeque<f64>, quad_steps: Option<&VecDeque<DVector<f64>>>, ) -> Option<(DVector<f64>, Vec<f64>)>
Sourcefn build_rfo_diis_matrix(
&self,
steps: &VecDeque<DVector<f64>>,
n: usize,
) -> DMatrix<f64>
fn build_rfo_diis_matrix( &self, steps: &VecDeque<DVector<f64>>, n: usize, ) -> DMatrix<f64>
Builds RFO-DIIS matrix from quadratic steps.
A[i,j] = <q_i, q_j> For TS search, first coordinate is weighted by ts_scale.
Sourcefn build_energy_diis_matrix(
&self,
grads: &VecDeque<DVector<f64>>,
coords: &VecDeque<DVector<f64>>,
n: usize,
) -> DMatrix<f64>
fn build_energy_diis_matrix( &self, grads: &VecDeque<DVector<f64>>, coords: &VecDeque<DVector<f64>>, n: usize, ) -> DMatrix<f64>
Builds Energy-DIIS matrix.
Trace: AMTrc[i,j] = -<g_i, x_j> A[i,j] = AMTrc[i,i] + AMTrc[j,j] - AMTrc[i,j] - AMTrc[j,i]
For TS search (n_neg > 0), the first coordinate is weighted by ts_scale
to emphasize the reaction coordinate, matching Old Code:
AMTrc(I+1,J+1) = -SclDIS*ANFF(1,I)*ANCC(1,J) - SProd(NVarT-1,ANFF(2,I),ANCC(2,J))
Sourcefn build_sim_diis_matrix(
&self,
grads: &VecDeque<DVector<f64>>,
coords: &VecDeque<DVector<f64>>,
_energies: &VecDeque<f64>,
n: usize,
quad_steps: Option<&VecDeque<DVector<f64>>>,
) -> DMatrix<f64>
fn build_sim_diis_matrix( &self, grads: &VecDeque<DVector<f64>>, coords: &VecDeque<DVector<f64>>, _energies: &VecDeque<f64>, n: usize, quad_steps: Option<&VecDeque<DVector<f64>>>, ) -> DMatrix<f64>
Builds Simultaneous-DIIS matrix.
Combines Energy-DIIS with quadratic energy approximation. Formula: A[i,j] = EnDIS[i,j] + 0.5*(q_i·f_i + q_j·f_j) where q = quadratic step and f = forces (negative gradient).
This matches the Old Code GeoDIS implementation:
Half*(SProd(NVarT,AQuad(1,I),ANFF(1,I)) + SProd(NVarT,AQuad(1,J),ANFF(1,J)))
Trait Implementations§
Auto Trait Implementations§
impl Freeze for GediisOptimizer
impl RefUnwindSafe for GediisOptimizer
impl Send for GediisOptimizer
impl Sync for GediisOptimizer
impl Unpin for GediisOptimizer
impl UnsafeUnpin for GediisOptimizer
impl UnwindSafe for GediisOptimizer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.