Silo#

This example simulates the filling and discharge of particles in a wedge-shaped silo. We set up this simulation according to the experiments of Golshan et al. [1]. It is recommended to visit the DEM parameters for more detailed information on the concepts and physical meanings of the parameters.

Features#

  • Solvers: lethe-particles

  • Floating walls

  • GMSH grids

  • Checkpointing (restart)

Files Used in this Example#

  • Parameter file: examples/dem/3d-silo/silo-Golshan.prm

  • Geometry file: examples/dem/3d-silo/silo-Golshan.geo

  • Mesh file: examples/dem/3d-silo/silo-Golshan.msh

Description of the Case#

This simulation consists of two stages: filling (0-4 s) and discharge (4-30 s) of particles. During the filling stage, we use a floating wall to keep the inserted particles in the hopper region of the silo. When all the particles are inserted and packed in the hopper, we remove the floating wall and the particles leave the hopper.

Parameter File#

Mesh#

In this example, we use a mesh generated using Gmsh. We refine this mesh once by setting initial refinement = 1 to ensure that the cells are sufficiently small to enable efficient contact detection. The mesh generated by Gmsh contains diamond cells, which are cells that only share a line with the boundary and not a complete face. check diamond cells = true enables searching for diamond-shaped boundary cells. Such cells can appear in unstructured grids, but they are detrimental to the stability of DEM simulations. Enabling this option adds these cells to the particle-wall contact search cells and is necessary to ensure stable collisions with the wall in the vicinity of diamond cells.

subsection mesh
  set type                = gmsh
  set file name           = ./silo-Golshan.msh
  set check diamond cells = true
  set initial refinement  = 1
end

Insertion Info#

An insertion box is defined inside and on the top of the silo.

subsection insertion info
  set insertion method                               = volume
  set inserted number of particles at each time step = 20000
  set insertion frequency                            = 10000
  set insertion box points coordinates               = -0.37, -0.042, 0.9 : 0.37, 0.007, 1.09
  set insertion distance threshold                   = 1.5
  set insertion maximum offset                       = 0.1
  set insertion prn seed                             = 19
end

Lagrangian Physical Properties#

The total number of particles in this simulation is equal to 132300.

subsection lagrangian physical properties
  set g                        = 0.0, 0.0, -9.81
  set number of particle types = 1
  subsection particle type 0
    set size distribution type            = uniform
    set diameter                          = 0.005833
    set number of particles               = 132300
    set density particles                 = 600
    set young modulus particles           = 5000000
    set poisson ratio particles           = 0.5
    set restitution coefficient particles = 0.7
    set friction coefficient particles    = 0.5
  end
  set young modulus wall           = 5000000
  set poisson ratio wall           = 0.5
  set restitution coefficient wall = 0.7
  set friction coefficient wall    = 0.5
end

Model Parameters#

subsection model parameters
  subsection contact detection
    set contact detection method                = dynamic
    set dynamic contact search size coefficient = 0.9
    set neighborhood threshold                  = 1.3
  end
  subsection load balancing
    set load balance method                     = frequent
    set frequency                               = 10000
  end
  set particle particle contact force method    = hertz_mindlin_limit_overlap
  set particle wall contact force method        = nonlinear
  set integration method                        = velocity_verlet
end

Simulation Control#

subsection simulation control
  set time step        = 2e-5
  set time end         = 30
  set log frequency    = 1000
  set output frequency = 1000
end

Restart#

In this subsection, we specify the checkpointing parameters. Checkpoints are very useful in long simulations. If the simulation breaks, we can continue the simulation from the last written checkpoint. First, we enable checkpointing by setting the checkpoint parameter to true. Then, we specify the checkpointing frequency.

subsection restart
  set checkpoint = true
  set frequency  = 100000
end

Floating Walls#

The floating wall is a temporary flat wall (its start and end times are defined) and it is generally used for holding the particles during the filling of particles within the simulation domain.

In this subsection, the information on the floating walls is defined. First of all, the total number of floating walls is specified. Then for each floating wall, we specify its normal vector, a point on the wall, start time and end time.

In this simulation, we need a floating wall in the filling stage (0-4 s). Hence, we set start time and end time equal to 0 and 4, respectively. The wall should be in the xy plane and be located at the bottom of the silo. We use this information to select the point on the stopper (0, 0, 0) and its normal vector (0, 0, 1).

subsection floating walls
  set number of floating walls = 1
  subsection wall 0
    subsection point on wall
      set x = 0
      set y = 0
      set z = 0
    end
    subsection normal vector
      set nx = 0
      set ny = 0
      set nz = 1
    end
    set start time = 0
    set end time   = 4
  end
end

Running the Simulation#

This simulation can be launched in parallel (e.g. using 8 processes) by running:

mpirun -np 8 lethe-particles silo-Golshan.prm

Warning

This example takes approximately 14 hours on 8 cores. This high computational time is due to the long simulation time (30 s of real-time).

Results#

Animation of the silo simulation:

Animation of the subdomains distribution throughout the simulation:

Reference#