{"id":18863153,"url":"https://github.com/projectchrono/dem-engine","last_synced_at":"2025-04-06T09:06:55.417Z","repository":{"id":63110332,"uuid":"360655520","full_name":"projectchrono/DEM-Engine","owner":"projectchrono","description":"A dual-GPU DEM solver with complex grain geometry support","archived":false,"fork":false,"pushed_at":"2025-01-23T03:21:29.000Z","size":28839,"stargazers_count":80,"open_issues_count":3,"forks_count":16,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-03-30T08:07:30.851Z","etag":null,"topics":["chrono","cuda","discrete-element-method","gpu","multi-gpu","simulation"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/projectchrono.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-22T19:11:07.000Z","updated_at":"2025-03-01T02:42:57.000Z","dependencies_parsed_at":"2023-02-19T01:16:17.444Z","dependency_job_id":"ef530a22-70fb-46b0-82df-7089ef18a29d","html_url":"https://github.com/projectchrono/DEM-Engine","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectchrono%2FDEM-Engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectchrono%2FDEM-Engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectchrono%2FDEM-Engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectchrono%2FDEM-Engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/projectchrono","download_url":"https://codeload.github.com/projectchrono/DEM-Engine/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247457799,"owners_count":20941906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chrono","cuda","discrete-element-method","gpu","multi-gpu","simulation"],"created_at":"2024-11-08T04:36:48.666Z","updated_at":"2025-04-06T09:06:55.401Z","avatar_url":"https://github.com/projectchrono.png","language":"C++","readme":"# SBEL GPU DEM-Engine\n__A dual-GPU DEM solver with complex grain geometry support__\n\n\u003cp\u003e\n  \u003cimg width=\"380\" src=\"https://i.imgur.com/DKGlM14.jpg\"\u003e\n  \u003cimg width=\"380\" src=\"https://i.imgur.com/A3utANi.gif\"\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\n  \u003cimg width=\"380\" src=\"https://i.imgur.com/YOEbAd8.gif\"\u003e\n  \u003cimg width=\"380\" src=\"https://i.imgur.com/4R25TPX.gif\"\u003e\n\u003c/p\u003e\n\n## Quick links\n\n\u003cli\u003e\u003ca href=\"#description\"\u003eOverview, movies of demos, and where to get help\u003c/a\u003e\u003c/li\u003e\n\n\u003cli\u003e\u003ca href=\"#pyDEME\"\u003eUse DEME with Python\u003c/a\u003e\u003c/li\u003e\n\n\u003cli\u003e\u003ca href=\"#compilation\"\u003eHow to compile from source\u003c/a\u003e\u003c/li\u003e\n\n\u003cli\u003e\u003ca href=\"#examples\"\u003eNumerical examples and use cases\u003c/a\u003e\u003c/li\u003e\n\n\u003c!-- \u003cli\u003e\u003ca href=\"#ccontainer\"\u003eContainer\u003c/a\u003e\u003c/li\u003e --\u003e\n\n\u003cli\u003e\u003ca href=\"#install-as-library\"\u003eInstall as C++ library\u003c/a\u003e\u003c/li\u003e\n\n\u003cli\u003e\u003ca href=\"#licensing\"\u003eLicensing\u003c/a\u003e\u003c/li\u003e\n\n\u003cli\u003e\u003ca href=\"#limitations\"\u003eLimitations\u003c/a\u003e\u003c/li\u003e\n\n\u003cli\u003e\u003ca href=\"#citation\"\u003eCite this work\u003c/a\u003e\u003c/li\u003e\n\n\n\u003ch2 id=\"description\"\u003eDescription\u003c/h2\u003e\n\nDEM-Engine, nicknamed _DEME_, does Discrete Element Method simulations:\n\n- Using up to two GPUs at the same time (works great on consumer _and_ data center GPUs).\n- With the particles having complex shapes represented by clumped spheres.\n- With support for customizable contact force models (want to add a non-standard cohesive force, or an electrostatic repulsive force? You got this).\n- With an emphasis on computational efficiency. As a rule of thumb, using 3-sphere clump elements, simulating 1 million elements for 1 million time steps takes around 1 hour on two RTX 3080s.\n- Supporting a wide range of problems with flexible API designs. Deformable meshes and grain breakage can be simulated by leveraging the explicit controls given to the user.\n- With support for co-simulation with other C/C++ packages, such as [Chrono](https://github.com/projectchrono/chrono).\n\nCurrently _DEME_ is a C++ package with an API design similar to Chrono's, and should be easy to learn for existing Chrono users.\n\nYou can find the movies of some of _DEME_'s demos [here](https://uwmadison.app.box.com/s/u4m9tee3k1vizf097zkq3rgv54orphyv).\n\nYou are welcome to discuss _DEME_ on [Project Chrono's forum](https://groups.google.com/g/projectchrono). \n\n\u003ch2 id=\"pyDEME\"\u003ePyDEME\u003c/h2\u003e\n\n_DEME_ is now available as a Python package, _pyDEME_. It is quick to install and pick up its usage by trying this Python version. If you want to maximize the performance and use the cutting-edge features, you can instead \u003ca href=\"#compilation\"\u003einstall the C++ version of _DEME_ from source\u003c/a\u003e.\n\nTo install _pyDEME_, use a Linux machine, install CUDA if you do not already have it. Useful installation instructions may be found [here](https://developer.nvidia.com/cuda-downloads). \n\nSome additional troubleshooting tips for getting CUDA ready:\n\n- I recommend getting the newest CUDA. But note that the recent releases CUDA 12.1, 12.2 and 12.3 appear to cause troubles with jitify and you should not use them with DEME.\n- On WSL this code may be buildable (and [this](https://docs.nvidia.com/cuda/wsl-user-guide/index.html) is the guide for installing CUDA on WSL), but may not run. This is due to the [many limitations on unified memory and pinned memory support](https://docs.nvidia.com/cuda/wsl-user-guide/index.html#known-limitations-for-linux-cuda-applications) on WSL. We are looking into it and for now, a native Linux machine or cluster is recommended.\n\nOnce CUDA is ready, you can `pip` install _pyDEME_. In your conda environement, do\n```\nconda create -n pyDEME python=3.11\nconda activate pyDEME\nconda install cmake\npip3 install DEME\n```\n\n~~You can also install pyDEME via `conda install`:~~ (Please don't use `conda install` for now, it is not yet behaving correctly)\n\n~~`conda create -n pyDEME python=3.11`~~\n\n~~`conda activate pyDEME`~~\n\n~~`conda install -c projectchrono pydeme`~~\n\n`pyDEME` can be replaced with an environement name of your choice. Other Python versions other than 3.11 should work as well.\n\nThen [Python scripts](https://github.com/projectchrono/DEM-Engine/tree/pyDEME_demo/src/demo) can be executed in this environment. To understand the content of each Python demo, refer to the explanations of the C++ demos with the same names in **Examples** section.\n\n\u003ch2 id=\"compilation\"\u003eCompilation\u003c/h2\u003e\n\nYou can also build C++ _DEME_ from source. It allows for potentially more performance and more tailoring.\n\nOn a Linux machine, [install CUDA](https://developer.nvidia.com/cuda-downloads). The newest release is recommended.\n\nOnce CUDA is ready, clone this project and then:\n\n```\ngit submodule init\ngit submodule update\n```\n\nThis will pull the submodule NVIDIA/jitify so that we can do runtime compilation. \n\nThen, one typical choice is to make a build directory in it. Then in the build directory, use `cmake` to configure the compilation. An example:\n\n```\nmkdir build\ncd build\ncmake -DCMAKE_BUILD_TYPE=Release ..\n```\n\nYou may want to use [this information](https://askubuntu.com/questions/1203635/installing-latest-cmake-on-ubuntu-18-04-3-lts-run-via-wsl-openssl-error) if you need to update cmake to the newest. \n\nWe suggest that you install a `cmake` GUI such as `ccmake`, and `ninja_build` generator, to better help you configure the project. In this case, the example above can be done like this alternatively:\n\n```\nmkdir build\ncd build\nccmake -G Ninja ..\n```\n\nYou generally do not have to change the build options in the GUI, but preferably you can change `CMAKE_BUILD_TYPE` to `Release`, and if you need to install this package as a library you can specify a `CMAKE_INSTALL_PREFIX`. \n\nSome additional troubleshooting tips for generating the project:\n\n- If some dependencies such as CUB are not found, then you probably need to manually set `$PATH` and `$LD_LIBRARY_PATH`. An example is given below for a specific version of CUDA, note it may be different on your machine or cluster. You should also inspect if `nvidia-smi` and `nvcc --version` give correct returns.\n```\nexport CPATH=/usr/local/cuda-12.5/targets/x86_64-linux/include${CPATH:+:${CPATH}}\nexport PATH=/usr/local/cuda-12.5/bin${PATH:+:${PATH}}\nexport PATH=/usr/local/cuda-12.5/lib64/cmake${PATH:+:${PATH}}\nexport LD_LIBRARY_PATH=/usr/local/cuda-12.5/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}\nexport CUDA_HOME=/usr/local/cuda-12.5\n```\n\nFinally, build the project.\n\n```\nninja\n```\n\nSome additional troubleshooting tips for building the project:\n\n- If you see some grammatical errors during compilation, such as `filesystem` not being a member of `std` or arguments not expanded with `...`, then manually setting the flag `TargetCXXStandard` to `STD_CXX17` might help.\n- If CUB is not found, then you may manually set it in the `ccmake` GUI as `/usr/local/cuda/lib64/cmake/cub`. It may be a slightly different path on your machine or cluster.\n- If `libcudacxx` is not found, then you may manually set it in the `ccmake` GUI as `/usr/local/cuda-12.0/targets/x86_64-linux/lib/cmake/libcudacxx`. Depending on your CUDA version it may be a slightly different path on your machine or cluster. You may also try to find these packages using `find`.\n\n\u003ch2 id=\"examples\"\u003eExamples\u003c/h2\u003e\n\nAfter the build process is done, you can start trying out the demos.\n\n- `./bin/DEMdemo_SingleSphereCollide` can be used to test a correct installation. If it runs outputting a lot of texts (those are debug messages; the user do not have to worry about the content) and stops without an error in the end, the installation is probably good.\n- An all-rounder beginner example featuring a bladed mixer interacting with complex shaped particles: `./bin/DEMdemo_Mixer`.\n- A place to learn how prescribed motions work in this package, using either analytical boundaries or particle-represented boundaries: `./bin/DEMdemo_Centrifuge` and `./bin/DEMdemo_Sieve`.\n- A few representative engineering experiments reproduced in DEM simulations, which potentially serve as starting points for your own DEM scripts: `/bin/DEMdemo_BallDrop`, `./bin/DEMdemo_ConePenetration`, `/bin/DEMdemo_RotatingDrum`, `./bin/DEMdemo_Repose`, `./bin/DEMdemo_Plow`.\n- `./bin/DEMdemo_WheelDP` shows how to load a checkpointed configuration file to instantly generate a settled granular terrain, then run a drawbar-pull test on it. This demo therefore requires you to first finish the two GRCPrep demos to obtain the terrain checkpoint file. The granular terrain in these demos features DEM particles with a variety of sizes and shapes.\n- `./bin/DEMdemo_WheelDPSimplified` is a simplified version of the previous drawbar-pull test which has no prerequisite. The terrain is simpilified to be made of only one type of irregular-shaped particles. It serves as a quick starting point for people who want to create similar experiments.\n- `./bin/DEMdemo_Indentation` is a more advanced examples showing the usage of the custom additional properties (called _wildcards_) that you can associate with the simulation entities, and use them in the force model and/or change them in simulation then deposit them into the output files. _Wildcards_ have more use cases especially if coupled together with a custom force model, as shown in some of the follwing demos.\n- `./bin/DEMdemo_Electrostatic` simulates a pile of complex-shaped and charged granular particles interacting with a mesh that is also charged. Its purpose is to show how to define a non-local force (electrostatic force) which takes effect even when the bodies are not in contact, using a custom force model file. This idea can be extended to modeling a custom cohesion force etc.\n- `./bin/DEMdemo_FlexibleMesh` simulates a deforming mesh interacting with DEM particles. The intention is to show that the user can extract the force pairs acting on a mesh, then update the mesh with deformation information. _DEME_ does not care how this deformation is calculated. Presumably the user can feed the forces to their own solid mechanics solver to get the deformation. _DEME_ does not come with a built-in linear solver so for simplicity, in this demo the mesh deformation is instead prescribed.\n- `./bin/DEMdemo_GameOfLife` is a fun game-of-life simulator built with the package, showing the flexibility in terms of how you can use this tool.\n- `./bin/DEMdemo_Fracture_Box` simulates a concrete bar breaking using a custom force model that creates inter-particle bonds and lets them break under certain conditions. This is a showcase for advanced usage of custom models that involves per-contact wildcard variables.\n- It is a good idea to read the comment lines at the top of the demo files to understand what they each does.\n\n[The documentations for _DEME_](https://api.projectchrono.org/) are hosted on Chrono website (work in progress).\n\nSome additional troubleshooting tips for running the demos:\n\n- If errors similar to `CUDA_ERROR_UNSUPPORTED_PTX_VERSION` are encountered while you run the demos, or (rarely) the simulations proceed without detecting any contacts, then please make sure the CUDA installation is the same version as when the code is compiled.\n- Another cause for the simulations proceeding without detecting any contacts, could be the force kernel silently failed. This could also lead to a **too-many-geometries-in-bin** crash. The cause is usually that the force kernel was launched with too many threads per block, therefore not enough registers can be leveraged. This can be avoided by calling `SetForceCalcThreadsPerBlock` prior to the start of simulation with the argument being 256 or even smaller choices like 128.\n- Used your own force model but got runtime compilation error like `expression must have pointer-to-object type but it has type \"float\"`, or `unknown variable \"delta_time\"`? Check out what we did in demo `DEMdemo_Electrostatic`. You may need to manually specify what material properties are pairwise and what contact wildcards you have using `SetMustPairwiseMatProp` and `SetPerContactWildcards`.\n- Just running provided demos or a script that used to work, but the jitification of the force model failed or the simulation fails at the first kernel call (probably in `DEMCubContactDetection.cu`)? Then did you pull a new version and just re-built in-place? A new update may modify the force model, and the force model in _DEME_ are given as text files so might not be automatically copied over when the project is re-built. I am sorry for the trouble it might cause, but you can do a clean re-build from an empty directory and it should fix the problem. Do not forget to first commit your own branches' changes and relocate the data you generated in the build directory. Another solution is to copy everything in `src/DEM` to the `DEM` directory in the build directory, then everything in `src/kernel` to the `kernel` directory in the build directory, then try again.\n\n\u003c!-- \u003ch2 id=\"ccontainer\"\u003eUsing DEME in Container\u003c/h2\u003e\n\n_DEME_ is now [hosted on DockerHub](https://hub.docker.com/r/uwsbel/dem-engine) for those who want to run it in a container. It can potentially save your time that would otherwise be spent on getting the dependencies right, and for you to test out if _DEME_ is what you needed.\n\nOn a Linux machine, [install CUDA](https://developer.nvidia.com/cuda-downloads). Then install [docker](https://docs.docker.com/desktop/install/linux-install/) depending on your OS. Then [install Nvidia container toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) for running GPU-based containers. Things to note about installing the prerequisites:\n\n- Got `Docker daemon permission denied` error? Maybe try [this page](https://stackoverflow.com/questions/48957195/how-to-fix-docker-got-permission-denied-issue).\n- You can install the newest CUDA for running the container. However, I still recommend CUDA 12.0 or a CUDA 11 distro.\n\nAfter those are done, you can launch the container by doing this in a Linux command prompt: `docker run -it --gpus all uwsbel/dem-engine:latest`\n\nThen the source code along with a pre-built _DEME_ can be found in `/DEM-Engine` and `/DEM-Engine/build`. See **Examples** section for running example simulations. \n\nStarting from this point, you can start adding new scripts or modify existing ones for your own simulations. You can also build and run your newly added code, and commit the modified container as needed. If you encounter problems when re-building the project in the container, then you may refer to the troubleshooting tips in the **Installation** section for help, or turn to the [forum](https://groups.google.com/g/projectchrono).\n\nNote that the container imagine is not updated as often for bug-fixes and new features as the GitHub repo.  --\u003e\n\n\u003ch2 id=\"limitations\"\u003eLimitations\u003c/h2\u003e\n\n_DEME_ is designed to simulate the interaction among clump-represented particles, the interaction between particles and mesh-represented bodies, as well as the interaction between particles and analytical boundaries. _DEME_ does not resolve mesh\u0026ndash;mesh or mesh\u0026ndash;analytical contacts.\n\n- It is able to handle mesh-represented bodies with relatively simple physics, for example a meshed plow moving through granular materials with a prescribed velocity, or several meshed projectiles flying and hitting the granular ground. \n- However, if the bodies' physics are complex multibody problems, say it is a vehicle that has joint-connected parts and a motor with certain driving policies, or the meshed bodies have collisions among themselves that needs to be simulated, then _DEME_ alone does not have the infrastructure to handle them. But you can install _DEME_ as a library and do coupled simulations with other tools such as [Chrono](https://github.com/projectchrono/chrono), where _DEME_ is exclusively tasked with handling the granular materials and the influence they exert on the outside world (with high efficiency, of course). See the following section.\n\n\u003ch2 id=\"install-as-library\"\u003eInstall as library\u003c/h2\u003e\n\nSet the `CMAKE_INSTALL_PREFIX` flag in `cmake` GUI to your desired installation path and then \n\n```\nninja install\n```\n\nWe provide examples of linking against both [Chrono](https://github.com/projectchrono/chrono) and _DEME_ for co-simulations in [chrono-projects](https://github.com/projectchrono/chrono-projects/tree/feature/DEME). You need to checkout the `feature/DEME` branch after cloning the code.\n\nYou need to build `chrono-projects` linking against a Chrono installation (Chrono installation guide is [here](https://api.projectchrono.org/tutorial_install_chrono_linux.html); note you have to `make install` to install Chrono, not just build it), then link against _DEME_. The steps for building `chrono-projects`:\n\n- Start by linking against Chrono. Set `Chrono_DIR`. It should be in `\u003cyour_Chrono_install_dir\u003e/lib/cmake`. Then configure the project;\n- Make sure `ENABLE_PROJECTS` to `ON` and configure the project;\n- Linkage against Chrono is done, now move on to link against _DEME_. Set `ENABLE_DEME_TESTS` to `ON`. Then configure the project;\n- Set `DEME_DIR` when prompted. It should be in `\u003cyour_DEME_install_dir\u003e/lib64/cmake/DEME`. Then configure the project.\n- You may see the `ChPF_DIR` option being prompted. If you did not build _DEME_ with USE_CHPF being ON, you can ignore this option. Otherwise CMake will refuse to generate, and you need to set this option to be `\u003cyour_DEME_install_dir\u003e/lib64/cmake/ChPF`.\n\nThen build the project and you should be able to run the demo scripts that demonstrate the co-simulation between _DEME_ and Chrono.\n\nMore documentations on using this package for co-simulations are being added.\n\n\u003ch2 id=\"licensing\"\u003eLicensing\u003c/h2\u003e\n\nThis project should be treated as the collective intellectual property of the Author(s) and the University of Wisconsin - Madison. The following copyright statement should be included in any new or modified source files\n```\nCopyright (c) 2021, Simulation-Based Engineering Laboratory\nCopyright (c) 2021, University of Wisconsin - Madison\n\nSPDX-License-Identifier: BSD-3-Clause\n```\n\nNew authors should add their name to the file `CONTRIBUTORS.md` rather than to individual copyright headers.\n\n#### Notes on code included from Project Chrono\n\nThis project exists independently of Chrono so developers should be sure to include the appropriate BSD license header on any code which is sourced from Chrono::GPU(DEM) or other parts of Chrono.\n\n\u003e #### SAMPLE header for files sourced from Chrono\n\n\u003e ```\n\u003e Copyright (c) 2021, SBEL GPU Development Team\n\u003e Copyright (c) 2021, University of Wisconsin - Madison\n\u003e \n\u003e SPDX-License-Identifier: BSD-3-Clause\n\u003e \n\u003e \n\u003e This file contains modifications of the code authored by the Project Chrono \n\u003e Development Team. The original license can be found below:\n\u003e\n\u003e Copyright (c) 2016, Project Chrono Development Team\n\u003e All rights reserved.\n\u003e \n\u003e Use of this source code is governed by a BSD-style license that can be found\n\u003e in the LICENSE file at the top level of the distribution and at\n\u003e http://projectchrono.org/license-chrono.txt. A copy of the license is below.\n\u003e\n\u003e Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\u003e \n\u003e  - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. \n\u003e  - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. \n\u003e  - Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. \n\u003e \n\u003e THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\u003e ```\n\n\u003ch2 id=\"citation\"\u003eCitation\u003c/h2\u003e\n\nSee [the paper that explains the design and usage of _DEME_](https://www.sciencedirect.com/science/article/pii/S001046552400119X?via%3Dihub) and cite\n```bibtex\n@article{zhang_2024_deme,\ntitle = {Chrono {DEM-Engine}: A Discrete Element Method dual-{GPU} simulator with customizable contact forces and element shape},\njournal = {Computer Physics Communications},\nvolume = {300},\npages = {109196},\nyear = {2024},\nissn = {0010-4655},\ndoi = {https://doi.org/10.1016/j.cpc.2024.109196},\nauthor = {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ţ},\nkeywords = {Discrete Element Method, GPU computing, Physics-based simulation, Scientific package, BSD3 open-source},\n}\n```\n\nSee [the paper on using _DEME_ for simulating rover dynamics](https://link.springer.com/article/10.1007/s00366-023-01921-9) and cite\n```bibtex\n@article{ruochunGRC-DEM2023,\n      title={A {GPU}-accelerated simulator for the {DEM} analysis of granular systems composed of clump-shaped elements}, \n      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},\n      year={2024},\n      journal={Engineering with Computers},\n      doi={https://doi.org/10.1007/s00366-023-01921-9}\n}\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprojectchrono%2Fdem-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprojectchrono%2Fdem-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprojectchrono%2Fdem-engine/lists"}