Filling a hopper and simulating a continuous flow process

In this case we generate a dense particle packing in a region that is defined by a vtk mesh. In a derived simulation particles are removed at the hopper outlet with a certain massflowrate. At the same rate, particles are inserted at the top for generating a continuous flow process.

The image shows a cut through the hopper, the particles are colored according to their velocity.

_images/result_2.png

Name of the case: Project_Hopper_Emptying

Simulation 1: Filling the hopper

In this first simulation, a relatively dense pack of particles is inserted in a hopper-shaped region. The calculation is run for as long as the particles take form a steady particle bed.

General settings

In this simulation we use particles of particle_shape command sphere:

_images/01_particle_shape16.png

A material with name material1 is defined:

_images/01_materials15.png

The simulation domain is defined with x and y dimensions ranging from -0.15 to 0.15 meters and z dimensions ranging from -0.15 to 0.25 meters:

_images/01_simulation_domain17.png

Meshes and regions

Altogether this simulation involves 3 geometry components: a mesh command that represents the walls of the hopper and two primitive walls that are used to close the hopper at the bottom and the top:

_images/02_mesh_hopper.png _images/02_primitive_wall_bottom.png _images/02_primitive_wall_top.png

For the particle insertion later on we require an insertion region of type mesh/vtk:

_images/02_region_hopper.png

Hint: meshes that are used for generating regions must be 3D vtk meshes. Example for obtaining such a mesh file: when exporting meshes in GMF format (ending: .mesh) from Salome, the tool Gmsh can be used to convert them to .vtk.

Physics models

In the next step, the definition of the physics models takes place. For the particles we use the normal contact model hertz, the tangential model history and the rolling friction model epsd2.

_images/03_particle_contact_model16.png

Since we added meshes in the previous section, also a wall contact model was added automatically in this section. We use the same contact models as for the particles:

_images/03_wall_contact_model15.png

Finally also the gravity is defined:

_images/03_enable_gravity10.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 the general settings tab we introduced two materials. Here we define the required material properties.

material1

Density

1000

Young’s modulus

5e6

Poisson ratio

0.3

Coefficient of restitution

0.5

Coefficient of friction

0.5

Coefficient of rolling friction

0.1

_images/04_material_properties14.png

In the next step two particle templates are generated:

_images/04_particle_template_14.png _images/04_particle_template_24.png

These two templates are used to define a particle distribution:

_images/04_particle_distribution15.png

An insertion command in mode pack is used for particle insertion. Please note that the target particle count is set to 9000. Given the size of the domain and the amount of particles this would lead to a relatively high voidfraction. Typically, this value cannot be reached with the standard algorithm, and this could lead to a mis-representation of the particle distribution. We therefore use the packing_generator of style dense. This algorithm is on the one hand able to insert much denser particle packings, and on the other hand the correct particle distribution is maintained, even when the desired packing density cannot be achieved:

_images/04_insertion10.png

Simulation control

In this tab one first choses the time step settings such as the desired simulation timestep of 2e-5 seconds and the total simulation time of 0.25 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_settings18.png

Output settings

In this tab we first define the timestep width for the file and the terminal output:

_images/07_output_timestep_settings15.png

The output_settings command command 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. Please note that if the output of per-cell information on meshes such as wear, velocity or stress are desired, the keyword mesh_properties has to be added and the required output has to be selected.

_images/07_output_settings18.png

Running the filling simulation

After saving the case we can change to the Simulation section. By hitting the Start button we can start running the simulation either serially or in parallel, using mpi. Number of particles, kinetic energy, the forces onto the geometry etc. can be visualized. The graph below (kinetic energy) shows that the selected run time is sufficient for obtaining a sufficiently static particle bed:

_images/10_run_1.png

Result

The result of the calculation can then be visualized with Paraview. The image shows the state of the particle bed at the end of the simulation:

_images/result_1.png

Simulation 2: Continuous flow process

The next step is to derive a simulation, so the result of the first simulation can be used as starting point for a new simulation.

Removing commands

We start with removing the original insertion command as well as the insertion region and the primitive wall that is used as top wall.

Meshes and regions

Then we add two new meshes: one which serves as insertion face and is located in the top area of the simulation domain and one which is ued for massflow measurement. Both meshes are not solid (i.e., they are not used as walls) and planar:

_images/99_02_mesh_insertion.png _images/99_02_mesh_massflow_measurement.png

A new, cylindric region is defined that is used as particle deletion region:

_images/99_02_region_remove.png

Particles

A new insertion command of type stream is defined. Particles are inserted at a massflow rate of 0.5 kg/s:

_images/99_04_insertion.png

At the same time, particles are removed in the remove_region, at the same massflow rate. For enabling a smoother removal process, the particles are shrinked first, and deleted once their radius falls below the defined value:

_images/99_04_delete_particles.png

Simulation control

The runtime is changed from 0.25 seconds to 5 seconds:

_images/99_06_timestep_settings.png

Output settings

Furthermore, a calculate massflow command is added:

_images/99_07_calculate_massflow.png

Please note that the calculate command automatically is assigned an ID (cal1). This ID is used for the output, e.g., in the global simulation output (see below).

Running the continuous simulation

After saving the case we can change to the Simulation section. By hitting the Start button we can start running the simulation either serially or in parallel, using mpi. Number of particles, kinetic energy, the forces onto the geometry, massflow and massflow rate etc. can be visualized. The graph below (number of particles) shows that the remove and inserted amount of particles matches well. Please remember that the particles are shrinked before they are finally remove, so consequently the number of particles can increase temporally:

_images/99_10_run_atoms.png

The massflow (2.5 kg in 5 seconds run time) and the massflow rate (0.5 kg/s) match the settings from the simulation setup:

_images/99_10_run_massflow.png

Result

The result of the calculation can then be visualized with Paraview. The image shows the state of the particle bed at the end of the simulation (velocity of the particles, cut through the center of the simulation domain):

_images/result_2.png