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
scikit-learn. Many more user-provided packages are available through
channels on anaconda.org.
$ 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.
- Fix wrong access to system.box
- 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
- Fix invalid MPI communicator error with Intel MPI
- Fix python 3.5.1 seg fault
- Automatically load balanced domain decomposition simulations.
- Anisotropic particle integrators.
- Gay-Berne pair potential.
- Dipole pair potential.
- Brownian dynamics
- Langevin dynamics
nlist.stencilto compute neighbor lists using stencilled cell lists.
- Add single value scale,
analyze.logcan 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:
- 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
integrate.bdnvtis deprecated. Use
init.binare now removed. Use XML files for restartable jobs.
Changes that may break existing scripts
boxdim.wrapnow returns the position and image in a tuple, where it used to return just the position.
wall.ljhas a new API
init.binhave been removed.
- 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
- Fix incorrect simulations with
- Label mie potential correctly in user documentation
- Performance improvements for systems with large particle size disparity
- Bounding volume hierarchy (tree) neighbor list computation
- Neighbor lists have separate
r_cutvalues for each pair of types
- addInfo callback for dump.pos allows user specified information in pos files
test_pair_set_energyunit 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
- Fix a problem were bond forces are computed incorrectly in some MPI configurations
- Fix bug in pair.zbl
- Add pair.zbl to the documentation
HOOMD_PYTHON_LIBRARYto avoid problems with modified CMake builds that preset
dump.xml(restart=True)now works with MPI execution
- Added missing documentation for
- Build all unit tests by default
- Run all script unit tests through
mpirun -n 1
- Allow builds with ninja.
- Allow K=0 FENE bonds.
- Allow number of particles types to change after initialization.
- Allow number of particles to change after initialization.
system.particles.add('A') del system.particles
- OPLS dihedral
phasekeyword to analyzers and dumps to make restartable jobs easier.
HOOMD_WALLTIME_STOPenvironment 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.
.bibfiles 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_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
- 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.
-march=nativebuilds in OS X clang builds.
- 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
commmethod 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
- Job scripts that do not call
context.initialize()will result in a warning message. A future version of HOOMD will require that you call
optioncommands for controlling the execution configuration. Replaced with
- Fix segfault when changing integrators
- Fix system.box 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
- 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
- Enable builds with intel MPI
- Silence warnings coming from boost and python headers
- 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
- 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
- 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 analyze.msd ignored images in the
- 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.
import hoomd_script as ...
- 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.
- 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
- 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 system.box.
- system.box no longer accepts 3-tuples. It takes data.boxdim objects.
- system.dimensions no longer exists. Query the dimensionality of the system from system.box. 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 change log entries are available in the source file ChangeLog.md.