def get_ir_reciprocal_mesh(mesh, cell, is_shift=np.zeros(3, dtype=int), is_time_reversal=False, symprec=1e-5): """ Return k-point map to the irreducible k-points and k-point grid points . The symmetry is serched from the input cell. is_shift=[ 0, 0, 0 ] gives Gamma center mesh. """ return spg.get_ir_reciprocal_mesh(mesh, cell, is_shift, is_time_reversal, symprec)
def get_ir_grid_points(mesh, primitive, mesh_shifts=[False, False, False], is_return_map=False): grid_mapping_table, grid_address = spg.get_ir_reciprocal_mesh( mesh, primitive, is_shift=np.where(mesh_shifts, 1, 0)) ir_grid_points = np.unique(grid_mapping_table) weights = np.zeros_like(grid_mapping_table) for g in grid_mapping_table: weights[g] += 1 ir_grid_weights = weights[ir_grid_points] if is_return_map: return ir_grid_points, ir_grid_weights, grid_address, grid_mapping_table else: return ir_grid_points, ir_grid_weights, grid_address
def set_grid(self): self._point_operations= get_pointgroup_operations( Symmetry(self._cell).get_pointgroup_operations()) self._kpoint_operations = get_kpoint_group(self._mesh, self._point_operations) (mapping, rot_mappings) =get_mappings(self._mesh, Symmetry(self._cell).get_pointgroup_operations(), qpoints=np.array([0,0,0],dtype="double")) self._rot_mappings = self._kpoint_operations[rot_mappings] self._mapping, self._grid=spg.get_ir_reciprocal_mesh(self._mesh, self._cell) assert (self._mapping==mapping).all() self._map_to_ir_index=np.zeros_like(mapping) reverse_mapping=[] for i,u in enumerate(np.unique(mapping)): reverse_mapping.append(np.where(mapping==u)[0]) self._map_to_ir_index[np.where(mapping==u)] = i self._reverse_mapping=reverse_mapping
def get_shortest_qpoints(self): return self._shortest_qpoints if __name__ == '__main__': from phonopy.interface.vasp import read_vasp from phonopy.structure.symmetry import Symmetry, get_lattice_vector_equivalence from phonopy.structure.spglib import get_ir_reciprocal_mesh, relocate_BZ_grid_address import sys cell = read_vasp(sys.argv[1]) symmetry = Symmetry(cell) mesh = [4, 4, 4] is_shift = np.array([0, 0, 0], dtype='intc') mapping_table, grid_address = get_ir_reciprocal_mesh( mesh, cell, is_shift=is_shift) ir_grid_points = np.unique(mapping_table) primitive_vectors = np.linalg.inv(cell.get_cell()) bz_grid_address, bz_map = relocate_BZ_grid_address( grid_address, mesh, np.linalg.inv(cell.get_cell()), is_shift=is_shift) bz_points = np.extract(bz_map > -1, bz_map) qpoints = (grid_address + is_shift / 2.0) / mesh qpoints -= (qpoints > 0.5001) * 1 bz = BrillouinZone(primitive_vectors) bz.run(qpoints)