Small granular particles falling through walls

Hello, I am using LAMMPS-7Aug19. I am simulating granular particles in a box, and I have fixed the walls of the simulation box to be hard. When I scale the size of the granular particles down, they escape through my walls. I am wondering why this happens, and if there is an additional parameter that I am not scaling that I should when changing my particle sizes. This is a simplified version of my input script, the small particles escape and the large particles remain in the box:

atom_style sphere
units si
processors * * 1
comm_modify vel yes

#variable factor equal 1.0
#variable factor equal 1.0/3.0
variable factor equal 1/39.3701

This is a question for the great granular guru at SNL who wrote that wall fix (cc’d).



Not sure that this is a fix wall/gran issue, more likely an issue with the overall dynamics.

First, by placing granular particles randomly, then increasing their diameters, you introduce potentially large overlaps in the initial state, leading to very large forces, leading to large velocities of particles that then shoot through the walls. Consider an alternate pre-processing step to place particles in a non-overlapping initial configuration, or using minimization or fix nve/limit to remove the initial overlaps. Another good option specifically for this is fix pour.

Second, when you scale everything by a constant factor, you may also need to adjust the timestep. For pair gran/hooke, the time step scales like sqrt(mass/stiffness), and when you multiply your radii by {factor}, you’re changing mass by {factor}^3. So the timestep likely needs to be adjusted. For more complex contact models like the one you’re using, there’s some literature on how to choose the timestep, but it’s likely something you’ll have to explore empirically, since it also depends on your dynamics.

Third, be aware that with your choice of units, and the way you’re creating atoms, you get some very strange masses. You probably want to also set densities (after you set the diameters, so that LAMMPS can update the masses appropriately):

set type * density 1000 #since you’re using ‘units si’

Otherwise, LAMMPS will set diameters to 1 when you create the particles, then set masses accordingly based on an assumed density of 1, regardless of units. These masses won’t change when you then change the diameters via the ‘set’ command, unless you also subsequently change the density.

Let me know if you still have problems after you fix these issues.




Thank you so much, this was incredibly enlightening and helpful.

I performed some runs with 1000 small particles. Before I implemented your changes, all of these particles disappeared through the walls. Then I set the densities of the particles as you stated, and the number of particles that disappeared through the walls went down to only 30. Then I added a fix nve/limit and toying around with the value of the limit displacement, and without having to change the timestep zero particles escaped my box, but the timestep thing is useful to know.

I will experiment with other ways to add particles.

Thank you for the help,