Skip to content

fix: hessian.dat under quiet, LAMMPS dlopen errors, listed-atom file-order - #411

Open
HaoZeke wants to merge 7 commits into
TheochemUI:mainfrom
HaoZeke:fix/akmc-io-hessian-lammps-listed
Open

fix: hessian.dat under quiet, LAMMPS dlopen errors, listed-atom file-order#411
HaoZeke wants to merge 7 commits into
TheochemUI:mainfrom
HaoZeke:fix/akmc-io-hessian-lammps-listed

Conversation

@HaoZeke

@HaoZeke HaoZeke commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator

Four client/server bugs that showed up on an 8788-atom Cu V/SIA AKMC run, plus an optional geometry path so minimage and linkcell can be checked against vesin.

[Main] quiet = true still assembled the FD Hessian and exited 0, but Hessian.cpp skipped hessian.dat. The Hessian job exists to write that file; quiet now only suppresses the log line.

LammpsLoader::available() stays a filesystem probe (no banner). require_loaded() now says whether liblammps.so is missing, failed dlopen (glibc), or opened without lammps_open_no_mpi. liblammps_pot.so is the eOn plugin, not LAMMPS.

displace_atom_list in the docs is CON file-order (0, 1, 2). After load, Structure sorts unique atom_ids. A movable-first active-volume .con then listed free file rows that were frozen buffer atoms after the sort (Listed atoms are all frozen). from_conframe now keeps file_to_struct; ListedAtoms retries that map when the raw list is empty.

eon.geometry.pbc uses minimage.Cell.from_vesin when that package is installed, else the numpy wrap. neighbor_list_linkcell is a check path against linkcell.knearest; production neighbor_list is still vesin. Tests skip if those packages are not importable.

tests/test_listed_atoms_id_sort.py covers a 4-atom Cu .con (file ids 100,101,0,1; file rows 0,1 free) remapped to Structure rows [2, 3]. The C++ Hessian/LAMMPS cases are in JobIntegrationTest / LammpsLoaderTest.

Fixes the quiet Hessian write, the LAMMPS dlopen message, and the listed-atom file-order trap.

quiet still suppresses the log line. require_loaded now says whether
the so is missing, failed dlopen, or has no lammps_open_no_mpi.
from_conframe stores file_to_struct. ListedAtoms retries that map
when the raw file-order rows are all frozen.
pbc uses minimage.Cell when installed. neighbor_list_linkcell
compares vesin pairs to linkcell.knearest on the same Structure.
@codecov-commenter

codecov-commenter commented Sep 4, 2026

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 17.54386% with 94 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
eon/geometry/neighbors.py 2.56% 38 Missing ⚠️
eon/geometry/pbc.py 8.33% 22 Missing ⚠️
eon/structure.py 11.11% 16 Missing ⚠️
eon/displace.py 0.00% 12 Missing ⚠️
client/potentials/LAMMPS/LammpsLoader.cpp 68.42% 6 Missing ⚠️

📢 Thoughts on this report? Let us know!

Quiet suppresses the write log line only. The user guide no longer
says the matrix file exists only when quiet is false.
copyTestData copies neb_morse/hessian.dat (9 lines) into the unique
workdir, so exists() could not prove the job wrote the artifact
under quiet=true. Remove the fixture first and require a full matrix.
Ortho and restricted-triclinic wraps agree with the eOn numpy/C++
rules, LAMMPS minimum_image, and GROMACS pbc_dx. linkcell k-NN
matches vesin pairs sorted by minimage.dist2. pbc uses minimage
when installed; the numpy wrap stays as pbc_eon_legacy.
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

Benchmark Results

Note

All benchmarks unchanged

Count
⚪ Unchanged 8
8 unchanged benchmark(s)
Benchmark Before After Ratio
bench_eonclient.TimeMinimizationLJCluster.peakmem_minimization_lbfgs 39M 39M ~1x
bench_eonclient.TimeMinimizationLJCluster.time_minimization_lbfgs 22.8±0ms 23.0±0ms ~1.01x
bench_eonclient.TimeNEBMorsePt.peakmem_neb 39M 38.9M ~1x
bench_eonclient.TimeNEBMorsePt.time_neb 207±0ms 208±0ms ~1x
bench_eonclient.TimePointMorsePt.peakmem_point_evaluation 39M 39.1M ~1x
bench_eonclient.TimePointMorsePt.time_point_evaluation 11.9±0ms 12.8±0ms ~1.07x
bench_eonclient.TimeSaddleSearchMorseDimer.peakmem_saddle_search_dimer 39M 39M ~1x
bench_eonclient.TimeSaddleSearchMorseDimer.time_saddle_search_dimer 58.4±0ms 60.7±0ms ~1.04x
Details
  • Base: 93bd2a49
  • Head: 7c50539b
  • Runner: ubuntu-22.04
Raw asv-spyglass output
All benchmarks:

| Change   | Before   | After    |   Ratio | Benchmark (Parameter)                                                  |
|----------|----------|----------|---------|------------------------------------------------------------------------|
|          | 39M      | 39M      |    1    | bench_eonclient.TimeMinimizationLJCluster.peakmem_minimization_lbfgs   |
|          | 22.8±0ms | 23.0±0ms |    1.01 | bench_eonclient.TimeMinimizationLJCluster.time_minimization_lbfgs      |
|          | 39M      | 38.9M    |    1    | bench_eonclient.TimeNEBMorsePt.peakmem_neb                             |
|          | 207±0ms  | 208±0ms  |    1    | bench_eonclient.TimeNEBMorsePt.time_neb                                |
|          | 39M      | 39.1M    |    1    | bench_eonclient.TimePointMorsePt.peakmem_point_evaluation              |
|          | 11.9±0ms | 12.8±0ms |    1.07 | bench_eonclient.TimePointMorsePt.time_point_evaluation                 |
|          | 39M      | 39M      |    1    | bench_eonclient.TimeSaddleSearchMorseDimer.peakmem_saddle_search_dimer |
|          | 58.4±0ms | 60.7±0ms |    1.04 | bench_eonclient.TimeSaddleSearchMorseDimer.time_saddle_search_dimer    |

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.

2 participants