PeriDEM
High-fidelity modeling of granular media consisting of deformable complex-shaped particles
Install / Use
/learn @prashjha/PeriDEMREADME
PeriDEM - High-fidelity modeling of granular media consisting of deformable complex-shaped particles
<p align="center"> <img src="./assets/logo/logo.png" width="400"> </p>Table of contents
- Introduction
- Documentation
- Tutorial
- Examples
- Brief implementation details
- Installation
- Running simulations
- Visualizing results
- Developers
Introduction
Implementation of the high-fidelity model of granular media that combines the advantages of peridynamics and the discrete element method (DEM). The model has the following advantages over existing mechanical models for granular media:
- handle intra-particle deformation and breakage/damage
- handle the arbitrary shape of the particle. Inter-particle contact is not specific to any shape of the particle
- tunable inter-particle contact parameters
- easy to add different mechanical constitutive laws within peridynamics for individual particle deformation
For more details about the model and results, we refer to the paper:
Prashant K. Jha, Prathamesh S. Desai, Debdeep Bhattacharya, Robert P Lipton (2020). Peridynamics-based discrete element method (PeriDEM) model of granular systems involving breakage of arbitrarily shaped particles. Journal of the Mechanics and Physics of Solids, 151, p.104376. Doi https://doi.org/10.1016/j.jmps.2021.104376. Download pdf here.
PeriDEM is published as a software article in the Journal of Open Source Software:
Prashant K. Jha (2025). PeriDEM -- High-fidelity modeling of granular media consisting of deformable complex-shaped particles Journal of Open Source Software, vol. 10, 116, p.7525, DOI 10.21105/joss.07525. Download pdf here.
We have created channels on various platforms:
- PeriDEM on Gitter
- Gitter is absolutely open and easy to join.
- PeriDEM on slack
- Email us if interested in joining the workspace.
Documentation
Doxygen generated documentation details functions and objects in the library.
Tutorial
We explain the setting-up of simulations in further details in tutorial.
We consider two-particle test setup with non-circular particles and compressive-test to
discuss the various aspects of simulations.
Examples
We next highlight some key examples. Further details are available in examples/README.md.
Two-particle tests
| <img src="./assets/two_particle_circ_no_damp.gif" width="200"> | <img src="./assets/two_particle_circ_damp.gif" width="200"> | |:-------------------------------------------------------------------------:|:--------------------------------------------------------------------:| | Circular without damping | Circular with damping |
| <img src="./assets/two_particle_circ_diff_material.gif" width="200"> | <img src="./assets/two_particle_circ_damp_diff_radius.gif" width="200"> | <img src="./assets/two_particle_circ_diff_radius_diff_material.gif" width="200"> | |:--------------------------------------------------------------------------:|:---------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------:| | Different materials | Different radius | Different radius different material |
Two-particle with wall test
| <img src="./assets/two_particle_wall_concave_diff_material_diff_size.gif" width="400"> | |:------------------------------------------------------------------------------------------:| | Concave particles |
Compressive tests
Setup for this test consists of 502 circular and hexagonal-shaped particles of varying radius and orientation inside a rectangle container. The container's top wall is moving downward at a prescribed speed, resulting in the compression of the particle system. The quantity of interest is the compressive strength of the media. The reaction force (downward) on the moving wall should increase with the increasing penetration of this wall; however, after a certain amount of compression of the media, the damage will initiate in individual particles, especially those connected by force chains, resulting in the yielding of the system. For more details, we refer to Jha et al. 2021
| <img src="./assets/compressive_test.gif" width="600"> | |:-----------------------------------------------------:| | Compressive test simulation |
Attrition tests
We consider mix of different particles in a rotating container. Particles considered include circular, triangular, hexagonal, and drum shaped. Particles come in large and small shapes (their sizes are purturbed randomly). In order to to introduce diversity of material properties, we considered large particles to be tougher compared to the smaller ones. Setup files are in examples/PeriDEM/attrition_tests
| <img src="./assets/attrition_test_sim1.gif" width="250"> | <img src="./assets/attrition_test_sim2.gif" width="250"> | |:----------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | Rotating cylinder (setup) | Rotating cylinder with center of rotation offset (setup) |
Complex container geometries can be considered as well. For example, the image below is from attrition_tests and includes rotating rectangle with opening and internal groves of different shapes. The rotating container with particles inside is contained within another rectangle which is fixed in its place.
<img src="./examples/PeriDEM/attrition_tests/sim4_multi_particle_circ_tri_drum_hex_with_rotating_rectangle_container_with_protrusion_and_opening_within_bigger_rectangle_container/init_view.png" width="600">Single particle deformation
We can use PeriDEM executable or Peridynamics executable in apps directory to simulate the deformation of single particle/structure using peridynamics. See examples/README.md and examples/Peridynamics folder.
Brief implementation details
The main implementation of the model is carried out in the model directory dem.
The model is implemented in class DEMModel.
Function DEMModel::run() performs the simulation. We next look at some key methods in DEMModel in more details:
DEMModel::run()
This function does three tasks:
void model::DEMModel::run(inp::Input *deck) {
// initialize data
init();
// check for restart
if (d_modelDeck_p->d_isRestartActive)
restart(deck);
// integrate
