OpenMD version 2.5

OpenMD version 2.5 is now available for download at  This is a major update with many new features, system builders, analysis scripts, force fields, and samples. In addition to hundreds of bug fixes and performance improvements, here are some of the new features that have been added since the 2.4 release:

New builders:

  • New slabBuilder to create starting omd files for arbitrary surface cuts specified by Miller indices (hkl) of FCC, BCC and SC materials (can also optionally include charged capacitor plates)
  • icosahedralBuilder can now build Cuboctahedral and TruncatedCube nanoparticles, atoms now sorted by distance from center of nanoparticle
  • New atom2omd program for converting other file formats into OpenMD (.omd) format – defaults to openbabel’s atom typing in most cases

New potential energy forms:

  • Buckingham (Traditional and Modified) non-bonded interactions
  • SDK Bends and Mie Bonds to support the Shinoda, DeVane, Klein (SDK) CG force field
  • Bonded interactions (Bonds, Bends, Torsions, Inversions) may now span the periodic box – useful for polymers, graphene sheets, etc.

New force fields:

  • BKS model for Silicas and Aluminophosphates from van Beest, Kramer, and van Santen, Phys. Rev. Lett. 64(16), pp. 1955-1958 (1990)
  • BKS modified variant from Saika-Voivod, Sciortino, Grande, and Poole, Phys. Rev. E 70, 061507 (2004)
  • EAM Zhou2001 variant for alloys from Zhou et al., Acta Materialia 49(19), pp. 4005-4015 (2001)
  • EAM Zhou2004 implements parameterization in Zhou et al. Phys. Rev. B, 69, 144113 (2004)
  • EAM Zhou2005 implements EAM portion of Zhou and Wadley, J. Phys. Cond. Matter. 17 (2005) 3619-3635
  • Shinoda, DeVane, Klein (SDK) coarse grained model for lipids, surfactants, benzene, fullerenes, and ionic liquids
  • Water force field (Water.frc) has added support for most of the common non-polarizable water models (SPC*, TIP*, SSD*, OPC)

Changes in the OpenMD engine:

  • New stats file queries for net_charge, charge_momentum, electronic_kinetic
  • New stat file keyword: statFilePrecision
  • New NVE propagator for fluctuating charges. Set it with the propagator keyword in a flucq{} block.
  • Minimizer now reports to stats and dump files at each minimization step
  • Added a stats report file (.report) after run is completed (also written to stdout at end of run
  • When outputElectricField is turned on, the local field calculation is now done even when a site is not electrostatic
  • Added outputSelection keyword for rnemd{} blocks so that data can be collected for specific StuntDoubles that aren’t the exchange objects
  • Added dividingSurface keyword for rnemd{} blocks for instances when the dividing surface area should not be calculated using a convex hull
  • Added an outputDensity keyword which will adds EAM-style densities to site lines in dump files

Changes to StaticProps:

New static analysis modules:

  • Coordination Number (--cn) – number of atoms within a cutoff distance
  • Secondary Coordination Number (--scn) – mean coordination number of neighboring atoms
  • Generalized Coordination Number (--gcn) – coordination numbers described in F. Calle-Vallejo et al., Science 350(6257) pp. 185-189 (2015)
  • Tetrahedrality order parameter (--tet_param) computes distributions of P(Q) described in Errington and Debenedetti, Nature 409, pp. 318-321 (2001), but allowing for arbitrary numbers of neighbors
  • New --densityfield and --velocityfield analyzers for volume and stream line rendering
  • New 3-dimensional pair distribution  (--r_theta_omega) module for computing g(r, cos(θ), cos(ω))

Changes to existing modules:

  • Hxy (height of a surface) has been completely rewritten with new interpolation and gridding scheme, and new 2-d FFTs of the surface
  • HullVolume module now uses convex hulls and not alpha shapes
  • Many one-dimensional distribution functions now can compute using a --privilegedAxis (GofRZ, GofZ, RNEMDZStats)

Changes to DynamicProps:

New correlation functions:

  • Momentum / Angular momentum cross correlation functions (--pjcorr)
  • ForceTorque and TorqueForce cross correlation function (--ftcorr and --tfcorr)
  • Force and Torque autocorrelation functions (--facorr and --tacorr)

New Analysis and Utility Scripts:

  • New slipLength calculator for shearing simulations of solid / liquid simulations in slip boundary conditions
  • New solLiqFricCalc script for calculating solid liquid friction coefficients from results in .rnemd files
  • New stat2tension calculator for computing surface tensions from pressure tensors in stat files
  • New hbtetAnalyzer for doing analysis on Hydrogen Bond Tetrahedrality matrices
  • New funcflExtractor utility pulls density, embedding functional, and Z(r) information from DYNAMO86-style funcfl files
  • omd2omd can now rotate as well as replicating and translating the simulation box

New Samples:

  • New Graphene sheet sample demonstrating structures that span the box
  • New tip4p-ice sample

Go grab it at the Download page!

OpenMD version 2.4

We are pleased to announce the availability of OpenMD version 2.4. In addition to bug fixes and performance improvements, there are new features that have been added to the code since the 2.3 release:

New Features:

  • Added Mie potentials for non-bonded interactions
  • We now have an initial implementation of fluctuating-density EAM models
  • A new omd2omd utility replaces the md2md script. omd2omd is able to do box repeats and translations without splitting up individual molecules.
  • Added a normalization option to vcorr2spectrum
  • All of the analysis programs (StaticProps, DynamicProps, SequentialProps) now provide revision and meta-data in their output files
  • Added arithmetic mixing rule option to GB (Gay-Berne) potentials.
  • Added support for selecting Bonds, Bends, Torsions, Inversions, and Molecules in parallel environments.
  • Added “potentialSelection” keyword for reporting Potential Energy for a selection in a stat file.
  • Added an option to use force field files with or without the scaled bond and bend force constants (e.g. Amber and Charmm use k (r-r0)2 while TraPPE and OpenMD default to k/2 * (r-r0)2).
  • New modules for StaticProps:
    • Distance-dependent Kirkwood factors (dipolar and quadrupolar)
    • Tetrahedrality matrices for hydrogen bonds
    • Generalized Coordination Numbers (GCN)
    • Added PotDiff module
  • New modules for StaticProps:
    • Much (10-1000x) faster for many correlation functions
    • HydrogenBond Jump time calculator
    • RCorrFuncZ: does root mean squared displacements binned by z coordinates

Build Fixes:

  • Build is now git-aware
  • Many fixes to allow building with different versions of the qhull library
  • Updated force field files and samples

Bug fixes

  • Bug-fix in pack2md (contributed by Hythem Sidky)
  • Fixes in InteractionManager to catch rare cases for explicit non-bonded interactions could erase themselves
  • Simple change to allow printing information from final frame in dump and stat files
  • Fixed typos in how Stats module displayed column titles
  • Fixed some long-standing issues with bin counting and fixed normalization of g(r,cos(theta))
  • Fixed a parallel constraint bug in Rattle/Shake
  • Fixed correlation functions with changing populations in selections
  • Fix for directional atom types and Gay Berne potential (contributed by Hythem Sidky)
  • P2 order parameter is now calculated from row for directional atom types. This is consistent with the Gay-Berne module.
  • Atom spacing in constructed polyhedra in icosahedralBuilder was off by 1/sqrt(2).
  • A number of fixes to allow fluctuating charge potentials to use the multipolar Ewald sum.

Go grab it at the Download page!

OpenMD version 2.3

We are pleased to announce the availability of OpenMD version 2.3. In addition to bug fixes and significant performance improvements, there are new features that have been added to the code since the 2.2 release:

New Features:

  • 20% performance improvement
  • New analysis code: SequentialProps, which can be used to compute time-dependent contact angles for droplets spreading on surfaces.
  • Selection syntax now allows selection of objects at the molecule-level or particular bonds, bends, torsions, etc.
  • New post-processing scripts:
    • vcorr2spectrum – allows easy calculation of vibrational power spectra
    • stat2dielectric – allows computation of dielectric constants
    • mdShrink – Skips every n frames of an OpenMD dump file and loads it into new dump file
  • New modules for StaticProps:
    • System-wide Multipole Sums (dipole and quadrupole)
    • Geometric Hydrogen Bond statistics
    • Tetrahedrality parameters sorted by Z, or prepared for volume rendering
    • New FCCofR and IcosahedralOfR analyzers for local orientational ordering statistics
    • Now allows 3-selection operation of the 2-dimensional g(r) analyzers
  • New module for DynamicsProps: Frequency Fluctuation Correlation Function
  • New perturbation: Uniform Electric Field Gradients
  • New integrator: NPA integration (constant normal pressure and surface area)
  • New stats options: Box Quadrupole
  • More useful md-solvator error messages (will now exit when solute and solvent boxes are not identical).
  • Changes to allow topology-based force-field overrides in include files.
  • To increase performance, we have deprecated the cutoffPolicy option

Build Fixes:

  • Build now looks for numpy in python installation
  • Simpler and easier builds by linking dynamically with qhull
  • Updated the manual and code documentation
  • Builds that use g++ to compile now turn on -Wall by default

Bug fixes

  • Fixes for md2md utility script
  • Selection fixes when selecting using integer parameters
  • Fixes to HullFinder (and by extension to RNEMD) for getSurfaceArea() call
  • Fixes for torsion types which define 180_is_trans
  • Fixed a selection non-overlap issue when doing particle time correlation functions
  • Fixed older samples to use newer syntax
  • Fixed the progress bar to write 100% when a simulation is done

Go grab it at the Download page!

OpenMD version 2.2

We are pleased to announce the availability of OpenMD version 2.2. This is primarily a performance and bug-fix release, but there are some new features that have been added to the code since the 2.1 release:

  • New non-bonded constraints can now be specified within a molecule
  • RNEMD statistics now give reasonable error bars based on 95% confidence intervals
  • The pAngle module in StaticProps can now use multiple selections or selection offsets to define vectors
  • Fixes to deal with deprecation of MPI C++ bindings in openmpi. We’ve reverted back to the C calls
  • Fixes for compilation with MPICH
  • Fixes to the g(r,θ) and g(r,ω) modules in StaticProps
  • Memory reporting and memory management fixes in the BlockSnapshotManager – this fixed correlation functions for very large trajectory files
  • Bond extension autocorrelation function (–bondcorr) was added to DynamicProps
  • Fixed BondType parser bugs
  • Made some of the information messages a bit less scary
  • Added some interesting builder samples
  • Started some internal work to migrate to git

Go grab it at the Download page!

OpenMD version 2.1

We are pleased to announce the availability of OpenMD version 2.1. This is primarily a performance and bug-fix release, but there are some new features that have been added to the code since the 2.0 release:

  • The electrostatics code has been completely re-written and two new real-space methods are available for testing for multipole-multipole interactions (look for upcoming papers on this subject).
  • We’ve added some spatial analysis tools to  StaticProps that can compute properties as a function of the z-axis (in periodic boundaries) or as a function of radius (in non-periodic simulations). These properties include: temperature, density, velocity, angular velocity, and tetrahedral order parameters.
  • OpenMD now builds on a much wider array of compilers.
  • New perturbation: Static electric fields can be applied to the simulation.
  • The reverse non-equilibrium molecular dynamics (RNEMD) methods now allow for exchanges in non-periodic geometries.
  • New utility program: “recenter”  which centers non-periodic simulations at specified points in space.
  • New builder utility: “icosahedralBuilder” which creates single-component nanoparticles in interesting geometries like:
    • Mackay Icosahedra
    • truncated decahedra (e.g. pentagonal rods)
    • ino-decahedra
    • curling-stone decahedra
    • other common nanoparticle geometries
  • New samples (and sample builders) to test the multipole electrostatics code for multipolar crystals.
  • New bonded potential function: HarmonicInversionType for GROMOS and CHARMM-style force fields.
  • Inversions can now be specified using center and satellites keywords.
  • Added  “region” constraints for fluctuating charge force fields.
  • New electrostatic method: single-processor implementation of a multipolar Ewald sum.
  • New correlation function: COH(z,t), which is a spatially-resolved OH bond time correlation function for water.
  • Significant performance boost over 2.0

Reproducibility in parallel OpenMD simulations

There’s an interesting issue with of how OpenMD distributes load on parallel (MPI) architectures.  At the very beginning of a parallel simulation, the molecules are distributed among the processors using a short Monte Carlo procedure to divide the labor.  This ensures that each processor has an approximately equal number of atoms to work with, and that the row- and column- distribution of atoms in the force decomposition is roughly equitable.  The Monte Carlo procedure involves the use of a pseudo-random number to make processor assignments. So, if you run the same parallel simulation multiple times, the distribution of atoms on the processors can change from run to run.  This shouldn’t be a problem if the MD algorithms are all working as they should, right?

However, one thing that many people forget is a specific limitation of floating point arithmetic.  Due to roundoff errors, the associative laws of algebra do not necessarily hold for floating-point numbers. For example, on a computer, the sum


can have a different answer than


when x = 1030y = -1030 and z = 1.  In the first case, the answer we get is 1, while roundoff might give us 0 for the second expression.   The addition-ordering roundoff issue can have effects on a simulation that are somewhat subtle.  If you add up the forces on an atom in a different order, the total force might change by a small amount (perhaps 1 part in 1010). When we use this force to move that atom, we’ll be off by a small amount (perhaps 1 part in 109). These small errors can start to make real differences in the microstate of a simulation (i.e. the configuration of the atoms), but shouldn’t alter the macrostate (i.e. the temperature, pressure, etc.).

That said, whenever there’s a random element to the order in which quantities are added up, we can get simulations that are not reproducible.  And non-reproducibility is, in general, not good.  So, how do we get around this issue in OpenMD?   We let the user introduce a static seed for the random number generator that ensures that we always start with exactly the same set of pseudo-random numbers.  If we seed the random number generator, then on the same number of processors, we’ll always get the same division of atoms, and we’ll get reproducible simulations.

To use this feature simply add a seed value to your <MetaData> section:

seed = 8675309;

This seed can be any large positive integer (an unsigned long int).

Once the seed is set, you can run on MPI clusters and be reasonably sure of getting reproducible simulations for runs with the same number of processors.  However, if you mix runs of different numbers of processors, then the roundoff issue will reappear.

OpenMD version 2.0

We are pleased to announce the availability of OpenMD version 2.0. This version represents a complete rewrite of the low-level force routines into C++. Here are some features that have been added to the code since the latest release:

  • The low-level loops, non-bonded interactions, and parallelization have been completely rewritten into C++ and should be faster.
  • The build system has been converted to CMake, which makes builds approximately 4 times faster than previous versions.
  • Multiple overlapping non-bonded interactions can be defined explicitly for two atom types.
  • There’s a new velocity-shearing and scaling (VSS) method for reverse non-equilibrium molecular dynamics (RNEMD).
  • We have added a completely new optimization library.
  • The selection syntax has been parallelized and now works during parallel simulations.
  • New correlation functions:  Selection survival correlation functions.
  • New correlation functions: Helfand-moments for thermal conductivity [Viscardy et al. JCP 126, 184513 (2007)]
  • Users can specify an electric field and we have added an architecture for external perturbations.
  • OpenMD now uses Gay-Berne strength parameter mixing ideas from Wu et al. [J. Chem. Phys. 135, 155104 (2011)]. This helps get the dissimilar particle mixing behavior to be the same whichever order the two particles come in. This does require that the force field file to specify explicitly the values for epsilon in the cross (X), side-by-side (S),  and end-to-end (E) configurations.

There are also a few hundred bugs that have been fixed in this release.

OpenMD version 1.1.5

We are pleased to announce the release of OpenMD version 1.1.5. This version is a bugfix release, and is recommended for all users of OpenMD. New things include:

  • Added the LangevinHull integrator and sample files.
  • Added “hull” token to selection syntax
  • BUGFIX: Added a check to make sure value matches data type of ForceField parameters
  • BUGFIX: We now traverse the base chains for NON-bonded interactions as well as bonded. This allows one to specify Metal – non-Metal interactions based on base types instead of exact matches.
  • Matched default Charges for OH and HO (Hydroxyl) to the values from OPLS paper.
  • BUGFIX: Changed dumpwriter to synchronize file writing to avoid file descriptor issues on large machines (>1000 nodes).
  • Added support for a stress correlation function.
  • BUGFIX: fixed a rare cutoff bug in calc_eam_prepair_rho
  • Added a staticProps module to compute the length of a nanorod
  • PERFORMANCE: Updated the BlockSnapshotManager to use a specified memory footprint in constructor and not to rely on physmem and residentMem to figure out free memory. DynamicProps is the only program that uses the BlockSnapshotManager, so substantial changes were needed there as well.
  • Fixed a clang compilation problem
  • Added the ability to output particle potential in the dump files
  • Added Momentum correlation function
  • Imported changes from Vector from development branch.
  • Added P4 order parameter to the computation done during director axis and P2 computation.
  • Added support to print Thermal Helfand Moment in the stat file.
  • Fixed typo in thermo.
  • Added RNEMD integrator.
  • Added vector source capability for the P2 order parameter in staticProps.

OpenMD version 1.1.4

We are pleased to announce the release of OpenMD version 1.1.4. This version is a primarily bugfix release, and is recommended for all users of OpenMD. New things include:

  • Fixed a bug on atomic torques for MPI jobs involving directional (Sticky, GayBerne) atoms.
  • Added a new NPTsz integrator (similar to NPTxyz, but locks the expansion / contraction of the x and y axes together).

OpenMD version 1.1.3

We are pleased to announce the release of OpenMD version 1.1.3. This version is a bugfix release, and is recommended for all users of OpenMD. New things include:

  • Fixed a bug in doForces that was causing errors in the total potential
  • Added a count option in StaticProps (useful for counting atoms that match selection criteria)