Discrete Element Method (DEM) physics in the GRASS → SOIL → DIRT stack.
GRASS framework: App, Plugin, Scheduler, IO, coupling
└─ SOIL substrate: Atom, domain decomposition, comm, neighbor lists
└─ DIRT DEM physics: contact, bonds, walls, clumps ← you are here
DIRT resolves every inter-particle contact individually, riding the SOIL substrate for all the method-agnostic machinery (atom data, domain decomposition, halo exchange, neighbor lists). It adds the granular physics: Hertz–Mindlin contact, rotational dynamics, parallel bonds, walls, multisphere clumps, heat conduction, and contact analysis.
dirt_core is the batteries-included umbrella crate (depend on this):
use dirt_core::prelude::*;
fn main() {
let mut app = App::new();
app.add_plugins(CorePlugins).add_plugins(GranularDefaultPlugins);
app.start();
}| crate | role |
|---|---|
dirt_core |
umbrella: CorePlugins, GranularDefaultPlugins, prelude |
dirt_atom |
per-atom DEM data (DemAtom), materials, particle insertion |
dirt_granular |
Hertz/Mindlin contact, rolling/twisting, adhesion, rotational dynamics |
dirt_wall |
plane/cylinder/sphere/cone/region-surface walls, with Mindlin wall friction |
dirt_bond |
bonded-particle model: normal/shear/twist/bending beam, breakage, plasticity |
dirt_clump |
multisphere/clump rigid composites |
dirt_contact_analysis |
coordination number, fabric tensor, rattlers |
dirt_measure_plane |
measurement planes for flux/profiles |
dirt_fixes |
DEM group fixes: add/set force, freeze, pin, prescribed motion, viscous damping, gravity |
dirt_test_utils |
shared test helpers |
Clone DIRT and build — its soil and grass dependencies are pulled from GitHub automatically, so you don't need to check them out yourself:
git clone https://github.com/SueHeir/dirt
cd dirt
cargo run --release --example hopper --no-default-features -- examples/hopper/config.tomlMIT OR Apache-2.0