Source code for wulfric.crystal._hpkot_examples

# ================================== LICENSE ===================================
# Wulfric - Cell, Atoms, K-path, visualization.
# Copyright (C) 2023-2025 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
# ================================ END LICENSE =================================
import os
from wulfric.io._vasp import load_poscar
from wulfric.constants._hpkot_convention import HPKOT_EXTENDED_BL_SYMBOLS

__all__ = ["hpkot_get_example"]


[docs] def hpkot_get_example(extended_bl_symbol, with_inversion=False): r""" Returns an example of the crystal structure for each of the given extended Bravais lattice symbol as defined in [1]_. .. versionadded:: 0.6.3 Crystal structures are taken from the |seekpath|_ repository with the permission of its authors. See :ref:`api_constants_HPKOT_EXTENDED_BL_SYMBOLS` for the full list of supported symbols. .. warning:: "oF2", "oI2", "oA1", "oA2" with ``with_inversion=True`` are not supported fo now. Parameters ---------- extended_bl_symbol : str Extended Bravais lattice symbol. Case-sensitive. with_inversion : bool, default False Whether give an example that has inversion symmetry. Returns ------- cell : (3, 3) :numpy:`ndarray` Unit cell of the crystal structure. atoms : dict Atoms of the crystal structure. Raises ------ ValueError If ``extended_bl_symbol`` is not supported. References ---------- .. [1] Hinuma, Y., Pizzi, G., Kumagai, Y., Oba, F. and Tanaka, I., 2017. Band structure diagram paths based on crystallography. Computational Materials Science, 128, pp.140-184. """ if extended_bl_symbol in ["oF2", "oI2", "oA1", "oA2"] and with_inversion: raise ValueError( '"oF2", "oI2", "oA1", "oA2" with with_inversion=True currently are not supported.' ) supported_symbols = list(HPKOT_EXTENDED_BL_SYMBOLS) supported_symbols += list(set([_[:2] for _ in supported_symbols])) if extended_bl_symbol not in supported_symbols: raise ValueError( f'Extended Bravais lattice symbol "{extended_bl_symbol}" is not supported. Supported are:\n * ' + "\n * ".join(supported_symbols) ) if len(extended_bl_symbol) == 2: if extended_bl_symbol == "aP": extended_bl_symbol = "aP2" else: extended_bl_symbol += "1" POSCAR_filename = os.path.join( os.path.split(os.path.abspath(__file__))[0], "POSCAR-files", extended_bl_symbol ) if with_inversion: POSCAR_filename = os.path.join(POSCAR_filename, "POSCAR_inversion") else: POSCAR_filename = os.path.join(POSCAR_filename, "POSCAR_noinversion") cell, atoms, _ = load_poscar(file_object=POSCAR_filename) return cell, atoms