Source code for spglib.kpoints

"""KPoints related operations."""
# Copyright (C) 2015 Atsushi Togo
# This file is part of spglib.
# SPDX-License-Identifier: BSD-3-Clause

from __future__ import annotations

import numpy as np
from numpy.typing import ArrayLike

from . import _spglib
from .error import _set_no_error, _set_or_throw_error
from .utils import Cell, _expand_cell

__all__ = [
    "get_ir_reciprocal_mesh",
]


[docs] def get_ir_reciprocal_mesh( mesh: ArrayLike[np.intc], cell: Cell, is_shift: ArrayLike[np.intc] | None = None, is_time_reversal: bool = True, symprec: float = 1e-5, is_dense: bool = False, ) -> tuple[np.ndarray, np.ndarray]: """Return k-points mesh and k-point map to the irreducible k-points. The symmetry is searched from the input cell. Parameters ---------- mesh : array_like Uniform sampling mesh numbers. dtype='intc', shape=(3,) cell : spglib cell tuple Crystal structure. is_shift : array_like, optional [0, 0, 0] gives Gamma center mesh and value 1 gives half mesh shift. Default is None which equals to [0, 0, 0]. dtype='intc', shape=(3,) is_time_reversal : bool, optional Whether time reversal symmetry is included or not. Default is True. symprec : float, optional Symmetry tolerance in distance. Default is 1e-5. is_dense : bool, optional grid_mapping_table is returned with dtype='uintp' if True. Otherwise its dtype='intc'. Default is False. Returns ------- grid_mapping_table : ndarray Grid point mapping table to ir-gird-points. dtype='intc' or 'uintp', shape=(prod(mesh),) grid_address : ndarray Address of all grid points. dtype='intc', shape=(prod(mesh), 3) """ _set_no_error() lattice, positions, numbers, _ = _expand_cell(cell) if lattice is None: return None if is_dense: dtype = "uintp" else: dtype = "intc" grid_mapping_table = np.zeros(np.prod(mesh), dtype=dtype) grid_address = np.zeros((np.prod(mesh), 3), dtype="intc") if is_shift is None: is_shift = [0, 0, 0] try: _spglib.ir_reciprocal_mesh( grid_address, grid_mapping_table, np.array(mesh, dtype="intc"), np.array(is_shift, dtype="intc"), int(is_time_reversal * 1), lattice, positions, numbers, float(symprec), ) except Exception as exc: _set_or_throw_error(exc) return None return grid_mapping_table, grid_address