Skip to main content
Version: 3.4 (unreleased)

Discrete Element Model (DEM) User Guide

The Discrete Element Model simulates rock as an assembly of bonded spherical particles. Where a DFN generates a fracture network from statistics you supply, a DEM predicts one: you build a particle pack, cement it into rock, load it, and the fractures emerge from where the cement actually fails.

Experimental — read the limitations first

The DEM is under active development and parts of it are incomplete. Most importantly, DE volumes are not saved with your project — a model is lost when the project closes. Please read Current limitations before planning work around this feature.

Requires the DFN licence feature

The Discrete Element Model branch only appears in the Interpretation tree when your licence includes the DFN feature. Without it the branch is not created at all, so there is nothing to right-click. If you cannot find it, check your licence before looking for the tree node.

Overview

A DEM in VRGS lets you:

  • Build a packed assembly of spherical particles at a target porosity
  • Give the assembly rock properties — density, stiffness, friction, restitution
  • Cement it, installing bonds that carry force and moment between touching particles
  • Run the simulation and watch it in the 3D view while it steps
  • Compress it in a virtual press and read off the stress–strain response
  • Track damage as bonds break, permanently and irreversibly
  • Export the resulting broken-bond population as a DFN with real dip and azimuth

The distinction that matters: bonds persist and break. The population of broken bonds is the fracture, and that is what the DFN export reads.

Creating a DE volume

Right-click Discrete Element Model in the Interpretation tree and choose New. VRGS creates a volume and immediately fills it with a random, non-overlapping particle pack using the current settings.

Select the volume to edit its properties in the Properties panel.

Building the particle pack

PropertyMeaning
Initial ElementsHow many particles to place when the volume is created or reset
Minimum / Maximum SizeParticle radius range. Particles are drawn uniformly between these
Target PorosityVoid fraction to aim for when adding elements
X / Y / Z dimensionSize of the model box

Particles are placed randomly and rejected if they would overlap, so the achievable packing density is limited. Two commands help you densify:

  • Add Elements — keeps inserting particles until the target porosity is reached or placement saturates.
  • Grow Elements — expands each particle into the gap to its nearest neighbour. This raises density without adding particles, and is usually the more effective of the two.

Current Porosity is shown read-only and updates as you go.

Material properties

These describe the particles themselves, and apply whether or not the model is cemented.

PropertyMeaning
Densitykg/m³. Particle masses follow it
Young's ModulusElastic modulus, Pa. Sets contact stiffness and the stable timestep
Poisson's RatioUsed by the timestep stability criterion
Contact StiffnessRead-only. Derived from the modulus and particle size
RestitutionBounciness on collision, 0–1
FrictionCoulomb friction coefficient

Contact stiffness is derived, not set directly. A stiffness quoted in N/m is only valid at one particle size — weight grows as the cube of radius while a linear spring does not grow at all — so a single fixed value would let large particles sink through the floor and through each other while small ones behaved correctly. Specifying Young's modulus instead keeps the model correct at any particle size, and it is the property you are more likely to know for a given rock.

Young's modulus is also your speed dial

Stiffer contacts are shorter, so they need a smaller timestep and the simulation advances more slowly in real time. Granite's ~65 GPa is physically honest but expensive. Reducing the modulus is standard practice in discrete element modelling when you care about bulk behaviour rather than contact detail — it exaggerates how much particles deform at their contacts, but leaves packing and flow broadly intact, and it can speed a model up substantially.

Restitution below 0.5

The contact model cannot deliver very inelastic collisions. Requesting 0.2 gives about 0.32 in practice, and the response floors out near 0.21 however low you set it. Values of 0.5 and above behave as expected; treat anything lower as "as inelastic as this model gets".

Running the simulation

CommandEffect
Start/StopRuns the simulation on a background thread. The 3D view updates live
Step ForwardAdvances a single display step, for inspecting behaviour closely
ResetRebuilds the particle pack from scratch

The view animates while the model runs. Progress appears in the Messages panel: elapsed time, RMS particle displacement, kinetic energy and contact count.

The simulation runs as fast as the physics allows and redraws about thirty times a second, so how much simulated time passes per second of real time depends on model size and timestep rather than on any setting. Steps per Batch controls how many physics steps run between checks for the next redraw; the default of 100 suits most models. Lower it if a heavy model makes the view feel unresponsive, raise it if you are running a small model unattended.

Timestep

The solver chooses its own timestep from the material and particle size, using the Rayleigh criterion — the standard stability bound for DEM. Two read-only values are shown:

  • Critical Timestep — the stability limit for the current model
  • Timestep (s) — what the solver is actually using

Timestep Safety (default 0.1) is the fraction of the critical timestep to use. It controls accuracy as well as stability: a collision lasts roughly 1.1 / safety timesteps, so 0.1 resolves one in about eleven steps. Halving it doubles the run time and roughly doubles the resolution. If you set a timestep larger than the critical value the solver overrides it rather than integrating something that would blow up.

Settle before cementing

Run the model for a while before cementing. A freshly generated pack is loose and randomly placed; letting it settle under gravity produces a denser, more realistic contact network for the cement to bond.

Cementing the model

Cement Model installs bonds between every pair of particles that are touching or nearly so. This is what turns a loose granular pack into rock. Until you do it the assembly is cohesionless: it can rearrange, but it cannot fracture.

PropertyMeaning
Bond Radius MultiplierBond cross-section radius, as a fraction of the smaller particle
Bond Normal / Shear StiffnessCement stiffness per unit bond area, Pa/m
Tensile StrengthBond fails in tension above this stress, Pa
CohesionShear strength at zero normal stress, Pa
Friction AngleSlope of the Mohr–Coulomb failure envelope, degrees

The bonds carry both force and moment. The moment matters: without it particles rotate too freely and the model comes out far weaker in compression relative to tension than real rock.

Re-running Cement Model heals the model — it replaces the bond set rather than adding to it.

Cementing shortens the timestep

Bonds act in parallel with particle contacts, so their stiffnesses add and the stable timestep gets shorter. The solver accounts for this automatically, but a heavily cemented model will step more slowly.

Loading the model

Cementing gives the model strength; loading is what makes it fail. Set Mode in the Loading group to Compression and the test begins immediately — one face of the domain becomes a platen and advances into the specimen at the strain rate you set, while the opposite face holds. Setting Mode back to Off stops the test.

PropertyMeaning
ModeOff, Compression, or Tension
AxisWhich axis the platen travels along
Strain RateFraction of the starting length per second
Max StrainLoading stops once this much strain has accumulated
Axial StrainRead-only. Strain applied so far
Axial StressRead-only. Load on the platen over the specimen cross-section
Peak StressRead-only. The highest stress reached

Run the simulation with a mode selected and you are performing an unconfined compression test. Watch Axial Stress climb, then fall as bonds begin to break; Peak Stress holds the maximum, which for a cemented model is its unconfined compressive strength.

The test is unconfined, by design

Starting a test switches off the four side walls, leaving only the two platens. This matters more than it sounds. A specimen under axial load expands sideways, and that expansion is what puts the transverse bonds into tension — tension being how compression actually breaks rock. Hold the sides rigid and no tension ever develops, while the axial bonds only get stronger under load, because their shear capacity rises with the stress pressing them together. A confined specimen in testing carried 145 times its own bond strength without breaking a single bond.

Load slowly

A high strain rate measures a dynamic impact response, not the quasi-static strength you are usually after. If peak stress looks implausibly high, lower the strain rate before doubting the material properties.

Reading damage

Three read-only values track failure:

  • Bonds — how many were installed
  • Broken Bonds — how many have failed. This population is the fracture
  • Damage — broken bonds as a fraction of installed, 0–1

Breakage is permanent. A bond that fails never re-forms, even if the particles are pushed back together, because accumulated damage is the whole point.

Exporting fractures to a DFN

Export Fractures to DFN converts broken bonds into a fracture network and adds it to the Interpretation tree.

The export groups broken bonds into spatially connected clusters, fits a plane through each, and emits a fracture disc with the resulting dip and azimuth. Clusters that are not planar enough are rejected — rock accumulates diffuse microcracking as well as discrete fractures, and emitting a disc for every blob of damage would fill the DFN with features that do not exist.

Tensile and shear failures go into separate sets, so joints and shear bands stay distinguishable.

The Messages panel reports what happened, including what was rejected and why. If nothing is exported it tells you whether there were no broken bonds at all, or whether clusters were found but discarded as too small or insufficiently planar.

Once exported, the network is an ordinary DFN — see the DFN User Guide for connectivity, permeability and stress analysis.

Cut sections

Add Section XZ / YZ / XY creates a cut plane through the volume. Sections currently appear in the tree but are not drawn in the 3D view; see the limitations below.

Current limitations

The DEM is experimental. These are known and specific.

Only axial loading is available. The press applies compression or tension along one axis. There is no confining pressure, so triaxial tests are not possible, and no shear or bending. For unconfined compressive strength — the usual laboratory measurement — this is sufficient.

DE volumes are not saved. A volume is lost when the project closes. There is no persistence yet, so treat any model as a working session rather than something you can come back to.

Seeding from an existing DFN is not exposed. The engine can pre-break bonds that cross fractures from a mapped network, so a model can start with inherited discontinuities rather than as intact rock. This works but has no menu command yet.

Sections do not render. Add Section creates the tree entry and computes the intersection, but nothing is drawn.

Convert to Voxel Model produces an empty model. The command creates a correctly sized voxel grid and adds it to the project, but no voxels are filled.

Particles cast no shadows. The whole assembly is drawn in a single pass as camera-facing sprites shaded to look like spheres, which is what lets large models draw at all. Sprites do not take part in the shadow passes, so particles neither cast shadows on each other nor on the rest of the scene.

Very close zoom flattens the largest particles. Sprite size is capped by the graphics hardware. Zoom in far enough that a single particle fills a large part of the window and it stops growing with the others. This only appears at magnifications well past where a particle assembly is normally viewed.

The solver is single-threaded. Simulation runs on one core regardless of model size. Cost per step is proportional to particle count — measured across models from one thousand to twenty-seven thousand particles, the work per particle stays essentially constant — so doubling the model roughly halves the step rate. Cementing adds about a third again, because bonds are evaluated alongside particle contacts. On a large model the simulation, not the display, is now what you wait for.

A complete workflow

  1. Create a DE volume. It fills with a random particle pack.
  2. Run the simulation and let the pack settle under gravity, then stop it.
  3. Grow Elements if you want a denser pack.
  4. Cement Model to bond the settled assembly into rock.
  5. Set Loading Mode to Compression and Run again. Watch axial stress climb and damage accumulate.
  6. Export Fractures to DFN once bonds have broken.

That gives you a fracture network predicted from simulated rock failure rather than generated from statistics — which is the reason to use a DEM at all.

What the DEM is for

The DEM is most useful for exploring how a cemented granular assembly fails: how packing, particle size distribution and cement strength interact, what stress the assembly carries, and what the resulting damage looks like as a fracture network.

Treat the absolute numbers with care. Peak stress depends on your particle size, packing and cement parameters, and a discrete element model reproduces the character of rock failure far more reliably than it reproduces a specific rock's strength without calibration. Comparing models against each other is sounder than reading any single peak stress as a laboratory value.