Skip to main content

peclet.dem — performance-portable XPBD Discrete Element Method (Kokkos + ArborX)

Project description

peclet-dem (peclet.dem)

PyPI version Python versions License: MIT CI

Performance-portable Discrete Element Method (DEM) particle simulation: an XPBD solver with SDF-based point-shell collision detection. Built on Kokkos + ArborX, so the same source runs on CUDA, HIP (AMD/LUMI), and OpenMP backends (selected at build time by the install prefix). Optional MPI for domain partitioning, with nanobind Python bindings (zero-copy, via scikit-build-core) for scripting and visualization.

The CUDA implementation was retired (2026-06): the Kokkos peclet.dem module was validated against it before the CUDA sources were removed. Restore point: git tag pre-cuda-retirement.

Features

  • Hybrid XPBD Solver: Two-pass velocity/position solver for stable high-density packing.
  • SDF Collision: Point-shell collision detection using Signed Distance Fields (supports analytic shapes like hollow cylinders).
  • Periodicity: Full periodic boundary conditions (Ghost Particles).
  • Python Bindings: Control simulation logic, data initialization, and export entirely from Python.
  • MPI Support: Optional Multi-GPU/Node support via domain decomposition.

Folder Structure

├── CMakeLists.txt              # Build configuration (find_package Kokkos + ArborX)
├── src                         # Kokkos sources (header-only, namespace peclet::dem)
│   ├── dem_bindings.cpp        # nanobind module entry point (the `peclet.dem` module)
│   ├── sim.hpp                 # Simulation facade + the demStep XPBD substep
│   ├── integration.hpp         # Time integration & prediction
│   ├── broadphase_arborx.hpp   # ArborX BVH broad-phase
│   ├── narrowphase.hpp         # Narrow-phase point-shell-vs-SDF collision
│   ├── solver_velocity.hpp     # Velocity solver kernels
│   ├── solver_position.hpp     # Position solver kernels (XPBD overlap removal)
│   ├── solver_friction.hpp     # Coulomb friction cluster
│   ├── output_sdf.hpp          # SDF/VTI grid generation (Eikonal)
│   ├── shapes_portable.hpp     # Analytic shapes (sphere / hollow cylinder / box)
│   ├── io.hpp                  # LAMMPS-dump + SDF-VTI export
│   └── mpi_halo.hpp            # Distributed particle halo (core), gated PECLET_DEM_MPI
├── tests                       # C++ unit tests: kokkos/ (kernels), arborx/, kokkos_mpi/
├── docs                        # Documentation
└── *.py                        # Python verification/example scripts (verify_*.py)

Prerequisites

  • Linux
  • CMake >= 3.24
  • Kokkos 5.x + ArborX (C++20) — provisioned by ../tools/bootstrap_deps.sh into ../extern/install/<backend> (nvidia-cuda / host-openmp / lumi-hip). A hard build dependency.
  • nanobind + scikit-build-core (found via the active Python interpreter; see pyproject.toml)
  • a backend compiler: nvcc (CUDA) on PATH, hipcc (ROCm), or just a host C++ compiler (OpenMP)
  • Python >= 3.10
  • MPI (optional, -DDEM_MPI=ON) — OpenMPI or MPICH

Build Instructions

python -m venv .venv && source .venv/bin/activate && pip install nanobind numpy
export PATH=/usr/local/cuda-13.2/bin:$PATH        # if building the CUDA backend

# Canonical: build + install the module via scikit-build-core
CMAKE_PREFIX_PATH="$PWD/../extern/install/nvidia-cuda" pip install .

# Or a dev cmake build (nanobind is found via the active interpreter, no cmakedir needed):
cmake -B build -S . -DCMAKE_PREFIX_PATH="$PWD/../extern/install/nvidia-cuda"
cmake --build build -j$(nproc)

Swap the prefix to ../extern/install/host-openmp for the OpenMP backend. -DDEM_MPI=ON links MPI and exposes the distributed step (init_mpi / enable_mpi_step / step_mpi), including dynamic load balancing — enable_mpi_step(..., rebalance_every=N) or an explicit rebalance() re-decomposes by particle count (weighted ORB) and migrates ownership so each rank keeps a near-equal share.

The compiled peclet.dem extension is placed in build/peclet/dem/; run scripts with build/ on PYTHONPATH (import peclet.dem).

Running Simulations

Example scripts are provided in the root directory:

# Add build artifact to python path if needed (or symlink it)
export PYTHONPATH=$PYTHONPATH:$(pwd)/build

# Run a verification script
python verify_packing_hollow_cylinders.py

Output & Visualization

The simulation supports two primary output formats:

1. LAMMPS + STL (Ovito)

For particle visualization (especially non-spherical shapes), we use the LAMMPS dump format combined with an STL mesh.

  1. Generate Output: The simulation writes dump.custom.* files.
  2. Generate Shape: Run python generate_particles.py to create particle_shape.stl.
  3. Visualize:
    • Open Ovito.
    • Load the dump.custom.* sequence.
    • Add a Particle Types modifier.
    • Set the shape visualization to Mesh/User-defined and load particle_shape.stl.
    • Ovito will automatically scale the mesh by the particle radius.

See docs/visualization.md for a detailed guide.

2. VTI (ParaView)

For visualizing fields (like the Signed Distance Field or occupancy grids), the simulation exports VTI files (.vti).

  1. Generate Output: Use Simulation.export_sdf("filename.vti", resolution=...).
  2. Visualize:
    • Open ParaView.
    • Load the .vti file.
    • Use "Volume" representation or "Slice" filter to inspect the field.

Status

The single-GPU engine is complete and validated: it reaches stable high-density (random close) packing, and energy is conserved to ~0.3% (see docs/packing_investigation.md). Friction is stabilized for spheres; body-body tangential friction is a known follow-up (currently weaker than ideal). Active work is at-scale multi-GPU/MPI tuning.

[!NOTE] The distributed (MPI) step is validated against the single-rank result (tests/kokkos_mpi, np=1,2,4 on OpenMP + CUDA) and supports dynamic load rebalancing; remaining MPI work is at-scale multi-GPU tuning.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

peclet_dem-0.2.0.tar.gz (396.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

peclet_dem-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl (660.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

peclet_dem-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl (660.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

peclet_dem-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl (662.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

peclet_dem-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl (662.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

File details

Details for the file peclet_dem-0.2.0.tar.gz.

File metadata

  • Download URL: peclet_dem-0.2.0.tar.gz
  • Upload date:
  • Size: 396.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for peclet_dem-0.2.0.tar.gz
Algorithm Hash digest
SHA256 022056b909f9a87c6b9363e3acedc517863879142b40c7a389667706aa764ded
MD5 fda5d5edc5514c94306325f5b5c26b08
BLAKE2b-256 dd995deb070fb646de9eedd3b829f0079cdd0633f0ce4bcd1e3c00c5b04f2bdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for peclet_dem-0.2.0.tar.gz:

Publisher: release.yml on computational-chemical-engineering/peclet-dem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file peclet_dem-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for peclet_dem-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f8208f748b70bbf8c37faeb6b94c65bef66da31712c821cd931feb957dfd59a0
MD5 aa9bf80a0bf4bc3fe13b1f5958c9cf90
BLAKE2b-256 3b4f7282c29bba3428d6bdbf031f61790fb417c33d47a3ef573486f268ddeb15

See more details on using hashes here.

Provenance

The following attestation bundles were made for peclet_dem-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: release.yml on computational-chemical-engineering/peclet-dem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file peclet_dem-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for peclet_dem-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f401944e52ee05838f485e2cde6a813d48f71eab43a1960666cced4eb0c706cd
MD5 0f12f849dd2c1cf8ab172215f55a3af5
BLAKE2b-256 25ce64650d0b28161a207283f89e6eabd97ea140ff86816229d3307e482a8f35

See more details on using hashes here.

Provenance

The following attestation bundles were made for peclet_dem-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: release.yml on computational-chemical-engineering/peclet-dem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file peclet_dem-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for peclet_dem-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 10d85e665d0659dab0f2d684f0345a364a687e206e4aca6426f7a2c307c28596
MD5 a0ae97f6b76562eb4fd511e05d236cda
BLAKE2b-256 14a9c02591538d52dd37683f141ef2ed8cd8e3576160e0235006037fcf2c8e3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for peclet_dem-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: release.yml on computational-chemical-engineering/peclet-dem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file peclet_dem-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for peclet_dem-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0b7a288d8f2af626cacb8c88c536dea42f8b214d8993df32843192ba42fb1c27
MD5 a0275313734ddd9b4a57e54cb1df4a39
BLAKE2b-256 8fee4bc6c2dc2dc3078233f67b5c86c3f7ec6d1c8ab88f03cf73de9710aa5085

See more details on using hashes here.

Provenance

The following attestation bundles were made for peclet_dem-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: release.yml on computational-chemical-engineering/peclet-dem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page