Enumlib.jl
A Julia successor to the Fortran enumlib derivative-structure enumeration tool, with significant improvements. Enumlib enumerates symmetry-inequivalent decorations of a parent crystal lattice across user-chosen supercell volumes, optionally constrained to a fixed concentration. Outputs are ready for cluster expansion fitting, DFT/MLIP training-database generation, or to use as inputs to downstream materials-science workflows.
This site is organized as a Diátaxis four-quadrant documentation tree:
- Tutorials — learn by doing. Run your first enumeration, generate a DFT training set, work end-to-end.
- How-to guides — task-oriented recipes. "I have X, I want Y, what calls do I make?"
- Reference — every public function, type, and kwarg. Authoritative API.
- Explanation — the why and the math. The primary algorithms, key papers, dispatch logic, super-periodicity, glossary, how finite precision is handled.
Enumlib.jl is in active development. The API is settling but is not yet declared stable; pin a specific version in your Project.toml if you need reproducible builds.
Install
using Pkg
Pkg.develop(url = "https://github.com/glwhart/Enumlib.jl") # while unregistered
# Pkg.add("Enumlib") # After the package is registered
using EnumlibQuick taste
using Enumlib
parent = ParentLattice([0.5 0.5 0.0;
0.5 0.0 0.5;
0.0 0.5 0.5]) # FCC primitive
sites = Sites([Site([0.0, 0.0, 0.0], [0, 1])]) # binary case, one site
enum = enumerate(parent, sites; supercells = VolumeRange(1:4))
length(enum)For more, head to the first-enumeration tutorial.