MercuryDPM is a code for discrete particle simulations. That is, it simulates the motion of particles, or atoms, by applying forces and torques that stem either from external body forces, (e.g. gravity, magnetic fields, etc...) or from particle interaction laws (e.g. Lennard-Jones). For granular particles, these are typically contact forces (elastic, plastic, viscous, frictional), while for molecular simulations, forces typically stem from interaction potentials (e.g. Lennard-Jones). The code has been developed extensively for granular applications, but could be adapted to include long-range interactions as well.
It was started by Anthony Thornton and Thomas Weinhart, and has been developed by many people since it was started. It is currently actively developed by Thomas Weinhart, Anthony Thornton, Deepak Tunuguntla, Kit Windows-Yule, Marnix Schrojenstein Lantman, Irana Denissen and Bert Scheper with input from Stefan Luding.
MercuryDPM is a very versatile, object-orientated C++ code which is easily understandable. It has been tested for several Linux distributions, Mac OS and Windows 10. The user specifies the particulars of their simulation (initial positions, inflow, outflow, walls, interaction parameters) in a single driver file, which calls the kernel to do the simulations. All kernel functions are documented here, and there are several driver samples available. To avoid breaking already existing code a suite of self-tests have been developed testing pre-existing features of the code.
For those interested in learning how to use existing Mercury codes to their full potential and even to design and create their own codes in order to model their own unique systems, the Mercury team offer short, intensive training courses. Details of these courses may be found on our sister website mercurylab.org.
Among other developments, it contains the hGrid neighbourhood search algorithm to effectively compute interaction forces, even for polydispersed particles. It has an in-built statistics package to extract fields such as density, velocity, and stresses, during computation or for post-processing. Many contact force models are implemented, including elastic or dissipative normal forces and tangential friction; flat or polyhedral walls are modelled, as well as fixed-particle walls; particles can be grouped into species with different parameters; inflow through a hopper is implemented; codes can be restarted from the output files, if the simulation has been aborted.View News