MercuryDPM
Fast, flexible particle simulations

MercuryDPM is an open-source 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 has been developed by many people since it was started. Information about developers can be found at Team.

MercuryDPM was started in 2009 by Anthony Thornton and Thomas Weinhart with the aim of creating a discrete particle method software able to solve complex industrial scenarios. This required several features which now form the backbone of MercuryDPM: (i) A flexible implementation allowing complex wall and boundary conditions, (ii) a neighbourhood detection algorithm capable of dealing with highly polydisperse particle packings, and (iii) an analysis tool able to extract the most relevant information from the huge amount of data generated by these simulations. The code also has been coupled to the continuum solver oomph-lib to simulate particle interactions with elastic solids, as well as multiscale coupling to simulate granular materials in a computationally efficient way.

MercuryDPM is a versatile, object-orientated C++ code which (we hope) is easy to understand. It is regularly tested on several Linux distributions, Mac OS and Windows 10. To avoid breaking already existing code, a suite of over 260 self-tests has been developed, testing each feature of the code. Developing new applications in the software is straightforward: The user specifies the particulars of their simulation (initial positions, inflow, outflow, walls, interaction parameters) in a single driver file, which calls the MercuryDPM kernel to execute the simulations. All kernel features are documented, and there are many sample drivers demonstrating the features.

Building the code is managed using cmake, the test suite via ctest, for code maintenance (bug reporting/tracing, release planning, etc) we use the Atlassian tools: Jira and Confluence. For visualisation we use both Paraview and an in-house code from Stefan Luding: XBalls. The latest version of the code can be found at https://bitbucket.org/mercurydpm/mercurydpm.

LEARNING MERCURY

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.

MERCURY EVENT CALENDER

Join the community

The code base of MercuryDPM is and will stay open-source. Everyone can be part of it:

Â