linkcell
Periodic linked-cell neighbour lists for molecular simulations.
pairs_within is the cutoff list: one row per atom-image, the caller's
shift S, and a squared distance strictly below the cutoff squared.
knearest is the k-nearest list. nanoflann builds Euclidean KD-trees
without a minimum-image convention. The walk is the linked-cell method
of Allen and Tildesley (Computer Simulation of Liquids). k-nearest
shells stop when the k-th neighbour reaches the unvisited plane. The
optional gpulite path runs that k-nearest walk on a CUDA device and
still stops on the looser reach * cell_min bound
(linkcell::gpu::Workspace). src/kokkos/ is the certified walk on
a Kokkos execution space. Pair lists stay on the host.
It is a LODE library. The Rust crate is the implementation. The C ABI
(lc_*) is the hourglass waist, the same shape as
readcon-core. C++ is a RAII
header over that ABI.
Released versions live in CHANGELOG.md (Keep a Changelog).
Unreleased notes are files under changelog.d/. The cut is
towncrier build --version X.Y.Z.
Install
Rust:
cargo add linkcell
C and C++ consumers include linkcell.h or linkcell.hpp and link the
installed library. Meson, CMake, and pkg-config install both shared and
static CPU libraries. The device API is a separate static library with
linkcell_gpu.h / linkcell_gpu.hpp.
Python takes the same search through DLPack (dlpk). Any __dlpack__()
object (numpy, torch, jax, cupy) is a valid xyz / cell, on any
device. A CUDA xyz stays on device; a CUDA cell is inverted on
device. torch.from_dlpack consumes (indices, dist2).
Wheels: one CPython 3.12 limited-ABI (abi3) artifact per platform
(GIL, 3.12+), and one abi3t artifact (CPython 3.15+ GIL and
free-threaded).
pip install linkcell
import numpy as np
import linkcell
xyz = np.array([[0.2, 0.0, 0.0], [9.4, 0.0, 0.0]], dtype=np.float64)
cell = np.array([10.0, 10.0, 10.0], dtype=np.float64)
nn, d2 = linkcell.knearest(xyz, cell, 1)
nn = np.from_dlpack(nn)
Meson
meson setup build
meson compile -C build
meson install -C build
As a wrap, Meson exposes linkcell_dep:
[wrap-git]
url = https://github.com/d-SEAMS/linkcell.git
revision = v0.3.8
depth = 1
[provide]
linkcell = linkcell_dep
linkcell-gpu = linkcell_gpu_dep
linkcell_dep = dependency('linkcell', fallback: ['linkcell', 'linkcell_dep'])
linkcell_gpu_dep = dependency(
'linkcell-gpu',
fallback: ['linkcell', 'linkcell_gpu_dep'],
)
with_gpulite controls the device target and defaults to auto.
CMake
cmake -B build -DCMAKE_INSTALL_PREFIX=$PREFIX
cmake --build build
cmake --install build
find_package(linkcell 0.3 REQUIRED)
target_link_libraries(c_app PRIVATE linkcell::linkcell)
target_link_libraries(cpp_app PRIVATE linkcell::cpp)
target_link_libraries(device_app PRIVATE linkcell::gpu)
LINKCELL_WITH_GPULITE=ON builds linkcell::gpu and is the default.
linkcell::cpp carries the C++17 requirement; linkcell::linkcell stays
valid in a C-only project. The same target names work in the build tree and
from an installed prefix.
pkg-config
pkg-config --cflags --libs linkcell
pkg-config --cflags --libs linkcell-gpu
Both Meson and CMake write linkcell.pc and, when the device target is
built, linkcell-gpu.pc. Use pkg-config --static when selecting the
CPU static archive and its private system libraries.
Rust
use linkcell::{knearest, Cell};
let sim = Cell::ortho(10.0, 10.0, 10.0)?;
let sheared = Cell::from_vectors(
[10.0, 0.0, 0.0],
[5.0, 8.66, 0.0],
[0.0, 0.0, 10.0],
[0.0, 0.0, 0.0],
)?;
let xyz = [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0]];
let rows = knearest(&xyz, &sim, 1, None, None)?;
assert_eq!(rows[0].indices, vec![1]);
mask[i] == false removes a point as both a source and a candidate.
cell_hint is the target cell edge; None uses 3.0 in the box units.
C
#include "linkcell.h"
double xyz[] = {0.0, 0.0, 0.0, 1.0, 0.0, 0.0};
lc_cell box = lc_cell_ortho(10.0, 10.0, 10.0);
int out[2];
if (lc_knearest(xyz, 2, &box, 1, NULL, 0.0, out) != 0) {
return 1;
}
n and k are size_t. out has length n * k. Unused slots are -1.
Neighbours of source i are out[i*k + 0 ..], nearest first.
C++
#include "linkcell.hpp"
const linkcell::Cell box = linkcell::Cell::ortho(10.0, 10.0, 10.0);
const double xyz[] = {0.0, 0.0, 0.0, 1.0, 0.0, 0.0};
const linkcell::Neighbours nn = linkcell::knearest(xyz, 2, box, 1);
nn owns the packed n * k buffer. Unused slots are -1.
nn.neighbour(i, j) is the j-th neighbour of i. Failure throws
linkcell::Error.
The optional device walk reads occupancy from the environment:
LINKCELL_TPP (threads per particle) and LINKCELL_BLOCK (CUDA
block size). Unset, the library picks a pair that maximises particles
per block under the device thread and 48 KiB shared-memory limits.
d-SEAMS writes the same keys from SEAMS_CONFIG / seams --tpp.
Docs
| Quadrant | Page |
|---|---|
| Tutorial | Two points |
| How-to | Embed from C, Embed from C++, pkg-config |
| Reference | C ABI, Algorithm |
| Explanation | MIC and cells |
Rust API: docs.rs/linkcell. Map: docs/index.md.
Design
- The cell is a general parallelepiped: three lattice vectors plus an
origin. Orthorhombic boxes are
Cell::ortho/lc_cell_ortho. Binning is in fractional space, so a sheared dump is not treated as orthogonal. - Points fold into the primary cell once. Each source then grows a
rectangular box of neighbour cells, one axis at a time. Pair
distances are a Cartesian subtract plus that cell's lattice
translation (
dist2_shiftedandlattice_shift), the vesin / LAMMPS ghost construction. Orthorhombic boxes use three independent wraps and skip the two Hinv matvecs. The batched form of that wrap is minimage's Highway kernel,dist2_ortho_diffs, re-exported here and used by the orthorhombic brute-force check. A cutoff row keeps the stencil image, sopairs_withindoes not run that round on an already shifted difference. A restricted triclinic box is tilt-reduced and uses a triangular shift. - One lattice shift per unique cell is wrong unless every wrap of that cell is visited. The walk visits integer cell offsets, so each wrap of a bin is a separate visit.
knearestdoes not take a cutoff. A cell-size hint only sets the bin width.kneareststores each bin as a contiguous slice. An orthorhombic cell is binned as stored, a restricted triclinic cell is tilt-reduced, and a general orientation is Minkowski-reduced. The box grows until the k-th neighbour is no farther than the nearest unvisited face.- A cutoff pair list is
pairs_within/lc_pairs_within/linkcell.pairs_within: atom-image rows with the caller's shiftS.knearestis the k-nearest list.
License
MIT
Metadata
Release files for linkcell 0.3.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| linkcell-0.3.8.tar.gz | 244.7 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| linkcell-0.3.8-cp315-abi3.abi3t-win_amd64.whl | CPython 3.15 | abi3t, abi3 | Windows x86-64 | Details |
| linkcell-0.3.8-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl | CPython 3.15 | abi3, abi3t | Linux glibc 2.28+ x86-64 | Details |
| linkcell-0.3.8-cp315-abi3.abi3t-manylinux_2_28_aarch64.whl | CPython 3.15 | abi3t, abi3 | Linux glibc 2.28+ ARM64 | Details |
| linkcell-0.3.8-cp315-abi3.abi3t-macosx_11_0_arm64.whl | CPython 3.15 | abi3t, abi3 | macOS 11.0+ ARM64 | Details |
| linkcell-0.3.8-cp312-abi3-win_amd64.whl | CPython 3.12 | abi3 | Windows x86-64 | Details |
| linkcell-0.3.8-cp312-abi3-manylinux_2_28_x86_64.whl | CPython 3.12 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| linkcell-0.3.8-cp312-abi3-manylinux_2_28_aarch64.whl | CPython 3.12 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| linkcell-0.3.8-cp312-abi3-macosx_11_0_arm64.whl | CPython 3.12 | abi3 | macOS 11.0+ ARM64 | Details |
Total release size: 4.1 MB
Release files / linkcell-0.3.8.tar.gz
| Download URL | linkcell-0.3.8.tar.gz |
|---|---|
| Size | 244.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ed3578082465ae63aa03a74d20f89002705a11201456b843080ab3196ba6eb57
|
|
BLAKE2b-256 checksum How to use checksums |
084d17f68f88beb833943de29c7bc43fc734a346f74b612d1736eef7974f18da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.
Transparency logRelease files / linkcell-0.3.8-cp315-abi3.abi3t-win_amd64.whl
| Download URL | linkcell-0.3.8-cp315-abi3.abi3t-win_amd64.whl |
|---|---|
| Size | 588.7 kB |
| Tags | CPython 3.15 Windows x86-64 abi3 abi3t |
|
SHA-256 checksum How to use checksums |
5c78ca70d9b13c8cf5223ee3b790b7c5486894d001d58d2ae6de28ea414d1a2d
|
|
BLAKE2b-256 checksum How to use checksums |
eaf48b793c63ee80922cb237346b4966dc0a5fb0021554406cb78e22f455a977
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.
Transparency logRelease files / linkcell-0.3.8-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl
| Download URL | linkcell-0.3.8-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 486.9 kB |
| Tags | CPython 3.15 Linux glibc 2.28+ x86-64 abi3 abi3t |
|
SHA-256 checksum How to use checksums |
c6ac8a1ee5921619f1860a0ba4c672cf565a4c0624131ee2b30e75b60d30fb06
|
|
BLAKE2b-256 checksum How to use checksums |
83444bc39d87941679193b8528af13d1b68a6c523a79e64d823506da2f550cb5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.
Transparency logRelease files / linkcell-0.3.8-cp315-abi3.abi3t-manylinux_2_28_aarch64.whl
| Download URL | linkcell-0.3.8-cp315-abi3.abi3t-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 456.5 kB |
| Tags | CPython 3.15 Linux glibc 2.28+ ARM64 abi3 abi3t |
|
SHA-256 checksum How to use checksums |
eb2200b7eef3a4d42117d6e3a2ca37e440f8c910cb2c67c1ffd2a5852026df79
|
|
BLAKE2b-256 checksum How to use checksums |
c36ad9b7e773ad25f318c2c72617312e9eb735b26151ea2dfdb6ece1d84c6058
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.
Transparency logRelease files / linkcell-0.3.8-cp315-abi3.abi3t-macosx_11_0_arm64.whl
| Download URL | linkcell-0.3.8-cp315-abi3.abi3t-macosx_11_0_arm64.whl |
|---|---|
| Size | 424.5 kB |
| Tags | CPython 3.15 abi3 abi3t macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
75b92f65f1566daa1feee5b07acb622a706055df95a52f55f76742686e29463b
|
|
BLAKE2b-256 checksum How to use checksums |
c18f034936a6faf444c82acb80de8de37ff74dda8844cc9acbcb8750c71a487a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.
Transparency logRelease files / linkcell-0.3.8-cp312-abi3-win_amd64.whl
| Download URL | linkcell-0.3.8-cp312-abi3-win_amd64.whl |
|---|---|
| Size | 565.3 kB |
| Tags | CPython 3.12 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
c268be55008f8f375d162642a20e393a890f72e900a8ee62b3e8fee1c8d1c282
|
|
BLAKE2b-256 checksum How to use checksums |
ba45a61ca9127f47338534f16679ee163bebaf5202985262a4f41c6004ae7520
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.
Transparency logRelease files / linkcell-0.3.8-cp312-abi3-manylinux_2_28_x86_64.whl
| Download URL | linkcell-0.3.8-cp312-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 483.3 kB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
ea8913910def117f760f4698defd63aa8602c09286a3319d68c1c9deeb122920
|
|
BLAKE2b-256 checksum How to use checksums |
fe7291c53813a104a356b7f8ead1174d373e8812a27372a429b338367f0f8afe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.
Transparency logRelease files / linkcell-0.3.8-cp312-abi3-manylinux_2_28_aarch64.whl
| Download URL | linkcell-0.3.8-cp312-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 453.7 kB |
| Tags | CPython 3.12 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
d2c032a195fbf38e3803e16f586807fca923c12cc96fa8a0d6610bec88e8cd16
|
|
BLAKE2b-256 checksum How to use checksums |
d60a672062e621e639a7bfbbf69d16080c1d4854bda23d2d4b3684f14eb9d013
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.
Transparency logRelease files / linkcell-0.3.8-cp312-abi3-macosx_11_0_arm64.whl
| Download URL | linkcell-0.3.8-cp312-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 421.6 kB |
| Tags | CPython 3.12 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e3f901eebe0dc3d091989368a6fcde18b3bfb1abeecf2c5aa952d7a13021c6b2
|
|
BLAKE2b-256 checksum How to use checksums |
7b342736c49f730783ce88b17411e4999df63691b0ad56d91ead6fcc40755927
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.
Transparency log