University of Michigan Logo

Official Binaries

Official binaries of HOOMD-blue are available via conda through the glotzer channel. Conda is a python-centric packaging system targeted at computational researchers. The default package database includes many useful packages such as scipy, ipython and scikit-learn. Many more user-provided packages are available through channels on

To install HOOMD-blue, first download and install miniconda following conda's instructions. Then add the glotzer channel and install HOOMD-blue:

$ conda config --add channels glotzer
$ conda install hoomd

If you have already installed hoomd in conda, you can upgrade to the latest version:

$ conda update --all


  • On Linux (64-bit):
    • CPU with AVX capabilities (2011 or newer)
    • A recent linux distribution (such as CentOS/RHEL 6, ubuntu 14.04, or newer)
    • [optional] NVIDIA drivers 352.55 or newer
    • [optional] CUDA capable NVIDIA GPU, compute 2.0 or newer.
  • On Mac:
    • CPU with AVX capabilities (2011 or newer)
    • OSX 10.8 or newer
    • Note: Mac builds are not MPI or GPU enabled.

User supported binaries

A HOOMD-blue user maintains an Arch Linux (AUR) package.


Download: Source - latest version

Previous releases are available on HOOMD-blue's bitbucket page.

See the user manual for system requirements and build instructions.

HOOMD-blue's license requires that you cite certain papers in works that used HOOMD-blue. See the citation page for instructions.

Change Log


Released 2016/03/06

Bug fixes

  • Fix problem incluing hoomd.h in plugins
  • Fix random memory errors when using walls


Released 2016/02/08

Bug fixes

  • Fix wrong access to
  • Fix kinetic energy logging in MPI
  • Fix particle out of box error if particles are initialized on the boundary in MPI
  • Add integrate.brownian to the documentation index
  • Fix misc doc typos
  • Fix runtime errors with boost 1.60.0
  • Fix corrupt metadata dumps in MPI runs


Released 2016/1/14

Bug fixes

  • Fix invalid MPI communicator error with Intel MPI
  • Fix python 3.5.1 seg fault


Released 2015/12/8

New features

  • Automatically load balanced domain decomposition simulations.
  • Anisotropic particle integrators.
  • Gay-Berne pair potential.
  • Dipole pair potential.
  • Brownian dynamics integrate.brownian
  • Langevin dynamics integrate.langevin (formerly bdnvt)
  • nlist.stencil to compute neighbor lists using stencilled cell lists.
  • Add single value scale, min_image, and make_fraction to data.boxdim
  • analyze.log can optionally not write a file and now supports querying current quantity values.
  • Rewritten wall potentials.
    • Walls are now sums of planar, cylindrical, and spherical half-spaces.
    • Walls are defined and can be modified in job scripts.
    • Walls execute on the GPU.
    • Walls support per type interaction parameters.
    • Implemented for: lj, gauss, slj, yukawa, morse, force_shifted_lj, and mie potentials.
  • External electric field potential: external.e_field

Bug fixes

  • Fixed a bug where NVT integration hung when there were 0 particles in some domains.
  • Check SLURM environment variables for local MPI rank identification
  • Fixed a typo in the box math documentation
  • Fixed a bug where exceptions weren't properly passed up to the user script
  • Fixed a bug in the velocity initialization example
  • Fixed an openmpi fork() warning on some systems
  • Fixed segfaults in PPPM
  • Fixed a bug where compute.thermo failed after reinitializing a system
  • Support list and dict-like objects in init.create_random_polymers.
  • Fall back to global rank to assign GPUs if local rank is not available

Deprecated commands

  • integrate.bdnvt is deprecated. Use integrate.langevin instead.
  • dump.bin and init.bin are now removed. Use XML files for restartable jobs.

Changes that may break existing scripts

  • boxdim.wrap now returns the position and image in a tuple, where it used to return just the position.
  • wall.lj has a new API
  • dump.bin and init.bin have been removed.


Released 2015/10/22

Bug fixes

  • Fix a crash when adding or removing particles and reinitializing
  • Fix a bug where simulations hung on sm 5.x GPUs with CUDA 7.5
  • Fix compile error with long tests enabled
  • Issue a warning instead of an error for memory allocations greater than 4 GiB.
  • Fix invalid RPATH when building inside zsh.
  • Fix incorrect simulations with integrate.npt_rigid
  • Label mie potential correctly in user documentation


Released 2015/09/30

New features

  • Performance improvements for systems with large particle size disparity
  • Bounding volume hierarchy (tree) neighbor list computation
  • Neighbor lists have separate r_cut values for each pair of types
  • addInfo callback for dump.pos allows user specified information in pos files

Bug fixes

  • Fix test_pair_set_energy unit test, which failed on numpy < 1.9.0
  • Analyze.log now accepts unicode strings.
  • Fixed a bug where calling restore_snapshot() during a run zeroed potential parameters.
  • Fix segfault on exit with python 3.4
  • Add to documentation
  • Fix a problem were bond forces are computed incorrectly in some MPI configurations
  • Fix bug in pair.zbl
  • Add pair.zbl to the documentation
  • Use HOOMD_PYTHON_LIBRARY to avoid problems with modified CMake builds that preset PYTHON_LIBRARY


Released 2015/07/21

Bug fixes

  • dump.xml(restart=True) now works with MPI execution
  • Added missing documentation for meta.dump_metadata
  • Build all unit tests by default
  • Run all script unit tests through mpirun -n 1


Released 2015/07/14

New features

  • Allow builds with ninja.
  • Allow K=0 FENE bonds.
  • Allow number of particles types to change after initialization. system.particles.types.add('newType')
  • Allow number of particles to change after initialization. system.particles.add('A') del system.particles[0]
  • OPLS dihedral
  • Add phase keyword to analyzers and dumps to make restartable jobs easier.
  • HOOMD_WALLTIME_STOP environment variable to stop simulation runs before they hit a wall clock limit.
  • init.read_xml() Now accepts an initialization and restart file.
  • dump.xml() can now write restart files.
  • Added documentation concepts page on writing restartable jobs.
  • New citation management infrastructure. writes .bib files with a list of references to features actively used in the current job script.
  • Snapshots expose data as numpy arrays for high performance access to particle properties.
  • data.make_snapshot() makes a new empty snapshot.
  • analyze.callback() allows multiple python callbacks to operate at different periods.
  • comm.barrier() and comm.barrier_all() allow users to insert barriers into their scripts.
  • Mie pair potential.
  • meta.dump_metadata() writes job metadata information out to a json file.
  • context.initialize() initializes the execution context.
  • Restart option for dump.xml()

Bug fixes

  • Fix slow performance when initializing pair.slj()in MPI runs.
  • Properly update particle image when setting position from python.
  • PYTHON_SITEDIR hoomd shell launcher now calls the python interpreter used at build time.
  • Fix compile error on older gcc versions.
  • Fix a bug where rigid bodies had 0 velocity when restarting jobs.
  • Enable -march=native builds in OS X clang builds.
  • Fix group.rigid() and group.nonrigid().
  • Fix image access from the python data access proxies.
  • Gracefully exit when launching MPI jobs with mixed execution configurations.

Changes that may require updated job scripts

  • context.initialize() must be called before any comm method that queries the MPI rank. Call it as early as possible in your job script (right after importing hoomd_script) to avoid problems.


  • init.create_empty() is deprecated and will be removed in a future version. Use data.make_snapshot() and init.read_snapshot() instead.
  • Job scripts that do not call context.initialize() will result in a warning message. A future version of HOOMD will require that you call context.initialize().


  • Several option commands for controlling the execution configuration. Replaced with context.initialize.


Released 2015/05/19

Bug fixes

  • Fix segfault when changing integrators
  • Fix to indicate the correct number of dimensions
  • Fix syntax error in comm.get_rank with --nrank
  • Enable CUDA enabled builds with the intel compiler
  • Use CMake builtin FindCUDA on recent versions of CMake
  • GCC_ARCH env var sets the -march command line option to gcc at configure time
  • Auto-assign GPU-ids on non-compute exclusive systems even with --mode=gpu
  • Support python 3.5 alpha
  • Fix a bug where particle types were doubled with boost 1.58.0
  • Fix a bug where angle_z=true dcd output was inaccurate near 0 angles
  • Properly handle lj.wall potentials with epsilon=0.0 and particles on top of the walls


Released 2015/04/07

Bug fixes

  • Fix invalid virials computed in rigid body simulations when multi-particle bodies crossed box boundaries
  • Fix invalid forces/torques for rigid body simulations caused by race conditions
  • Fix compile errors on Mac OS X 10.10
  • Fix invalid pair force computations caused by race conditions
  • Fix invalid neighbour list computations caused by race conditions on Fermi generation GPUs


  • Extremely long running unit tests are now off by default. Enable with -DHOOMD_SKIP_LONG_TESTS=OFF
  • Add additional tests to detect race conditions and memory errors in kernels


Released 2015/03/18

Bug fixes

  • Enable builds with intel MPI
  • Silence warnings coming from boost and python headers


Released 2015/01/27

Bug fixes

  • Fixed a bug where `linear_interp` would not take a floating point value for zero
  • Provide more useful error messages when cuda drivers are not present
  • Assume device count is 0 when `cudaGetDeviceCount()` returns an error
  • Link to python statically when `ENABLE_STATIC=on`
  • Misc documentation updates


Released 2014/09/09

Bug fixes

  • Fixed bug where error messages were truncated and HOOMD exited with a segmentation fault instead (e.g. on Blue Waters)
  • Fixed bug where plug-ins did not load on Blue Waters
  • Fixed compile error with gcc4.4 and cuda5.0
  • Fixed syntax error in read_snapshot()
  • Fixed a bug where init.read_xml throwing an error (or any other command outside of run()) would hang in MPI runs
  • Search the install path for hoomd_script - enable the hoomd executable to be outside of the install tree (useful with cray aprun)
  • Fixed CMake 3.0 warnings
  • Removed dependancy on tr1/random
  • Fixed a bug where ignored images in the r0_file
  • Fixed typos in pair.gauss documentation
  • Fixed compile errors on Ubuntu 12.10
  • Fix failure of integrate.nvt to reach target temperature in analyze.log. The fix is a new symplectic MTK integrate.nvt *ntegrator. Simulation results in hoomd v1.0.0 are correct, just the temperature and velocity outputs are off slightly.
  • Remove MPI from Mac OS X dmg build.
  • Enable import hoomd_script as ...

Other changes

  • Added default compile flag -march=native
  • Support CUDA 6.5
  • Binary builds for CentOS/RHEL 6, Fedora 20, Ubuntu 14.04 LTS, and Ubuntu 12.04 LTS.


Released 2014/05/25

New features

  • Support for python 3
  • New NPT integrator capable of flexible coupling schemes
  • Triclinic unit cell support
  • MPI domain decomposition
  • Snapshot save/restore
  • Autotune block sizes at run time
  • Improve performance in small simulation boxes
  • Improve performance with smaller numbers of particles per GPU
  • Full double precision computations on the GPU (compile time option must be enabled, binary builds provided on the download page are single precision)
  • Tabulated bond potential bond.table
  • Tabulated angle potential angle.table
  • Tabulated dihedral potental dihedral.table
  • update.box_resize now accepts period=None to trigger an immediate update of the box without creating a periodic updater
  • update.box_resize now replaces None arguments with the current box parameters
  • init.create_random and init.create_random_polymers can now create random configurations in triclinc and 2D boxes
  • init.create_empty can now create triclinic boxes
  • particle, bond, angle, dihedral, and impropers types can now be named in init.create_empty
  • system.replicate command replicates the simulation box

Bug fixes

  • Fixed a bug where init.create_random_polymers failed when lx,ly,lz were not equal.
  • Fixed a bug in init.create_random_polymers and init.create_random where the separation radius was not accounted for correctly
  • Fixed a bug in bond.* where random crashes would occur when more than one bond type was defined
  • Fixed a bug where dump.dcd did not write the period to the file

Changes that may require updated job scripts

  • integrate.nph: A time scale tau p for the relaxation of the barostat is now required instead of the barostat mass W of the previous release.
    The time scale is the relaxation time the barostat would have at an average temperature T 0 =1, and it is related to the internally used (Andersen) Barostat mass W via W= d N T 0 tau 2 p, where d is the dimensionality and N the number of particles.
  • sorter and nlist are now modules, not variables in the main namespace.
  • Data proxies function correctly in MPI simulations, but are extremely slow. If you use init.create_empty, consider separating the generation step out to a single rank short execution that writes an XML file for the main run.
  • update.box_resize(Lx=...) no longer makes cubic box updates, instead it will keep the current Ly and Lz. Use the L=... shorthand for cubic box updates.
  • All init.** commands now take *data.boxdim objects, instead of hoomd.boxdim (or 3-tuples). We strongly encourage the use of explicit argument names for data.boxdim(). In particular, if hoomd.boxdim(123) was previously used to create a cubic box, it is now required to use data.boxdim(L=123) (CORRECT) instead of data.boxdim(123) (INCORRECT), otherwise a box with unit dimensions along the y and z axes will be created.
  • system.dimensions can no longer be set after initialization. System dimensions are now set during initialization via the data.boxdim interface. The dimensionality of the system can now be queried through
  • no longer accepts 3-tuples. It takes data.boxdim objects.
  • system.dimensions no longer exists. Query the dimensionality of the system from Set the dimensionality of the system by passing an appropriate data.boxdim to an init method.
  • init.create_empty no longer accepts n_*_types. Instead, it now takes a list of strings to name the types.


  • Support for G80, G200 GPUs.
  • dump.bin and read.bin. These will be removed in v1.1 and replaced with a new binary format.


  • OpenMP mult-core execution (replaced with MPI domain decomposition)
  • tune.find_optimal_block_size (replaced by Autotuner)

Older versions

Older change log entries are available in the source file