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 groupregion
. 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)
andrepeat_element(x, n)
and some BLAS level 1 operations onnumeric 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 deprecatedmodified_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 thegeometry 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 wasaquire
before (Felix Höfling) - rename particle group
from_range
toid_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 sameparticle
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 groupregion_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 propertyfluctuating
of theparticle 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
andappend_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 ofhalmd.observables.utility.wavevector
. In addition, adense
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 signalson_start
andon_finish
are triggered only upon first invocation ofrun()
and upon return frommain()
of the simulation script, respectively. Theprofiler
output function is connected to theon_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 optionallydefine_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 integratorhalmd.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
andhalmd.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 ofhalmd.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.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).