Calculating the properties of crystalline materials requires numeric integration. The function integrated is costly to evaluate, so symmetry is used to reduce the number of function evaluations. SymmetryReduceBZ.jl is a package that calculates a symmetrically unique integration domain for any crystalline material—the irreducible Brillouin zone (IBZ). Integration meshes over the IBZ have the maximum possible symmetry reduction and consequently are the most computationally efficient for the calculation of properties of materials.
SymmetryReduceBZ.jl calculates the irreducible Brillouin zone for any 2D or 3D crystal structure (any 2D or 3D Bravais lattice and space group); the user simply provides the lattice vectors and atomic basis. It also contains methods for visualization. Details of the algorithm can be found here.
Nice! Two Brillouin zone packages in a few hours, did you guys coordinate with @tchr or was it pure coincidence? Is this plain Monkhorst-Pack grids, or is there something more fancy going on?
We currently use Monkhorst-Pack and symmetry reduction via spglib in GitHub - JuliaMolSim/DFTK.jl: Density-functional toolkit, it could be nice to replace it with this - although coding up symmetry stuff is very error-prone and so I’m a bit reluctant to change the currently working solution.
Related to what @antoine-levitt said: Did you make a comparison / verification with spglib for example? I remember from discussions with the spglib author that there can be quite tricky cases for determining the symmetries (e.g. when you have supercells) and that there are hidden assumptions that your input is reasonably nice in the library. What I am getting at is: Is there the chance for a drop-in replacement of spglib with SymmetryReduceBZ or would one expect differences in behaviour from both packages?
I didn’t compare symmetries with spglib, but it is possible to use those symmetries instead during the calculation and reduction of the Brillouin zone.