I wrote a small’ish package Brillouin.jl that is aimed at making the frequent task of determining and understanding paths and domains in k-space simpler and more streamlined.
Specifically, it provides tools to easily:
- Construct Wigner-Seitz cells (i.e. Brillouin zones if in k-space) from a lattice basis [
- Obtain “minimal” paths in k-space, consistent with symmetry constraints (as defined by a space group number and lattice basis) [
irrfbz_path]. Specifically, it returns the same paths as those in the popular Python SeeK-path package, but implemented in Julia (and works in both 2D and 3D).
- Interpolate generated k-space paths, either by approximately equidistant distribution of points [
interpolate] or by splicing [
- Visualize generated Wigner-Seitz cells and k-space paths via PlotlyJS (and, to a lesser, more incomplete degree, Makie). Examples included in the documentation.
- Plot well-labelled dispersion diagrams through interpolated k-paths.
The hope is that this might be useful for those who frequently need to generate dispersion diagrams (e.g., in solid state physics or photonic crystal research) and have tired of manually determining a “good” path in k-space.
If there’s interest, future developments might include interfacing with spglib to automatically determine the space group and (conventional) lattice bases.