DEM-Engine
GPU-accelerated discrete element simulation with C++ and Python APIs.
DEM-Engine (DEME) simulates granular materials using one or two NVIDIA GPUs. This branch supports sphere clumps, mesh particles, analytical boundaries, rigid combined owners, and customizable contact force models. It also provides an interactive visualizer and host/device data access for co-simulation.
Why use DEME?
DEME is designed for large granular simulations where particle shape, contact physics, and computational cost matter. Typical applications include mixing, hopper flow, soil penetration, wheel–terrain interaction, and granular impact.
- Complex particle shapes. Represent grains with clumped spheres or mesh particles, and build rigid assemblies with combined owners.
- Custom contact physics. Define your own contact force models, including cohesion, electrostatic interactions, and bonds that can break. Material properties and per-contact variables let you tailor the model to your problem.
- GPU performance. Use one or two NVIDIA GPUs, including consumer and data center hardware. As an illustrative benchmark from the main-branch README, one million three-sphere clumps simulated for one million timesteps takes around one hour on two RTX 3080s. Runtime depends on the geometry, contact model, and simulation settings.
- Control over the simulation. Prescribe motion, extract forces, and update geometry to model processes such as mesh deformation or grain breakage. The examples show how to supply these behaviors through the API.
- Co-simulation. Couple DEME to other solvers, such as Chrono, for multibody dynamics or other physics. Host and GPU data access support exchanging state and forces.
- C++ and Python workflows. Start with Python or integrate the C++ library into an application. The C++ API follows a Chrono-like design, and the interactive visualizer helps inspect simulations as they run.
Start here
| Task | Documentation |
|---|---|
| Install Python, build C++, or install the C++ library | Installation |
| Run a first simulation | Quickstart · Python example |
| Understand owners, families, frames, and runtime setup | Core concepts |
| Use mesh particles, templates, and combined bodies | Mesh particles |
| Find a demo to adapt | Examples · C++ sources |
| Use Python | Python guide · Demos · API reference |
| Look up the C++ API | C++ reference |
| Select GPUs or exchange simulation data | Device selection · Data access |
| Visualize results | Interactive visualization and ParaView |
| Diagnose installation or runtime errors | Troubleshooting |
| Build or host the documentation website | Build and preview · Hosting |
| Contribute or cite DEME | Project information · Architecture |
The documentation index collects the complete guide. The C++ reference is rendered from Doxygen by the documentation build; build the site to browse C++ declarations and Python documentation together.
Python in brief
On a supported Linux or WSL2 host with a CUDA 12.9-compatible NVIDIA driver:
python -m pip install "deme[cuda12]"
The cuda12 extra installs CUDA runtime libraries, NVRTC, and headers through pip;
no system CUDA Toolkit installation is needed for Python wheels. This setup applies
only to the Python extension; standalone C++ applications keep their normal CUDA
configuration. Use plain pip install deme to
use an existing toolkit. Preview builds from Mesh_Particles_Py are published as
deme3 (pip install "deme3[cuda12]"), with the same import deme namespace.
import deme
solver = deme.DEMSolver()
See installation requirements for wheel compatibility
and source builds. New scripts should use import deme; import DEME remains
a compatibility alias. Features in this checkout may be newer than a released wheel.
Community and license
Demo videos · Project Chrono forum · Contributors · BSD-3-Clause license · Citation
Citation
If you use DEME in your research, please cite the DEM-Engine design and usage paper:
@article{zhang_2024_deme,
title = {Chrono {DEM-Engine}: A Discrete Element Method dual-{GPU} simulator with customizable contact forces and element shape},
journal = {Computer Physics Communications},
volume = {300},
pages = {109196},
year = {2024},
issn = {0010-4655},
doi = {https://doi.org/10.1016/j.cpc.2024.109196},
author = {Ruochun Zhang and Bonaventura Tagliafierro and Colin {Vanden Heuvel} and Shlok Sabarwal and Luning Bakke and Yulong Yue and Xin Wei and Radu Serban and Dan Negruţ},
keywords = {Discrete Element Method, GPU computing, Physics-based simulation, Scientific package, BSD3 open-source},
}
For the clump-based granular solver and its application to rover dynamics, see the granular simulation paper:
@article{ruochunGRC-DEM2023,
title={A {GPU}-accelerated simulator for the {DEM} analysis of granular systems composed of clump-shaped elements},
author={Ruochun Zhang and Colin {Vanden Heuvel} and Alexander Schepelmann and Arno Rogg and Dimitrios Apostolopoulos and Samuel Chandler and Radu Serban and Dan Negrut},
year={2024},
journal={Engineering with Computers},
doi={https://doi.org/10.1007/s00366-023-01921-9}
}
Metadata
Release files for deme3 3.0.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| deme3-3.0.12-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.14 | CPython 3.14 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| deme3-3.0.12-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| deme3-3.0.12-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| deme3-3.0.12-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| deme3-3.0.12-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| deme3-3.0.12-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.9 | CPython 3.9 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
Total release size: 307.4 MB
Release files / deme3-3.0.12-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | deme3-3.0.12-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 51.2 MB |
| Tags | CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
e4c46ada68fc6fececd5f24a1fc0bfcb21fcb2f5c4ff6a1e7aa9300969fc7dc7
|
|
BLAKE2b-256 checksum How to use checksums |
d880c4a4d71bd5133badad02227aa6483aeea1d452d40ad5b5ffbb052aff4627
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 15, 2026.
Transparency logRelease files / deme3-3.0.12-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | deme3-3.0.12-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 51.2 MB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
c5ac5259a657279f8162b297bdac0f660c0461bdae693206fc1b73ec490ed281
|
|
BLAKE2b-256 checksum How to use checksums |
5c1af2623dd5554024effade9be46ca9f6b3f7f14ea47f9852d6905fd97d653c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 15, 2026.
Transparency logRelease files / deme3-3.0.12-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | deme3-3.0.12-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 51.2 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
5f1d2ebf07a3efc216a579c7191362930d76189365a7b32289a84b962b5788e0
|
|
BLAKE2b-256 checksum How to use checksums |
d025f3c430f22b9a4e443bd110d5e2ed70dc3f631a90aeebfd896ecec229c5dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 15, 2026.
Transparency logRelease files / deme3-3.0.12-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | deme3-3.0.12-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 51.2 MB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
c82a542fd210d197cefcd6b983ced6ecf731a65494d8aaea1ccabd3fc76a62ed
|
|
BLAKE2b-256 checksum How to use checksums |
b38e9e6cc1047c77c4e2f99c0e17957110d7228ec8e6372fbbb91c329443ff77
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 15, 2026.
Transparency logRelease files / deme3-3.0.12-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | deme3-3.0.12-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 51.2 MB |
| Tags | CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
4d834f0e8d2cfc323ff65af053c3da406cc33f9d080bdb02a692a7183e14a411
|
|
BLAKE2b-256 checksum How to use checksums |
8c4c694afa602dbfe3ca3086efaefedc27ebc8ae4e6ef029fc724ca1167c20a6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 15, 2026.
Transparency logRelease files / deme3-3.0.12-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | deme3-3.0.12-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 51.2 MB |
| Tags | CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
aab8e2cd40590647d9b2de1b679d04b5315cc2f86ff132be37573e47e6709839
|
|
BLAKE2b-256 checksum How to use checksums |
e166e11f71a39c143a74f92d8d44a89c3273cab2c360687c03cb852cabec6d3b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 15, 2026.
Transparency log