Dimer method

The dimer method of Henkelman and Jónsson [DM_HJonsson99] with improvements by Heyden et al. [DM_HBK05] and Kästner and Sherwood [DM_KastnerS08] for estimating the lowest Eigenmode using only first derivatives.

An overview may be found in Olsen et al. [DM_OKH+04].

The dimer separation is set in the [Main] section with the finiteDifference parameter.

The method of Melander et al. [DM_MLJonsson15] is also implemented for use with gas phase systems.

Note

There is no point removing rotations for an extended system. Rotation removal may be more detrimental as noted in Goswami [DM_Gos25].

Added in version 2.5: The Gaussian Process Regression accelerated dimer in C++ from Goswami et al. [DM_GMK+25].

Rotation backends

The softest-mode estimate used in the dimer rotation step can be chosen with rotation_backend under [Dimer] (default classical). Min-mode-following translation along that mode is unchanged; only how τ / the lowest curvature is obtained differs.

Value

Mode estimation

Notes

classical

Constrained dimer rotation (Heyden / Kästner–Sherwood style)

Default; uses opt_method, torque limits, and rotation budgets as before

lanczos

Finite-difference Lanczos min-mode

Shares the client Lanczos implementation; see Lanczos

davidson

Finite-difference Davidson min-mode

Same role as Lanczos with a different iterative subspace

lor

Locally optimal rotation (LOR), Algorithm I

Leng et al. [DM_LGSL13]; at most one new FD force per rotation iteration via Hessian–vector products and force translation of prior H·N / H·F⊥ products

Added in version TBD: rotation_backend (classical | lanczos | davidson | lor). The LOR path implements Leng et al. [DM_LGSL13]: 2×2 then 3×3 Ritz problems in the rotation subspace, force translation for H·P₃ (linear action of H on the unit Gram–Schmidt residual of the trial direction), residual / rotations_max / stall stops, and a best-mode restore when the Ritz sequence is non-monotonic under FD noise.

LOR stops when the relative residual ‖F_⊥‖ / (|C_N| + 1) < max(1e-3, lor_residual_tol) (default lor_residual_tol = 0.1). That parameter is the LOR residual stop and applies only when rotation_backend = lor. Classical rotation uses torque_min (angular torque for the constrained rotation loop). Budget is rotations_max (default 10; values <= 0 fall back to 10). Exhausting the budget without meeting the residual stop sets rotationDidConverge false on ImprovedDimer.

Example:

[Dimer]
improved = True
rotation_backend = lor
lor_residual_tol = 0.1
rotations_max = 20

improved = True (default) uses ImprovedDimer; non-classical backends skip the classical IDimerRot loop and call the selected min-mode backend through a shared dispatch helper. Rotation iteration budgets for LOR follow rotations_max. Geometry uses max_iterations.

Configuration

[Dimer]
pydantic model eon.schema.DimerConfig[source]

Show JSON schema
{
   "title": "DimerConfig",
   "type": "object",
   "properties": {
      "opt_method": {
         "default": "cg",
         "description": "Optimization algorithm to choose the dimer rotation direction.",
         "enum": [
            "sd",
            "cg",
            "lbfgs"
         ],
         "title": "Opt Method",
         "type": "string"
      },
      "converged_angle": {
         "default": 5.0,
         "description": "The dimer is considered converged if it will be rotated fewer degrees than this angle.",
         "title": "Converged Angle",
         "type": "number"
      },
      "rotations_max": {
         "default": 10,
         "description": "This is the maximum number of rotations allowed for the dimer for each minimum mode estimation.",
         "title": "Rotations Max",
         "type": "integer"
      },
      "finite_angle": {
         "default": 0.005,
         "description": "Finite angle for dimer rotation.",
         "title": "Finite Angle",
         "type": "number"
      },
      "dimer_improved": {
         "default": true,
         "description": "Indicates if the improved dimer method is used.",
         "title": "Dimer Improved",
         "type": "boolean"
      },
      "dimer_max_iterations": {
         "default": 1000,
         "description": "Maximum number of iterations allowed for the dimer.",
         "title": "Dimer Max Iterations",
         "type": "integer"
      },
      "dimer_rotations_min": {
         "default": 1,
         "description": "Minimum number of rotations for the dimer. [not improved]",
         "title": "Dimer Rotations Min",
         "type": "integer"
      },
      "dimer_torque_min": {
         "default": 0.1,
         "description": "Minimum torque for the dimer. [not improved]",
         "title": "Dimer Torque Min",
         "type": "number"
      },
      "dimer_torque_max": {
         "default": 1.0,
         "description": "Maximum torque for the dimer. [not improved]",
         "title": "Dimer Torque Max",
         "type": "number"
      },
      "dimer_remove_rotation": {
         "default": false,
         "description": "Indicates if the rotation should be removed.",
         "title": "Dimer Remove Rotation",
         "type": "boolean"
      }
   }
}

Config:
  • use_attribute_docstrings: bool = True

Fields:
  • converged_angle (float)

  • dimer_improved (bool)

  • dimer_max_iterations (int)

  • dimer_remove_rotation (bool)

  • dimer_rotations_min (int)

  • dimer_torque_max (float)

  • dimer_torque_min (float)

  • finite_angle (float)

  • opt_method (Literal['sd', 'cg', 'lbfgs'])

  • rotations_max (int)

field converged_angle: float = 5.0

The dimer is considered converged if it will be rotated fewer degrees than this angle.

field dimer_improved: bool = True

Indicates if the improved dimer method is used.

field dimer_max_iterations: int = 1000

Maximum number of iterations allowed for the dimer.

field dimer_remove_rotation: bool = False

Implements the method of Melander et al. [DM_MLJonsson15]

Indicates if the rotation should be removed.

field dimer_rotations_min: int = 1

Minimum number of rotations for the dimer. [not improved]

field dimer_torque_max: float = 1.0

Maximum torque for the dimer. [not improved]

field dimer_torque_min: float = 0.1

Minimum torque for the dimer. [not improved]

field finite_angle: float = 0.005

Finite angle for dimer rotation.

field opt_method: Literal['sd', 'cg', 'lbfgs'] = 'cg'
Options:
  • ‘sd’: Steepest descent, rotate along the rotational force.

  • ‘cg’: Conjugate gradient, rotate along conjugate directions.

  • ‘lbfgs’: Limited memory Broyden-Fletcher-Goldfarb-Shanno Quasi-Newton optimizer.

Optimization algorithm to choose the dimer rotation direction.

field rotations_max: int = 10

This is the maximum number of rotations allowed for the dimer for each minimum mode estimation.

References

[DM_Gos25]

Rohit Goswami. Bayesian hierarchical models for quantitative estimates for performance metrics applied to saddle search algorithms. AIP Advances, 15(8):85210, August 2025. doi:10.1063/5.0283639.

[DM_GMK+25]

Rohit Goswami, Maxim Masterov, Satish Kamath, Alejandro Peña-Torres, and Hannes Jónsson. Efficient implementation of gaussian process regression accelerated saddle point searches with application to molecular reactions. May 2025. arXiv:2505.12519, doi:10.48550/arXiv.2505.12519.

[DM_HJonsson99]

Graeme Henkelman and Hannes Jónsson. A dimer method for finding saddle points on high dimensional potential surfaces using only first derivatives. The Journal of Chemical Physics, 111(15):7010–7022, October 1999. doi:10.1063/1.480097.

[DM_HBK05]

Andreas Heyden, Alexis T. Bell, and Frerich J. Keil. Efficient methods for finding transition states in chemical reactions: Comparison of improved dimer method and partitioned rational function optimization method. The Journal of Chemical Physics, 123(22):224101, December 2005. doi:10.1063/1.2104507.

[DM_KastnerS08]

Johannes Kästner and Paul Sherwood. Superlinearly converging dimer method for transition state search. The Journal of Chemical Physics, 128(1):014106, January 2008. doi:10.1063/1.2815812.

[DM_LGSL13] (1,2)

Jing Leng, Weiguo Gao, Cheng Shang, and Zhi-Pan Liu. Efficient softest mode finding in transition states calculations. The Journal of Chemical Physics, 138(9):094110, March 2013. doi:10.1063/1.4792644.

[DM_MLJonsson15] (1,2)

Marko Melander, Kari Laasonen, and Hannes Jónsson. Removing External Degrees of Freedom from Transition-State Search Methods using Quaternions. Journal of Chemical Theory and Computation, 11(3):1055–1062, March 2015. doi:10.1021/ct501155k.

[DM_OKH+04]

R. A. Olsen, G. J. Kroes, G. Henkelman, A. Arnaldsson, and H. Jónsson. Comparison of methods for finding saddle points without knowledge of the final states. The Journal of Chemical Physics, 121(20):9776–9792, November 2004. doi:10.1063/1.1809574.