vibeqc.monkhorst_pack

vibeqc.monkhorst_pack(system, mesh, is_shift=None, use_symmetry=False, *, symmetry=None)[source]

Build a legacy BlochKMesh Monkhorst-Pack mesh.

This public compatibility wrapper keeps the historical gamma-centred default of the C++ binding (is_shift=(0, 0, 0)) while accepting the same low-dimensional active-axis shorthand as KPoints: [n] for 1D and [n1, n2] for 2D. Inactive axes are pinned to Γ with mesh size 1 and shift 0.

Use KPoints.monkhorst_pack() for the richer Python API with classical Monkhorst-Pack auto-shifts.

Warning

This is the Gamma-centred convention, and it is not what ASE/GPAW’s identically-named function returns. vibe-qc samples {0, 1/N, ..., (N-1)/N} along each axis (Gamma is always in the set); ase.dft.kpoints.monkhorst_pack returns the classical mesh, offset by half a step.

For odd N the half-step offset wraps onto the same lattice and the two point sets are identical. For even N it lands exactly between vibe-qc’s points and the sets are disjoint – measured 2026-08-02, (3,3,3) and (5,5,5) share all their points while (2,2,2), (4,4,4) and (6,6,6) share none. A cross-code comparison validated at an odd mesh will therefore pass and still be sampling a different Brillouin zone at an even one.

Pass is_shift explicitly to build the shifted mesh.