  Calculations of properties of materials require performing numerical
integrals over the Brillouin zone (BZ). Integration points in density
functional theory codes are uniformly spread over the BZ despite integration
error being concentrated in small regions of the BZ and preserve symmetry to
improve computational efficiency. Integration points over the irreducible
Brillouin zone (IBZ), the rotationally distinct region of the BZ, do not have
to preserve crystal symmetry for greater efficiency. This freedom allows the
use of adaptive meshes with higher concentrations of points at locations of
large error, resulting in improved algorithmic efficiency. We have created an
algorithm for constructing the IBZ of any crystal structure in 2D and 3D. The
algorithm uses convex hull and half-space representations for the BZ and IBZ to
make many aspects of construction and symmetry reduction of the BZ trivial. The
algorithm is simple, general, and available as open-source software.
