dem_granular 0.1.3

Granular physics for MDDEM: Hertz normal contact, Mindlin tangential friction, rotational dynamics
Documentation

dem_granular

Granular physics for MDDEM: Hertz normal contact, Mindlin tangential friction, and rotational dynamics.

Physics Models

Hertz Normal Contact (HertzNormalForcePlugin)

Elastic Hertz contact with viscoelastic damping (equivalent to LAMMPS pair_style granular hertz/material):

  • Normal force: F_n = k_n * delta^(3/2) - gamma_n * v_n
  • Effective stiffness: k_n = (4/3) * E* * sqrt(R*)
  • Damping from restitution coefficient via beta = -ln(e) / sqrt(pi^2 + ln^2(e))

Mindlin Tangential Friction (MindlinTangentialForcePlugin)

Spring-history tangential force with Coulomb friction cap:

  • Tangential spring accumulates relative tangential displacement
  • Spring truncated at Coulomb limit: |F_t| <= mu * |F_n|
  • Viscous tangential damping
  • Ordered after Hertz via .after("hertz_normal")

Rotational Dynamics (RotationalDynamicsPlugin)

Quaternion-based Velocity Verlet for angular degrees of freedom:

  • Moment of inertia: I = (2/5) * m * r^2 (solid sphere)
  • Angular velocity and angular momentum integration
  • Quaternion orientation updates

Usage

Granular Temperature (GranularTempPlugin)

Time series of granular temperature T_g = (1/3N) * sum(m * v^2) written to data/GranularTemp.txt. Included in GranularDefaultPlugins by default.

Contact History

Tangential spring-history contacts are stored per-atom in a ContactHistoryStore registered as AtomData. Contact history automatically travels with atoms during MPI exchange, is reordered during bin-sorting, and is saved/restored in restart files.

Usage

GranularDefaultPlugins bundles all plugins plus DemAtomPlugin and DemAtomInsertPlugin:

use mddem::prelude::*;

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

Individual plugins can be added separately for custom force model configurations.

Part of the MDDEM workspace.