Neighborlists for highly polydisperse packings

This tutorial demonstrates the advantages of using polydisperse binning within neighbor lists for systems with a wide particle distribution.

_images/99_result1.png

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:

_images/01_particle_shape25.png

We will use a single material for walls and particles in this case:

_images/01_materials23.png

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:

_images/01_simulation_domain25.png

The x and y boundaries are set to periodic:

_images/01_boundary_conditions.png

Meshes and regions

We start with defining a mesh module motion of type “wiggle” for keeping the particles in motion throughout the entire simulation:

_images/02_mesh_module3.png

This mesh module is then applied to the mesh command that forms the bottom of the box:

prepared chute-geometry (stl-file) as :

_images/02_mesh7.png

A region command is added that will be used for the particle insertion later on:

_images/02_region3.png

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:

_images/03_particle_contact_model24.png _images/03_wall_contact_model22.png

The gravity command is added automatically:

_images/03_enable_gravity17.png

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

_images/04_material_properties18.png

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:

_images/04_particle_template_big.png _images/04_particle_template_small.png

The templates are used to define a particle distribution:

_images/04_particle_distribution22.png

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.

_images/04_insertion14.png

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.

_images/06_timestep_settings24.png

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:

_images/06_neighbor_list_mono.png

The enable loadbalancing command is added automatically. When running simulations in parallel, it ensures an optimal distribution of the load on the processors:

_images/06_enable_loadbalancing7.png

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:

_images/07_output_timestep_settings23.png

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:

_images/07_output_settings25.png

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:

_images/99_log_mono.png

The result can also be visulized, e.g., with Ovito:

_images/99_result1.png

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:

_images/06_neighbor_list_poly.png

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:

_images/99_log_poly.png