I am using pymatgen to generate the k points of the irreducible brillouin zone in order to speed up some calculations for optical absorption for a zincblende crystal (InP) using a custom code (based on 6x6 band kp hamiltonian) and when sweeping through the k points I have tried the following two scenarios:
Scenario 1
I sample the dense k grid:
from itertools import product
k_values=np.asarray(list(product(np.linspace(-0.5, 0.5, 2*Nk),
np.linspace(-0.5, 0.5, 2*Nk),
np.linspace(-0.5, 0.5, 2*Nk)))) #nm**-1
weights = np.ones(len(k_values))
weights[1:] *=1
Scenario 2
I use pymatgen to generate the IBZ:
# Use SpacegroupAnalyzer to get the symmetry operations
sga = SpacegroupAnalyzer(structure)
ir_kpoints = sga.get_ir_reciprocal_mesh(mesh=(Nk, Nk, Nk))
k_values = np.asarray([k[0] for k in ir_kpoints])
weights = np.asarray([k[1] for k in ir_kpoints])
Problem
The first one yields results close to the published ones, whereas the second is about one order of magnitude away, or by a factor of 8-ish. I assumed the weights returned by pymatgen refer to the whole of the brillouin zone, so that scenario 1 and scenario 2 would be identical. What am I missing?