Changelog

The C++ engine is this repository. Python is pydseams (PydSEAMSlib). Lua is require("dseams") (yodaStruct).

The release history is CHANGELOG.md (Keep a Changelog, assembled by towncrier). This page is the narrative cut used in the book.

2.9.2

Every host stage of the ring pipeline threads. The cutoff neighbour list and the index-ordered list come from a threaded cell list that bins molecules in fractional coordinates of the recovered triclinic cell and builds each row on one thread, equal row for row to the minimum-image reference; the ID-to-index conversion threads too. bench_strong times every stage and their sum as the best of five pinned runs. On a 16-core workstation the 65536-molecule pipeline falls from 906 to 99 ms.

2.9.1

The OpenMP target offload of the Steinhardt kernel compiles with nvc++ 23.7 against CUDA 12.2 on an A100 and matches the serial and threaded host results bit for bit; SEAMS_OFFLOAD=0 keeps the host path.

2.9.0

cage::findBySignature enumerates closed polyhedra by their ring-size census (seams cages --signature), key libraries stack across hop counts with the depth that named each atom (topo::matchLibraries), guests are placed in enumerated cages by periodic centroids (site::guestOccupancy, --guest-types), ion environments list their shell and site::shellRingCensus counts the rings through it, and --per-atom FILE writes a LAMMPS dump with the engine’s per-atom decision for OVITO or VMD.

2.8.0

Topology keys (topo::localKey, topo::fingerprint, nauty certificate or Weisfeiler-Leman hash), key libraries (seams fingerprint --emit-library, --library), ions read against the cage assignment (seams ions), vertex colours by species, the embedded CON reader, and a refusal of CON and chemfiles input when their reader is absent. The CLI preserves frame order for parallel LAMMPS ranges, dispatches ranges for XYZ, chemfiles, and readcon inputs, and offers versioned JSONL output through --format json. --strict-input makes empty-frame handling an explicit error. XYZ input accepts coordinate-only rows and records its single frame as frame 1. seams cages --graph seeded --complete turns on the ring completion.

2.7.0

ring::seededCageAffiliation takes an optional completion flag. ring::ringAdjacentCompletion fills the last vertex of any six-ring whose other vertices carry a cage label, iterated to a fixed point, separately for the hexagonal cage (HC) and double-diamond cage (DDC) labels. The rule is stated and proven in lean/ (Mathlib): the completion is the least fixed point above the seed, empty on an empty seed, sound, and independent of visiting order; the edge-sharing rule it replaces is shown unsound on a five-vertex instance. tests/walk_compare walks a trajectory and prints per-frame CHILL+ and cage labels with their largest clusters. The reproducibility workflow moved to the dseams2_repro package.

2.6.0

Meson links FlexiBLAS when pkg-config or libflexiblas is present, and falls back to the conda-forge libblas / liblapack ABI packages. The reproducibility campaign no longer configures in-tree Python; bindings come from pydseamslib on PyPI. The nucleation notebook reads CageScore fields. Figshare Lua demos resolve example_lua from yodaStruct.

2.5.0

--family (default waterIce) is an input. Ice scores refuse non-water families and name the family. seams cn --ions is cage degree on site::ionCloud; seams pairs is the mutual-nearest contact-pair count, not ionicity. seams domains is the largest polar or apolar Stoddard component. seams density-z is type-resolved \(\rho(z)\) with slab volume from dump H. Running CN and the first minimum of \(g_{IJ}\) come from rdf::runningCN / firstMinimumBin. Dump writers emit xy, xz, yz when the cloud carries tilt.

2.4.0

Partial 3D site-site \(g_{IJ}(r)\) and coordination numbers under the dump MIC, via seams rdf and seams cn. Site chemistry is a site::Table of LAMMPS types and optional atom-ID overrides; site::ionCloud collapses each ion molID to one unwrapped COM vertex. Hydrogen bonds accept an explicit donor-H index set (populateHbondsFromDonors). seams hbonds --donors uses every hydrogen as a donor candidate; water cutoffs stay on that command and are not an ionic-liquid criterion. In-plane RDF normalization uses the dump-cell volume \(|\det H|\) and the restricted-triclinic in-plane area \(lx \times ly\), not the particle AABB or bound-span product.

2.3.4

Steinhardt, hydrogen-bond, and cluster wraps use the dump minimum image, not an independent-axis wrap on bound spans.

2.3.3

Cutoff fallbacks and the skin Verlet refresh use the dump 3x3 minimum image, not a diagonal of bound spans.

2.3.2

Cutoff lists take the LAMMPS dump 3x3, not a diagonal of bound spans. Device ice-score batches pass lammpsBoxToLinkcell when the dump tilt is present. linkcell wrap pin is v0.3.1.

2.3.1

neighList, halfNeighList, and the in-plane RDF sampler use the vesin cell list (same helper as neighListO). Brute force remains the fallback. The GPU ice-score workspace is unchanged.

2.3.0

The TUM ice score (mutual four-nearest graph, primitive hexagons, HC/DDC) runs as a device-resident frame batch when gpulite and linkcell 0.3.0 are present. CHILL and \(q_{lm}\) stay on the host. Runtime knobs are twelve-factor: SEAMS_CONFIG or ./seams.env, then the environment, then CLI flags. seams --print-config dumps the table. Examples and the README use seams / pydseams / require("dseams"); the 2020 yodaStruct -c / conf.yaml surface is gone.

The C++ API in the book is Doxygen via doxyrest (api/index).

2.2.5

subprojects/linkcell.wrap is v0.2.4. A static libyodaLib.a no longer passes liblinkcell.so to ar. Wrap consumers link the static archive. Dump doubles parse with strtod on Apple libc++.

2.2.4

Periodic k-nearest graphs via d-SEAMS/linkcell v0.2.2. kNearestNeighbourList / kNearestNeighbourPair write packed n*k nominations. Mutual and union come from one walk. The LAMMPS dump box is bound spans plus xy, xz, yz; periodicDistSq recovers H. Empty frames no longer abort the walker.

Docs orgmode covers the seams CLI, the Nix flake, and the three-repo split.

2.2.3

The seams CLI uses Argum. Help, errors, ice-type counts, and --features are colorized. NO_COLOR turns the colors off.

2.2.2

The compiled Python surface is pydseams.yoda. _core remains an alias.

2.2.1

  • Flake package for libyodaLib and seams (Meson, not the CMake-era yodaStruct derivation).

  • Live LAMMPS dump session (nLammpsFrames, forEachLammpsFrame): seams --frame N --last M --jobs J.

  • BondGraph at runtime: cutoff, knn, knn-union. seams cages --graph adds seeded.

  • LAMMPS readers bind xu~/~yu~/~zu and xs~/~ys~/~zs when x y z are absent.

2.2.0

seams CLI: read, chill, chill-plus, cages. This is the engine command line.

2.1.2

Removed CMake-era Nix entrypoints that still named the product yodaStruct. Build with pixi or nix build.

2.1.1

CHILL interfacial walk uses the same four-neighbour star as c_ij. Atoms without four recorded bonds go to water. Seeded affiliation floods HC and DDC separately.

2.1.0

The C++ engine is this repository. Front ends are not.

2.0.1

Python bindings moved to PydSEAMSlib. This repository is the C++ engine.

2.0.0

Meson replaces CMake. License is MIT. Optional vesin neighbour lists, Highway SIMD, chemfiles, and readcon-core. Catch2 suite for the engine.

1.0.0

Initial release. See Goswami et al., J. Chem. Inf. Model. 2020, 60, 2169-2177.