dem_wall 0.1.3

General plane wall contact forces with Hertz repulsion for MDDEM simulations
Documentation

dem_wall

General plane wall contact forces for MDDEM simulations. Walls are defined by a point and normal vector, supporting both axis-aligned and angled walls.

Features

  • Hertz elastic contact with viscoelastic damping (same model as particle-particle contacts)
  • General plane geometry — any orientation, not just axis-aligned
  • Optional bounding box to clip walls to finite regions
  • Named walls with runtime toggling via walls.deactivate_by_name("blocker")
  • Multiple walls per simulation

Configuration

# Axis-aligned floor wall
[[wall]]
point_x = 0.0
point_y = 0.0
point_z = 0.0
normal_x = 0.0
normal_y = 0.0
normal_z = 1.0
material = "glass"

# Angled funnel wall with bounding box
[[wall]]
point_x = 0.0
point_y = 0.0
point_z = 0.05
normal_x = 0.919
normal_y = 0.0
normal_z = 0.394
material = "glass"
bound_z_low = 0.015
bound_z_high = 0.05

# Named wall (can be deactivated at runtime)
[[wall]]
point_x = 0.0
point_y = 0.0
point_z = 0.015
normal_x = 0.0
normal_y = 0.0
normal_z = 1.0
material = "glass"
name = "blocker"

Runtime Wall Control

Walls can be activated/deactivated by name during simulation, useful for staged simulations like hoppers:

fn check_settled(mut walls: ResMut<Walls>, mut next_state: ResMut<NextState<Phase>>) {
    walls.deactivate_by_name("blocker");
    next_state.set(Phase::Flowing);
}

Usage

use mddem::prelude::*;

let mut app = App::new();
app.add_plugins(CorePlugins)
    .add_plugins(GranularDefaultPlugins)
    .add_plugins(WallPlugin);
app.start();

Part of the MDDEM workspace.