Skip to content

joehart2001/cuRDF

Repository files navigation

cuRDF logo


DOI PyPI

CUDA-accelerated radial distribution functions using NVIDIA ALCHEMI Toolkit-Ops O(N) neighbor lists and PyTorch. Compatible with ASE Atoms or MDAnalysis Universe objects.

GPU required: An NVIDIA GPU with CUDA is needed. For CUDA version selection, PyTorch wheel setup (CUDA 12 vs 13) and more information, see the Toolkit-Ops installation guide.

Benchmarking

cuRDF benchmark

cuRDF is benchmarked against other RDF (MDAnalysis) and neighbour list implementations on CPU (AMD Ryzen 9 9950X, 32 threads) and GPU (NVIDIA RTX 5090) for systems of varying sizes at a density of 0.05 atoms/ų over 1000 frames. Benchmarks use random positions in cubic cells sized to maintain a fixed number density (orthorhombic boxes, periodic in all directions).

Install

Latest release:

pip install cuRDF

For development:

git clone https://github.com/joehart2001/curdf.git
cd curdf
pip install -e .

Quickstart

ASE Atoms object:

from ase.io import read
from curdf import rdf

# Load trajectory or frame e.g. XYZ, extxyz, traj, LAMMPS data/dump
atoms = read("md_run.extxyz")

# Compute RDF between species C and O from 1.0 to 8.0 Å
bins, gr = rdf(
  atoms,
  species_a="C",
  species_b="O", # species b can be the same as species a
  r_min=1.0,
  r_max=8.0,
  nbins=200, # resolution of rdf histogram binning
  method="cell_list", # neighbor list method: "cell_list" (larger systems) or "naive" (smaller systems, less overhead)
  output = "results/rdf.csv" # optional output
)

# Plot RDF
plot_rdf(bins, gr, path="results/rdf.png")

MDAnalysis Universe (topology and trajectory):

import MDAnalysis as mda
from curdf import rdf

u = mda.Universe("topology.data", "traj.dcd", atom_style="id type x y z")
bins, gr = rdf(
  u,
  species_a="C",
  species_b="O",
  r_min=1.0,
  r_max=8.0,
)

If the topology lacks atom names (only numeric types), supply a mapping:

bins, gr = rdf(
  u, 
  species_a="C", 
  species_b="O", 
  atom_types_map={1: "C", 2: "H"}
)

Validation

RDFs for liquid water (64 atoms, 1 ns) computed using a trajectory from Lim et al. (2026) match reference curves for all pairs:

O–O RDF H–H RDF O–H RDF

Citation

If you use cuRDF in your work, please cite:

@software{cuRDF,
  author    = {Hart, Joseph},
  title     = {cuRDF: CUDA-accelerated radial distribution functions using NVIDIA ALCHEMI Toolkit-Ops O(N) neighbor lists and PyTorch.},
  month     = jun,
  year      = 2026,
  publisher = {Zenodo},
  version   = {0.5.4},
  doi       = {10.5281/zenodo.20613283},
  url       = {https://doi.org/10.5281/zenodo.20613283}
}

About

CUDA-accelerated radial distribution functions using NVIDIA ALCHEMI Toolkit-Ops O(N) neighbor lists and PyTorch.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages