Changelog

Version 1.1.0

Breaking changes

These changes do not break simulation scripts, they affect only the build process

  • increase minimal required versions of the CUDA SDK to 9.0, of GCC to 5.0, and of the Boost C++ library to 1.61, require a C++14 compiler (Jaslo Ziska)
  • remove unused CMake switches and parameters for build variants: FORCE_DSFUN, HILBERT_ALT_3D, DEVICE_SCALE (Jaslo Ziska)

New features

  • examples: add a definition file and a user script for the simulation of crystal grains of fcc metals at low temperatures. The simulation uses a parametrisation of a modified Morse potential due to MacDonald and MacDonald (1981) (Felix Höfling)
  • add a custom pair potential as a template to be easily adjusted for user-specific pair potentials. (Felix Höfling)
  • add cylinder geometry as a predicate for the particle group region. This enables the selection of particles inside or outside of a cylindrical domain of the simulation box. (Felix Höfling)
  • Lua interface: add module constants to provide some natural constants and unit conversion factors (Felix Höfling)
  • Lua interface: add helper functions concat(t1,t2) and repeat_element(x, n) and some BLAS level 1 operations on numeric Lua tables (Viktor Skoblin)
  • new logging level [INFO], which is between the standard level (MESSAGE) and [DEBUG] and which is also contained in release builds. (Felix Höfling)

Improvements

  • include the Mie pair potential as a renamed version of the deprecated modified_lennard_jones potential. A transitional module is kept for backwards compatibility. (Felix Höfling)
  • generalise the Morse <halmd.mdsim.potential.pair.morse pair potential to include a distortion parameter for the simulation of fcc metals (Felix Höfling)
  • new force algorithm to speed up calculation of truncated pair forces in case of small particle numbers. In such situations, GPU utilisation is increased by unrolling the loop over neighbour lists and processing it in parallel within a thread warp. The algorithm is selected upon construction of the neighbour module (Jaslo Ziska)
  • benchmark of the Kob-Andersen mixture: add a version for a tiny system, decrease skin width and increase neighbour list occupancy (Felix Höfling)
  • example scripts for liquids: factor out definition of interactions to make them re-usable in different simulation scripts (Felix Höfling)
  • more verbose logging output on potential parameters, units and truncation schemes. (Felix Höfling)
  • add default output parameters to runtime estimator in order to simplify user scripts (Felix Höfling)
  • support CUDA SDK 11.2 and Nvidida GPUs Tesla A40 and A100 (Jaslo Ziska)

Internal changes

  • algorithm/gpu/reduce: new CUDA kernel based on warp shuffle intrinsics (Jaslo Ziska)
  • make C++14 the new language standard (Jaslo Ziska)
  • update shipped CUB library to version 1.9.10-1 (Jaslo Ziska)
  • increase default GPU target architecture to compute capability 6.1 (Felix Höfling)

Version 1.0.2

Bug fixes

  • external potential planar_wall: build also a GPU variant for double-single precision, which was missing (Felix Höfling)
  • computation of thermodynamic observables (e.g., density): allow the user to pass the correct volume when restricting the particle group to a sub-domain of the simulation box (Felix Höfling)

Improvements

  • observables: let thermodynamics write the reference volume by default to the output file (Felix Höfling)
  • add function volume to the geometry modules (Felix Höfling)

Version 1.0.1

Bug fixes

  • example script liquid/shear_viscosity.lua: fixed the truncation of the Lennard-Jones potential, which was missing due to the use of an outdated Lua interface of the potential module (Felix Höfling)

Improvements

  • documentation: minor amendments and corrections (Felix Höfling)
  • some improvements to example scripts (Felix Höfling)
  • benchmarks: optimise neighbour list parameters, add results for RTX 2080 Super (Felix Höfling)
  • improve stability of build process (Jaslo Ziska, Felix Höfling)

Version 1.0.0

Breaking changes

  • fix misspelled keyword acquire in Lua API, it was aquire before (Felix Höfling)
  • rename particle group from_range to id_range (Roya Ebrahimi Viand)

Bug fixes

  • correctly support GPUs of compute capability ≥ 7.0 (Volta). Since the Volta architecture, Nvidia dropped the CUDA paradigm of executing threads within a warp in lock-step fashion, which led to wrong results in some algorithms. (Felix Höfling)
  • fix wrong output of particle data to a file, which happened if several phase space samplers, e.g., for different groups, were operating on the same particle instance. (Roya Ebrahimi Viand)
  • fix wrong output of wavenumbers to a file in case of discarded values, e.g., if a non-cubic box and a wavevector filter were passed to halmd.observables.utility.wavevector (Felix Höfling)
  • various small fixes in example scripts, corrected and more robust unit tests (Jaslo Ziska, Felix Höfling)

New features

  • select particles in a region of the simulation box through the new particle group region. The selection can be inside or outside of a cuboid or a sphere. Further, the new particle group region_species restricts this selection to a certain particle species. (Nicolas Höft, Roya Ebrahimi Viand)
  • support fluctuating particle number in file writer of halmd.observables.thermodynamics. It needs the new property fluctuating of the particle group to be set. (Felix Höfling)
  • support for external, one-body potentials. The list of potential functions is easily extensible, currently we have a harmonic trap and a set of planar Lennard-Jones walls to form, e.g., a slit pore or a wedge (Felix Höfling, Sutapa Roy)
  • signals prepend_apply and append_apply of the force modules, which can be used e.g., to read out the force partially when adding up contributions from different potentials (Sutapa Roy)
  • wavevectors can be restricted to an axis or plane aligned with the coordinate frame, using the new filter keyword of halmd.observables.utility.wavevector. In addition, a dense grid of wavevectors can be generated from the reciprocal lattice. (Felix Höfling)

Improvements

  • usage documentation: add tutorial on diffusion in a simple liquid (Jake Atwell)
  • examples: simplify scripts for basic simulations of a one-component Lennard-Jones fluid (Felix Höfling)
  • developer’s guide: describe programme flow, data dependencies between modules, and the signal/slot mechanism (Felix Höfling)
  • support multiple calls to sampler:run(). With the default simulation engine, the signals on_start and on_finish are triggered only upon first invocation of run() and upon return from main() of the simulation script, respectively. The profiler output function is connected to the on_finish signal, removing the need to call it explicitly. (Felix Höfling)
  • forward non-default neighbour list parameters to forces.pair_trunc, which in many cases removes the need to construct a custom neighbour list module (Felix Höfling)
  • simple substitution of environment variables in filename pattern using a new argument parser action from halmd.utility.program_options (Felix Höfling)
  • halmd.mdsim.clock can be advanced explicitly in the simulation script (for experienced users only) (Felix Höfling)
  • support the CUDA SDK up to version 10.2, the HDF5 library up to version 1.10.6, and the Boost C++ library up to version 1.72.0 (Jaslo Ziska)

Version 1.0-alpha6

Breaking changes

  • simplifications of the simulation script: essential setup (e.g. logger) is no longer the user’s responsibility, merely routines main() and optionally define_args() are needed. Provide argument parser actions (Daniel Kirchner)
  • pair potentials are truncated or modified by generic potential adapters (Daniel Kirchner)

Bug fixes

  • remove velocity rescaling from halmd.mdsim.velocities.boltzmann, shifting of the velocities to zero centre of mass is retained. This fixes also the integrator halmd.mdsim.integrators.verlet_nvt_boltzmann, which now samples correctly from a Maxwell-Boltzmann distribution (except for the mentioned constraint). (Felix Höfling, Daniel Kirchner)
  • host backend compiles with single floating-point precision again (Daniel Kirchner)
  • support very large particle numbers on the GPU (more than 10⁷) by improved choice of the CUDA configuration dimensions (Daniel Kirchner)

Improvements

  • more flexible interfaces of halmd.mdsim.particle and halmd.observables.phase_space using string-based identifiers of data arrays (Daniel Kirchner)
  • specify floating-point precision in the simulation script (see construction of halmd.mdsim.particle). Use CMake flags to control for which precisions GPU and host backends are built. (Daniel Kirchner)
  • overwrite output files only if forced to do so, add command line flag --overwrite. (Daniel Kirchner)

Internal changes

  • switch to extensible and generic data arrays in halmd.mdsim.particle, unified implementation of single and mixed precision arrays (Daniel Kirchner)

Version 1.0-alpha5

Breaking changes

  • increase minimal required version of the CUDA SDK to 5.0 (Nicolas Höft)

Bug fixes

  • fix build with up-to-date versions of build tools and third-party libraries: (Daniel Kirchner, Nicolas Höft)
  • minor fixes in exemplary simulation scripts (Felix Höfling, Nicolas Höft)

New features

  • release the software under the terms of the LGPL-3+ license (Felix Höfling)
  • find additional Lua scripts in the directory of the simulation script, which allows factoring out common functions or definitions, e.g., of interaction potentials (Felix Höfling)
  • add function to_particle() to particle groups, which convert the selected particles to an instance of halmd.mdsim.particle (Nicolas Höft)

Improvements

  • drop restriction on minimal number of Verlet neighbour cells (fall back to no binning upon neighbour list construction) (Nicolas Höft)
  • builds with standard CMake ≥ 2.8.12, the patch for native CUDA support is not needed anymore (Daniel Kirchner)
  • support version 7.5 of the CUDA SDK (Daniel Kirchner)
  • increase default CUDA compute capability to 2.0 (older hardware is still supported with CUDA SDK ≤ 6.0) (Daniel Kirchner)

Version 1.0-alpha4

Breaking changes

  • Lua scripts in examples/liquid: rename option “–trajectory” to “–input” (Felix Höfling)

Bug fixes

  • fix native build for Fermi and Kepler GPUs (compute capability ≥ 2.0) (Nicolas Höft)
  • fix build with Boost ≥ 1.57.0 (Nicolas Höft)
  • compatibility with HDF5 ≥ 1.8.14 (Nicolas Höft, Felix Höfling)

New features

  • add function halmd.random.shuffle(), which allows one, e.g., to setup well-stirred fluid mixtures (Felix Höfling)

Improvements

  • documentation: new sections “Recipes” and “Publications” (Felix Höfling)
  • support version 6.0 of the CUDA SDK (Nicolas Höft)
  • support both Lua 5.1 and Lua 5.2 (built without compatibility flags) (Nicolas Höft)

Version 1.0-alpha3

Breaking changes

  • mdsim/particle: make space dimension mandatory (Felix Höfling)
  • mdsim/potentials: move to sub-namespace “pair” (Felix Höfling)

Bug fixes

  • potentials: fix uninitialised memory for energy shift (host only) (Nicolas Höft)
  • integrators: make Nosé–Hoover thermostat working again (Felix Höfling)
  • compile and build against Boost C++ 1.56 (Felix Höfling)

New features

  • tensor-valued custom dynamic correlation functions (Felix Höfling)

Improvements

  • packages.mk: more robust installation of prerequisites (Felix Höfling)
  • documentation: installation instructions, minor fixes (Felix Höfling)

Internal changes

  • move from boost::{array,tuple} to std::{array,tuple} (Nicolas Höft)
  • mdsim/box: fix failing unit test (Nicolas Höft)

Version 1.0-alpha2

Improvements

  • drop submodule Boost.Log and use library shipped with Boost ≥ 1.55 (Nicolas Höft)
  • integrators: reduce memory access gives a 10-20% performance gain (GPU only) (Felix Höfling)
  • documentation: new benchmark results, minor fixes and updates (Felix Höfling, Nicolas Höft)

Bug fixes

  • integrators: fix missing update of box image data (GPU only) (Felix Höfling)

Version 1.0-alpha1

Substantial development (1225 commits!) happened since version 0.2.1 with contributions from Peter Colberg, Felix Höfling, and Nicolas Höft.

Most important changes

  • completed the switch from a monolithic to a modular design
  • modules are exposed through a Lua API
  • simulations are defined and steered by either custom or shipped Lua scripts
  • dynamic correlation functions can be customised
  • H5MD format (version 1.0) for input and output files
  • face lift of the website

Version 0.2.1

Improvements

  • improve performance of force kernel for truncated pair interactions by about 10% due to inefficient use of the texture cache

Bug fixes

  • fix regex benchmark scripts
  • fix build failure with Boost C++ 1.53.0
  • fix build failure with nvcc option -arch=sm_20 and CMake switch VERLET_DSFUN=FALSE

Version 0.2.0

Version 0.2.0 is a complete rewrite of branch 0.1.x, aiming at a modular code base. Most algorithms, in particular the actual MD simulation algorithms, have been kept.

This version features a slightly larger choice of potentials and NVT integrators, but it brings only rudimentary support for dynamic correlations functions.

Version 0.1.3

Improvements

  • fully support mobility filters for the VACF

Version 0.1.2

Improvements

  • revise documentation

Bug fixes

  • fix build failure with Boost C++ 1.46

Version 0.1.1

New features

  • computation of shear viscosity
  • displacement/mobility filters for dynamic correlation functions

Bug fixes

  • fix build failure with CUDA 3.2
  • fix build failure with Boost C++ 1.42

Version 0.1.0

The first release of HAL’s MD package, forming the basis for the preprint at http://arxiv.org/abs/0912.3824, later published in Comput. Phys. Commun. 182, 1120 (2011).