IRC: Gonzalez–Schlegel (GS) Method

Overview

The Gonzalez–Schlegel (GS) method is the default IRC integrator in MAPLE. It operates in mass-weighted Cartesian coordinates and uses a two-phase pivot-step plus constrained-optimization approach at each IRC point:

  1. Pivot step — A steepest-descent step is taken along the negative gradient direction in mass-weighted coordinates to produce a trial point on a hypersphere centered at the current IRC point.
  2. Constrained optimization — The trial point is refined by minimizing the energy on the surface of the hypersphere, using the perpendicular component of the gradient, until the corrector converges.

The Hessian is updated along the path using BFGS/Bofill update formulas, avoiding full Hessian recomputation at every step. Adaptive step-size control adjusts the arc length based on path curvature, and an optional parabolic fit detects when the path has descended into a minimum basin.

The GS method integrates both the forward and backward IRC paths, starting from the transition state.

Parameters

All GS parameters can be specified in the #irc(...) header line. The complete GSParams dataclass:

Parameter Type Default Description
target_mode int 1 Index of the imaginary vibrational mode to follow (1-based).
step_length_bohr float 0.10 Step length along the IRC path in Bohr.
max_steps int 50 Maximum number of IRC steps in each direction.
max_micro_cycles int 20 Maximum micro-iterations per IRC macro-step (constrained optimization on hypersphere).
micro_step_thresh float 1e-3 Convergence threshold for micro-iterations.
hessian_recalc int None Recalculate the full Hessian every N steps. None means never recalculate.
hessian_update str "bofill" Hessian update method: "bfgs" or "bofill".
f_max_th float 2e-3 Max force convergence threshold (Hartree/Bohr).
f_rms_th float 5e-4 RMS force convergence threshold.
print_each bool True Print step details for each IRC point.
write_traj bool True Write trajectory XYZ files.

Input Example

Basic GS IRC calculation with default parameters:

#model=ani1xnr
#irc(method=gs)
#device=gpu0

XYZ /path/to/transition_state.xyz