Skip to main content
← OpenMECP Documentation

gediis_step

Function gediis_step 

Source
pub fn gediis_step(
    opt_state: &mut OptimizationState,
    config: &Config,
) -> DVector<f64>
Expand description

Performs a GEDIIS (Energy-Informed Direct Inversion in Iterative Subspace) optimization step.

GEDIIS is an enhanced version of GDIIS that incorporates energy information into the error vector construction. This typically provides 2-4x faster convergence than GDIIS for difficult MECP optimization problems, particularly those with significant energy difference minimization requirements.

The key enhancement over GDIIS is that GEDIIS error vectors include energy- weighted gradient contributions. This helps the optimizer better balance energy minimization with geometry optimization, leading to more robust convergence to the true MECP.

§Unit Conventions

  • Input geometries (geom_history): Angstrom (A)
  • Input gradients (grad_history): Hartree/Angstrom (Ha/A)
  • Energy history (energy_history): Hartree (Ha)
  • Interpolated geometry: Angstrom (A)
  • Output geometry: Angstrom (A)

The B-matrix computation uses -(g_i - g_j) · (x_i - x_j) which produces Hartree units (Ha/A × A = Ha). This is consistent because the B-matrix is used to solve for dimensionless interpolation coefficients that sum to 1.

The step calculation X_new = X_interp - G_interp uses the gradient as a pseudo-step direction. The step limiting (max_step_size in Angstrom) ensures the final displacement has proper magnitude regardless of gradient units.

§Algorithm Overview

  1. Energy-Normalized Error Vectors: Compute error vectors with energy weighting to emphasize points near the target energy difference
  2. Enhanced B-Matrix: Include energy-energy terms in addition to gradient error dot products
  3. DIIS Interpolation: Solve for optimal coefficients using the enhanced error matrix
  4. Geometry Prediction: Construct new geometry from optimal coefficients
  5. Step Limiting: Cap step to max_step_size (Angstrom) for stability

§When to Use GEDIIS

Enable GEDIIS by setting use_gediis = true in the configuration:

  • Difficult MECP optimizations with flat PES regions
  • Systems with large energy differences that need minimization
  • When GDIIS shows slow convergence
  • Transition metal complexes and open-shell systems

§Performance Comparison

  • BFGS: Baseline convergence rate
  • GDIIS: ~2-3x faster than BFGS
  • GEDIIS: ~2-4x faster than GDIIS (4-8x faster than BFGS)

Validates: Requirement 7.4

§Arguments

  • opt_state - Optimization state with history including energies
  • config - Configuration with step size limits and GEDIIS parameters

§Returns

Returns the new geometry coordinates in Angstrom after the GEDIIS step as a DVector<f64>.

§Examples

use omecp::optimizer::{gediis_step, OptimizationState};
use omecp::config::Config;

let config = Config {
    use_gediis: true,
    ..Default::default()
};

let opt_state = OptimizationState::new();
assert!(opt_state.has_enough_history()); // Need ≥ 3 iterations

// let x_new = gediis_step(&opt_state, &config);