• Which version of MercuryDPM should I use?
    February 10th, 2021
    Read More …
  • MercuryDPM webinar: Invited talk given by Sebastian Eibl on 28-04-2020 at 14:00
    April 28th, 2020
    Read More …
  • Mercury Month 2020
    April 17th, 2020
    Read More …


RSS Feed

0.10 fully released

January 22nd, 2015

MercuryDPM 0.10 was fully released January 22, 2014. It does not yet include the full feature list planned for MercuryDPM, but is a fully functional C++ package for performing discrete particle simulations. Please note for people using the Beta release of 0.10 this is only marginally different.

This version can be checkout via
svn checkout

REQUIRED DRIVER CHANGES (to update from MercuryDPM 0.9)

When you update from MercuryDPM 0.9 to MercuryDPM 0.10, you DRIVER codes have to be updated. Here is a list of the required changes:

A) Name changes

The following functions changed their name (the line starting with a minus is the old version, the line starting with + is the new version)


-Particle p0;
+BaseParticle p0;
Note: If you are using friction, you have to define your particles as TangentialSpringParticle, not BaseParticle
If you are using the plastic force model, you have to define your particles as DeltaMaxsParticle, not BaseParticle

-cout, endl, stringstream, string
+std::cout, std::endl, std::stringstream, std::string
Note: Removed "using namespace std", and inserted all the necessary std::


Use set_Position and set_Velocity when setting positions and velocities

Note that this list might not be complete; if you find your code required more changes than listed here, please let us know.

B) CMake

We now use cmake to compile code. For more detail, see the installation instructions on the MercuryDPM website.

C) Downloading

MercuryDPM is now available from our public svn server both version 0.9 and the new 0.10 (Beta).


- The balls option "-scala 4" does not work on the mac operating system
- The restarting feature does not save the first time step after restart


- CMake
CMake is now used to compile MercuryDPM code. For more details, see installation instructions on the website.

- HGridOptimiser
The cell sizes used in the HGrid neighbourhood search routine are now set automatically by the HGridOptimiser. The optimal placement of the cell sizes is based on the particle size distribution. Currently, two distributions are considered.
-Linear (the maximum number of levels are linearly distributed between minimum and maximum particle size)
-Exponential (the maximum number of levels are linearly distributed between minimum and maximum particle size)
-(In progress) Constant number of particles per cell
-(In progress) Optimal
Further Changes:
X It now allows for top-down and bottom-up approaches
X The CELL_TO_CELL_RATIO parameter has been removed
X Changed how sizes (and inverse size) of level are stored to vectors
X The SPHERE_TO_CELL_RATIO parameter has been renamed to cellOverSizeRatio and is used to make sure that particles fit more comfortably in each cell, such that their HGrid positions don't need to be updated each time step
X Added new test HGrid_demo.cpp which test different HGrid options with a larger particle size distribution then free cooling

- Adhesive Forces: It is now possible to simulate short-range non-contact forces. These are typically adhesive forces, such as van-der-Waals forces or liquid bridges, but potential applications include short-range potential forces like Lennard-Jones or SPH interactions. Currently, only a linear reversible and a linear irreversible adhesive force is implemented. The new code is tested by the two driver codes UnitTests/adhesiveForce and MercurySimpleDemos/free_fall_adhesive.

- Reorganisation of the source files
Added the constant specifier to a lot of functions in CParticle most notably get_Position() and get_Velocity() return a const Vec3D now
Split the CParticle and the ParticleHandler into header and implementation files
Split the HGRID from HGRID_base and created header and implementation files
Added the functionality to get en set X,Y,Z components of a Vec3D by index.
Added the directory Boundaries where baseBoundary and all its derivatives should move to.
Created an insertionBoundary wich allows you to insert particles at random in a Domain, it does not yet use the HGRID and needs some more improvementes.
Added Simple_MD/insertionBoundaryTest.cpp to test the insertionBoundary.
Removed the obsolete CWall.h

- Changes to the ParticleHandler
Change the ParticleHandler such that it extends from the BaseHandler.
Major changes:
All objects designed for Handlers have a index, id and pointer to their handler.
All objects designed for Handlers have the required set functions.
All objects designed for Handlers have a moveInHandler function, which is called when a Object is moved to a new position in a vector. This is for example used for tangential springs.
The baseHandler now stores the maximum number of objects in the handler and the id for the next object.
Note: If you are using friction, you have to define your particles as TangentialSpringParticle, not BaseParticle

- Walls can now have a species and velocity. For most walls the definition of velocity is simple. Only for the FiniteAxisSymmetricWall a more complex definition was implemented (r567,r584).

- Prismatic polyhedral walls can now be added using the function FiniteWall::create_prism_walls

- Added the functionality to MD to follow a single particle and output integration and collisions to the screen. This is useful for anlyzing selftests going wrong .

- Change the default of getInfo to be the species number

- added local angular momentum, local angular momentum flux and couple Stress to the Statistics

- Compatibility issues
In order to get consistent selftest results for different compilers, the self tests have been revised to take into account differences between compiler implementations.

- Removed "using namespace std", and inserted all the necessary std::

- Many extra example DRIVER codes were added

- Fix to chute_demo so that its’ output can be run through fstatistics, our statistics post-processing program

- Doxygen clean up and update some issues with the documentation

- Many other small bugs have been fixed