This tutorial is used to simulate the homogeneous and inhomogeneous regimes of a free cooling granular system (2D) contained in a square box (four infinite walls, InfiniteWall). It mimics a laboratory model for the experimenting the behaviour of granular gases. For a 3D version of this code, see Free cooling granular system (3D) in walls.
The animation below shows the free cooling granular system/particles contained in a square (2D) box.
Simulation set up:
Particles are inserted into a square box, with infinite walls in both dimensions. Just like the Free cooling granular system (2D), a well-defined initial state with random particle positions and velocities is prepared in the following way:
The particles first sit on a regular lattice and get a random velocity with a total momentum of zero.
Then the simulation is started without dissipation and runs for a reasonable number of collisions per particle so that the system becomes homogeneous, "and the velocity distribution approaches
a Maxwellian."
The above state is then used as the initial configuration for the dissipative regimes.
Step 2: Create Particles
Now, the particle species is defined. The particles in this problem use the linear visco-elastic (normal) contact model (LinearViscoelasticSpecies). The dissipation and stiffness defining the contact model can be set in different ways. In this example these contact model parameters are defined.
The particle properties are set subsequently. The particleHandler is cleared just to be sure it is empty, then the particle to be copied into the container is created and the set species is assigned to it.
A spherical particle is the most simple particle used in MercuryDPM.
Definition: SphericalParticle.h:37
Step 3: Place Particles
After specifying the particle properties, the container is filled with copies of the particle. In this example, particles are placed in a lattice grid pattern, on evenly spaced positions.
Step 4: Centre of mass velocity
Next, the center of mass velocity is subtracted to ensure a reduced random velocity. This results into a center of mass velocity nearly equal to zero.
Actions After TimeStep:
The actionsAfterTimeStep() method specifies all actions that need to be performed in between time steps, i.e. Since, the simulation started with zero dissipation, after a reasonable number of collisions per particle, the system will be homogeneous, and the actionsAfterTimeStep() is used to set the initial configuration for the "next" dissipative regime.
In the main program, the FreeCooling2DinWallsDemo object is created, after which its basic properties are set: like, the number of particles, box dimensions, time step and saving parameters. Lastly, the problem is actually solved by calling its solve() method.