Neighborlists for highly polydisperse packings
This tutorial demonstrates the advantages of using polydisperse binning within neighbor lists for systems with a wide particle distribution.
In this simple showcase we insert a particle packing that consists of particles with a radius of 0.0003 m and 0.003 m in a cuboid domain. As bottom we use a mesh that keeps the particle bed in motion, the sides of the calculation domain are periodic. We run the simulation twice, once with the default neighbor list mode (monodisperse binning) and once with the polydisperse binning that is specifically designed for cases with wide particle distributions. A comparison of the simulation times and their distribution shows the positive effect of the specialized model in that case.
Name of the case: Project_Neighborlist
Case 1: Monodisperse binning
General settings
In the General Settings tab particle shape, the materials and also the simulation domain are defined.
We start with setting the particle_shape command type to sphere:
We will use a single material for walls and particles in this case:
Please note that all materials that are intended to be used in a simulation have to be defined right away, even when some of them are inserted at a later point in the simulation tree.
The simulation_domain command with x and y dimensions ranging from 0 to 0.05 m and z dimensions ranging from -0.01 to 0.05 m is created:
The x and y boundaries are set to periodic:
Meshes and regions
We start with defining a mesh module motion of type “wiggle” for keeping the particles in motion throughout the entire simulation:
This mesh module is then applied to the mesh command that forms the bottom of the box:
prepared chute-geometry (stl-file) as :
A region command is added that will be used for the particle insertion later on:
Physics models
In this tab contact models and other physical models are selected. The particle_contact_model command command is obligatory in all cases, the wall_contact_model command command is added automatically, as soon as a mesh command or a primitive wall is present.
We keep the default settings, namely the normal model hertz and the tangential model history for particles and walls:
The gravity command is added automatically:
Per default the gravity has a magnitude of 9.807 and acts into negative z-direction. These defaults can be changed by either setting the magnitude or the direction manually.
Particles
In this section one sets the material related parameters and defines all particle templates, particle distributions and insertion commands.
All parameters required by contact models and other physical models in the simulation are automatically added as material properties. In this case the following settings must be made:
Parameter |
Value |
|---|---|
Coefficient of friction |
0.5 |
Coefficient of restitution |
0.3 |
Density |
1000 |
Poissons ratio |
0.3 |
Youngs modulus |
5e6 |
Density, Poissons ratio and Youngs modulus and the coefficient of restitution are material properties that can be measured directly or taken from literature. The coefficient of friction is a bulk property that also depends on factors such as particle shape, surface roughness, particle distribution etc. and can be determined by material calibration.
Two particle templates for spheres are generated, one with a radius of 0.003 m and one with a radius of 0.0003 m:
The templates are used to define a particle distribution:
After generating the distribution, a way to insert the particles has to be selected. An insertion command command with the mode pack is used for generating a pack of particles. The target volume fraction is set to 0.3, the particles are inserted with an initial velocity of 1 m/s in negative z direction.
Simulation control
All settings that refer to the control of a simulation are made in the “Simulation control” tab. Mandatory setting such as time step width and simulation time can be found here just as well as settings that improve the simulation performance such as load balancing and coarsegraining. The processors command in the “Scalability and speed” section has become obsolete as soon as the loadbalancing command is enabled.
We first define the time step settings such as the desired simulation timestep of 2e-6 seconds and the total simulation time of 0.2 seconds. Per default also the check_timestep command command is enabled, which throws a warning when the time step exceeds 10 % of the Rayleigh or the Hertz timestep. These thresholds can be changed by setting an alternative value for hertz_fraction or rayleigh_fraction.
We add a neighbor list command of type “monodisperse_binning”. This is also the default setting for the command, it is used here for more clarity. Due to the wide particle distribution it is necessary to switch off the stencil check:
The enable loadbalancing command is added automatically. When running simulations in parallel, it ensures an optimal distribution of the load on the processors:
Output settings
Writing all desired data in a reasonable frequency is crucial for successful postprocessing. This tab allows the user to define the interval for writing particle data and global information, as well as to use calculate commands for additional evaluations (e.g., center of mass, particle residence time, massflow, …).
We first define the timestep width for the file and the terminal output:
The “output_settings” command the takes care that all particle information and the meshes are written to files accordingly. Furthermore it triggers the output of global quantities such as the kinetic energy of the particles or total normal and shear stresses onto meshes in the terminal.
We keep the default output_settings command:
Remark: please note that per default all meshes are written by the output settings, but without potentially available values for stress, wear, velocity etc. Please use the mesh_properties command for producing the desired output. If meshes are added to the meshes list but no mesh_properties are selected, all available properties will be written by default.
The setup of this case is complete now, we can save the setup and move on to the simulate section.
Running the case
It is most efficient to run the case on two cores, thus change the number of processors to two in the MPI settings.
Once the simulation the simulation is completed, we have a look at the log file. In this case (depends on the machine used for the simulation as well as its current load) the total runtime is 156 seconds, the time used for building the neighbor lists is 53 seconds or 34% of the total simulation time:
The result can also be visulized, e.g., with Ovito:
Case 2: Polydisperse binning
We now clone the simulation and go straight to the Simulation control tab. We change the neighbor list mode to “polydisperse_binning”, and in this case it is also note required to switch off the stencil check any more:
After running the simulation on two cores as well, it turns out that the overall simulation time could be reduced to 124 seconds, the neighbor list building time was reduced by a factor of almost three to 18 seconds or 14% of the total simulation time:
Home