qtcad.atoms.unit_cell module

Crystallographic unit cells for atomistic calculations.

class qtcad.atoms.unit_cell.UnitCellZincblende(lattice_constant: float, atom_species_ws: ndarray)

Bases: UnitCellZincblende

Unit cell of a diamond or zincblende crystal structure expressed in terms of Wigner-Seitz cell and conventional (cubic) unit cell.

Attributes:
  • lattice_constant (float) – Lattice constant of the crystal structure, namely the side length of the conventional (cubic) unit cell.

  • atom_num_ws (int) – Total number of atoms in the Wigner-Seitz cell, namely 2.

  • atom_num_cc (int) – Total number of atoms in the conventional (cubic) unit cell, namely 8.

  • lattice_vec_ws (Numpy.ndarray) – \(3\times 3\) matrix, each row of which is a primitive lattice vector of the Wigner-Seitz cell.

  • lattice_vec_cc (Numpy.ndarray) – \(3\times 3\) matrix, each row of which is a primitive lattice vector of the conventional (cubic) unit cell.

  • atom_species_ws (Numpy.ndarray) – Vector with 2 elements which are strings describing the atomic species (e.g. “Si”) of each atom in the Wigner-Seitz cell.

  • atom_species_cc (Numpy.ndarray) – Vector with 8 elements which are strings describing the atomic species (e.g. “Si”) of each atom in the conventional (cubic) unit cell.

  • atom_pos_ws (Numpy.ndarray) – \(2\times 3\) matrix, each row of which is the position of an atom in the Wigner-Seitz cell; the ordering of the rows matches the ordering of atoms in atom_species_ws.

  • atom_pos_cc (Numpy.ndarray) – \(8\times 3\) matrix, each row of which is the position of an atom in the conventional (cubic) unit cell; the ordering of the rows matches the ordering of atoms in atom_species_cc.

  • reciprocal_vec (Numpy.ndarray) – \(3\times 3\) matrix, each row of which is a reciprocal lattice vector of the Wigner-Seitz cell.

__init__(lattice_constant: float, atom_species_ws: ndarray) None
Parameters:
  • lattice_constant (float) – Lattice constant of the crystal structure, namely the side length of the conventional (cubic) unit cell.

  • atom_species_ws (Numpy.ndarray) – Vector with 2 elements which are strings describing the atomic species (e.g. “Si”) of each atom in the Wigner-Seitz cell.

plot_bandstructure(soc: bool = False, tb_params_name: str | Tuple[str, ...] = ('Niquet', 'Kim'), lines: Tuple[Tuple[str, str], ...] = (('G', 'X'), ('X', 'W'), ('W', 'L'), ('L', 'G'), ('G', 'K'), ('U', 'X')), num_k: int = 101, title: str = None, path: str = None, show_figure: bool = True) Tuple[ndarray, ndarray, ndarray]

Compute and plot bandstructure along high-symmetry lines in the Brillouin zone. The computation is based on the tight-binding model.

Parameters:
  • soc (bool, optional) – Whether spin-orbit coupling is considered. Default: False.

  • tb_params_name (str or tuple of str, optional) – If a str, name of the tight-binding model parameter set, which is typically the name of the first author of the paper from which the parameters were extracted. If a tuple, names of the tight-binding model parameter sets ordered according to precedence; if multiple parameter sets are available for a given atom or pair of atoms, the parameter set is set to the available parameter set whose name first appears in the tuple. The parameter set names include “Niquet”, “Boykin”, “Vogl”, “Klimeck_cb”, “Klimeck_vb”, and “Kim”. Default: (“Niquet”, “Kim”).

  • lines (tuple of tuple of two str, optional) – High symmetry lines defining the path in the Brillouin zone along which the bandstructure is computed. The entries of this list are tuples of two strings chosen among “G” (which stands for Gamma), “X”, “W”, “L”, “K”, and “U”; the first (second) string defines the start (end) point of a high-symmetry line. Default: ((“G”, “X”), (“X”, “W”), (“W”, “L”), (“L”, “G”), (“G”, “K”), (“U”, “X”)).

  • num_k (int, optional) – Number of sampled wavevectors along each high-symmetry line. Must be at least 2. Default: 101.

  • title (str, optional) – Title of the plot. Default: None.

  • path (str, optional) – Path in which the plot is saved in .png format. If None, no file is saved. Default: None.

  • show_figure (bool, optional) – Whether the plot is shown. Default: True.

Returns:

Three-element tuple containing

  • Numpy.ndarray - \(K\times 3\) matrix, each row of which is a sampled crystal wavevector in the Brillouin zone in Cartesian coordinates. \(K\) is the total number of sampled wavevectors, set to (num_k - 1) * 7 + 1.

  • Numpy.ndarray - \(K\)-element vector of distance along the path in the Brillouin zone.

  • Numpy.ndarray - \(K\times N\) matrix, each row of which are the values of the \(N\) bands at the corresponding wavevector, where \(N\) is the number of basis states per unit cell.

visualize(wigner_seitz=True, path: str = None, show_figure: bool = True) None

Produce 3D plot showing the boundaries of the unit cell and the atoms within it.

Parameters:
  • wigner_seitz (bool) – Whether the Wigner-Seitz cell is shown. If False, the conventional (cubic) unit cell is shown instead. Default: True.

  • path (str, optional) – Path in which the plot is saved in .png format. If None, no file is saved. Default: None.

  • show_figure (bool, optional) – Whether the plot is shown. Default: True.