The freud Python library provides a simple, flexible, powerful set of tools for analyzing trajectories obtained from molecular dynamics or Monte Carlo simulations. High performance, parallelized C++ is used to compute standard tools such as radial distribution functions, correlation functions, and clusters, as well as original analysis methods including potentials of mean force and torque (PMFTs) and local environment matching. The freud library uses NumPy arrays for input and output, enabling integration with the scientific Python ecosystem for many typical materials science workflows.
When using freud to process data for publication, please use this citation.
- freud Documentation:
Python package reference.
- Installation Guide: Instructions for installing and compiling freud.
- Examples: Jupyter notebooks demonstrating the core features of freud.
- API Reference: Documentation for classes and methods in freud.
- Development Guide: Resources for contributing to freud.
- freud-users Google Group: Ask questions to the freud community.
- Issue Tracker: Report issues and suggest feature enhancements.
Install via conda:
conda install -c conda-forge freudOr via pip:
pip install freud-analysisfreud is also available via containers for Docker or Singularity.
Please refer to the Installation Guide to compile freud from source.
The freud library is called using Python scripts. Many core features are demonstrated in the freud documentation. Additional example Jupyter notebooks can be found in the freud examples repository. These notebooks may be launched interactively on Binder or downloaded and run on your own system. Below is a script that computes the radial distribution function.
import freud
# Create a freud compute object (rdf is the canonical example)
rdf = freud.density.RDF(rmax=5, dr=0.1)
# Load in your data (freud does not provide a data reader)
box_data = np.load("path/to/box_data.npy")
pos_data = np.load("path/to/pos_data.npy")
# Create freud box
box = freud.box.Box(Lx=box_data[0]["Lx"], Ly=box_data[0]["Ly"], is2D=True)
# Compute RDF
rdf.compute(box, pos_data[0], pos_data[0])
# Get bin centers, RDF data
r = rdf.R
y = rdf.RDF