freud v2.0.0 released

52 views
Skip to first unread message

Bradley Dice

unread,
Oct 31, 2019, 10:55:29 AM10/31/19
to freud-users

Version 2.0.0 of freud is now released.

universe-2.0.jpg



freud v2.0.0 is out! This major release is a significant step forward in flexibility, performance, and features for the freud library. Some highlights:


  • Complete API rewrite for consistency across compute objects.

  • New API for defining particle systems, which accelerates computations and accepts input data from a variety of other tools including MDAnalysis, gsd, garnett, OVITO and HOOMD-blue.

  • New API for defining particle neighbors, making it easy to use a cutoff distance, a fixed number of nearest neighbors, Voronoi neighbors, or a custom neighbor list for any analysis method.

  • Easier to implement custom analysis methods based on neighbor pairs using the new freud.locality API.

  • Faster analysis -- our benchmarks show speedups of 4x or more for several modules.

  • New tutorials, examples, and documentation to improve the experience for new users.

  • Windows builds are now available on conda-forge.

The library's API has changed significantly from version 1.2. We recommend that all users check out the new tutorial to get a feel for how to use freud 2.0 effectively. Please read the updated documentation for new guides and examples that cover the main changes and new features in this release.

Thank you to all who contributed code and reported issues. Please report issues and suggest feature enhancements via the freud GitHub issue tracker.

Release notes:

Added

  • Ability to specify "system-like" objects that contain a box and set of points for most computes.
  • NeighborLists and query arguments are now accepted on equal footing by compute methods that involve neighbor finding via the neighbors=... argument.
  • Extensive new documentation including tutorial for new users and reference sections on crucial topics.
  • Standard method for preprocessing arguments of pair computations.
  • New internal ManagedArray object that allows data persistence and improves indexing in C++.
  • Internal threaded storage uses the standard ManagedArray object.
  • C++ Histogram class to standardize n-dimensional binning and simplify writing new methods.
  • Upper bound r_max option for number of neighbors queries.
  • Lower bound r_min option for all queries.
  • Steinhardt now supports l = 0, 1.
  • C++ BondHistogramCompute class encapsulates logic of histogram-based methods.
  • 2D PMFTs accept quaternions as well as angles for their orientations.
  • ClusterProperties computes radius of gyration from the gyration tensor for each cluster.
  • freud.data module for generating example particle systems.
  • Optional normalization for RDF, useful for small systems.
  • plot() methods for NeighborQuery and Box objects.
  • Added support for reading system data directly from MDAnalysis, garnett, gsd, HOOMD-blue, and OVITO.
  • Various validation tests.

Changed

  • All compute objects that perform neighbor computations now use NeighborQuery internally.
  • Neighbor-based compute methods now accept NeighborQuery (or "system-like") objects as the first argument.
  • All compute objects that perform neighbor computations now loop over NeighborBond objects.
  • Renamed (ref_points, points) to (points, query_points) to clarify their usage.
  • Bond vector directionality is standardized for all computes that use it (always from query_point to point).
  • Standardized naming of various common parameters across freud such as the search distance r_max.
  • Accumulation is now performed with compute(..., reset=False).
  • Arrays returned to Python persist even after the compute object is destroyed or resizes its arrays.
  • All class attributes are stored in the C++ members and accessed via getters wrapped as Python properties.
  • Code in freud.common has been moved to freud.util.
  • NeighborQuery objects require z == 0 for all points if the box is 2D.
  • Renamed several Box methods, box.ParticleBuffer is now locality.PeriodicBuffer.
  • Cluster now finds connected components of the neighbor graph (the cluster cutoff distance is given through query arguments).
  • Refactored and renamed attributes of Cluster and ClusterProperties modules.
  • CorrelationFunction of complex inputs performs the necessary conjugation of the values before computing.
  • Updated GaussianDensity constructor to accept tuples as width instead of having 2 distinct signatures.
  • RDF bin centers are now strictly at the center of bins.
  • RDF no longer performs parallel accumulation of cumulative counts (provided no performance gains and was substantially more complex code).
  • MatchEnv has been split into separate classes for the different types of computations it is capable of performing, and these classes all use v2.0-style APIs.
  • The Voronoi class was rewritten to use voro++ for vastly improved performance and correctness in edge cases.
  • Improved Voronoi plotting code.
  • Cubatic uses standard library random functions instead of Saru (which has been removed from the repo).
  • APIs for several order parameters have been standardized.
  • SolidLiquid order parameter has been completely rewritten, fixing several bugs and simplifying its C++ code.
  • Steinhardt uses query arguments.
  • PMFTXY2D has been renamed to PMFTXY.
  • Removed unused orientations from PMFTXYZ and PMFTXY.
  • PMFTXY and PMFTXYZ include the phase space volume of coordinates that are implicitly integrated out (one angle in PMFTXY, and three angles in PMFTXYZ).
  • Documentation uses automodule instead of autoclass.
  • Citations are now included using bibtex and sphinxcontrib-bibtex.

Fixed

  • Removed all neighbor exclusion logic from all classes, depends entirely on locality module now.
  • Compute classes requiring 2D systems check the dimensionality of their input boxes.
  • LinkCell nearest neighbor queries properly check the largest distance found before proceeding to next shell.
  • LocalDensity uses the correct number of points/query points.
  • RDF no longer forces the first bin of the PCF and first two bins of the cumulative counts to be 0.
  • Steinhardt uses the ThreadStorage class and properly resets memory where needed.

Removed

  • The freud.util module.
  • Python 2 is no longer supported. Python 3.5+ is required.
  • LinkCell no longer exposes the internals of the cell list data structure.
  • Cubatic no longer returns the per-particle tensor or the constant r4 tensor.
Reply all
Reply to author
Forward
0 new messages