Skip to content

feat(minmode): Davidson subspace as alternative to dimer rotation#354

Merged
HaoZeke merged 5 commits into
TheochemUI:mainfrom
HaoZeke:feat/davidson-minmode
Jun 27, 2026
Merged

feat(minmode): Davidson subspace as alternative to dimer rotation#354
HaoZeke merged 5 commits into
TheochemUI:mainfrom
HaoZeke:feat/davidson-minmode

Conversation

@HaoZeke

@HaoZeke HaoZeke commented Jun 27, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Adds Davidson minimum-mode finder: FD Hessian-vector products (same class as Lanczos), Ritz projection, residual correction with optional diagonal preconditioner from H*v components.
  • Select with [Saddle Search] min_mode_method = davidson (dimer rotation CG and Lanczos unchanged).
  • [Davidson] tolerance, max_iterations, diagonal_preconditioner.
  • Unit tests: negative eigenvalue; strategy variant; agreement with Lanczos on sign/magnitude band.

Why

Dimer min-mode spends effort on constrained rotational minimization. Davidson expands a Ritz subspace with residual correction — better asymptotic convergence for the lowest curvature mode without the rotational force loop.

Test plan

  • CI green
  • Local: DimerTest cases tagged [davidson]
  • Optional: process_search with min_mode_method=davidson on an LJ/Morse fixture

HaoZeke added 2 commits June 27, 2026 10:12
Add Davidson min-mode (FD H*v, Rayleigh-Ritz, residual correction with
optional diagonal preconditioner) selectable via
saddle_search.min_mode_method=davidson, parallel to lanczos/dimer.
Wire EigenmodeStrategy, parameters [Davidson], unit tests vs Lanczos.
@github-actions

github-actions Bot commented Jun 27, 2026

Copy link
Copy Markdown

eOn Documentation Preview

Download: documentation.zip

Unzip and open index.html to view.

HaoZeke added 2 commits June 27, 2026 11:44
Address review nits: diagonal_preconditioner is |Hv_i/v_i| not diag(H)
and defaults false; document one-sided FD H*v matching Lanczos.
Address Codex review on TheochemUI#354: min_mode_method includes davidson;
DavidsonConfig section for tolerance, max_iterations,
diagonal_preconditioner (default false).
@github-actions

github-actions Bot commented Jun 27, 2026

Copy link
Copy Markdown

Benchmark Results

Tip

1 benchmark(s) improved

Count
🟢 Improved 1
⚪ Unchanged 7

Improvements

Benchmark Before After Ratio
🟢 bench_eonclient.TimeMinimizationLJCluster.time_minimization_lbfgs 35.4±0ms 31.8±0ms 0.9x
7 unchanged benchmark(s)
Benchmark Before After Ratio
bench_eonclient.TimeMinimizationLJCluster.peakmem_minimization_lbfgs 41.2M 41.2M ~1x
bench_eonclient.TimeNEBMorsePt.peakmem_neb 41M 41M ~1x
bench_eonclient.TimeNEBMorsePt.time_neb 260±0ms 259±0ms ~1x
bench_eonclient.TimePointMorsePt.peakmem_point_evaluation 41M 41M ~1x
bench_eonclient.TimePointMorsePt.time_point_evaluation 9.92±0ms 10.8±0ms ~1.09x
bench_eonclient.TimeSaddleSearchMorseDimer.peakmem_saddle_search_dimer 41M 41.1M ~1x
bench_eonclient.TimeSaddleSearchMorseDimer.time_saddle_search_dimer 67.2±0ms 67.9±0ms ~1.01x
Details
  • Base: 0a40bb30
  • Head: 26276a4d
  • Runner: ubuntu-22.04
Raw asv-spyglass output
All benchmarks:

| Change   | Before   | After    |   Ratio | Benchmark (Parameter)                                                  |
|----------|----------|----------|---------|------------------------------------------------------------------------|
|          | 41.2M    | 41.2M    |    1    | bench_eonclient.TimeMinimizationLJCluster.peakmem_minimization_lbfgs   |
| -        | 35.4±0ms | 31.8±0ms |    0.9  | bench_eonclient.TimeMinimizationLJCluster.time_minimization_lbfgs      |
|          | 41M      | 41M      |    1    | bench_eonclient.TimeNEBMorsePt.peakmem_neb                             |
|          | 260±0ms  | 259±0ms  |    1    | bench_eonclient.TimeNEBMorsePt.time_neb                                |
|          | 41M      | 41M      |    1    | bench_eonclient.TimePointMorsePt.peakmem_point_evaluation              |
|          | 9.92±0ms | 10.8±0ms |    1.09 | bench_eonclient.TimePointMorsePt.time_point_evaluation                 |
|          | 41M      | 41.1M    |    1    | bench_eonclient.TimeSaddleSearchMorseDimer.peakmem_saddle_search_dimer |
|          | 67.2±0ms | 67.9±0ms |    1.01 | bench_eonclient.TimeSaddleSearchMorseDimer.time_saddle_search_dimer    |

@HaoZeke HaoZeke merged commit a2c0493 into TheochemUI:main Jun 27, 2026
15 checks passed
@HaoZeke HaoZeke deleted the feat/davidson-minmode branch June 27, 2026 17:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant