Double-Well Dimer Testsystems

One of the common systems used to study rare events is the double-well dimer in a bath of repulsive particles. In this system, two particles are linked by a “bond” that allows condensed and extended metastable states. This module adds this system, and tools for created several variants of it, to the OpenMMTools package.

Purpose of Module

The symmetric double-well dimer is a widely-used model for developing new rare events methodologies. However, implementing simple models in software packages that are designed for biological systems, such as OpenMM, can be difficult for a novice user. As a result, many developers of new methods will implement their methods twice: first to interface with simple models such as the double-well dimer using in-house MD codes, then a second time to interface with more powerful tools, such as OpenMM, to simulate complex systems such as biomolecules. This module provides tools that facilitate setting up custom versions of the double-well dimer for OpenMM, allowing users to develop their new methodologies directly for the same platform that they will use for larger practical applications.

The widely-used double-well dimer model is a symmetric quartic potential, given by:

V_{dw}(r) = h \left(1 - \left(\frac{r - r_0 - w}{w}\right)^2\right)^2

where r is the distance between the particles, h is the height of the barrier, r_0 is the energy minimum for the condensed metastable state, and w sets the distance for the extended metastable state according to r_{ex} = r_0 + 2w.

This “bonded” interaction is added for specific pairs of particles, on top of a background of WCA (purely repulsive) “nonbonded” interactions between all particles. The WCA interaction is:

V_\text{WCA}(r) =
  4 \epsilon \left( \left( \frac{\sigma}{r} \right)^{12} - \left( \frac{\sigma}{r}
  \right)^6 \right) + \epsilon & \text{if $r\le 2^{1/6} \sigma$} \\
  0 & \text{if $r> 2^{1/6} \sigma$}

where \sigma is a characteristic distance and \epsilon is a characteristic energy scale.

The quartic double well is a simple model of rare events, where the expected reaction coordinate is obvious. However, it is can be very useful for benchmarking new methods. The OpenMMTools package includes a suite of systems to be used in testing and benchmarking, and was a natural place to add these.

Although the most widely-used approach has been to have a single dimer in the bath of WCA particles, this module provides two possible extensions that have been previously used in the literature. The first extension is to allow multiple independent dimers, as was done in [Swenson2014]. This is done by changing the ndimers parameter in the DoubleWellDimer_WCAFluid test system. The other extension is to create a polymer chain of double-well bonds, as was done in [Rogal2008]. This is done by changing the nchained parameter in the DoubleWellChain_WCAFLuid test system.

[Swenson2014]D.W.H. Swenson and P.G. Bolhuis, J. Chem. Phys. 141, 044101 (2014);
[Rogal2008]J. Rogal and P.G. Bolhuis. J. Chem. Phys. 129, 224107 (2008);

Background Information

This builds on the testsystems module of OpenMMTools. The OpenMMTools source is hosted at These contributions will be included in OpenMMTools 0.17.0.

Building and Testing

This has been incorporated into OpenMMTools 0.17. Up-to-date installation information can be found in the OpenMMTools documentation; as of this writing it simply requires installing conda, and then using the command conda install -c conda-forge -c omnia openmmtools. Note that this requires a Python 3-based environment; OpenMMTools does not support Python 2.

Extra requirements for the tests can be installed with conda install -c conda-forge -c omnia nose nose-timer pymbar. The full suite of tests can be run from the openmmtools directory with the command nosetests. The tests specific to this (and other test systems) can be run from the root directory of the repository with: nosetests openmmtools/tests/


Examples of the tools in this module can be seen in a Jupyter notebook that can be viewed or downloaded from a GitHub gist at:

Source Code

The source for this module was contributed to OpenMMTools. The relevant pull request is: