title | tags | authors | affiliations | date | bibliography | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
tightbinder: A Python package for semi-empirical tight-binding models of crystalline and disordered solids |
|
|
|
22 July 2023 |
paper.bib |
tightbinder
is a Python package for Slater-Koster, semi-empirical tight-binding
calculations of the electronic structure of solids. Tight-binding models are ubiquitous
in condensed matter physics, since they provide an inexpensive description of electrons in materials.
Although the package can be used in principle for any kind of material (metals and insulators),
it originates in the context of topological phases of matter. Since the prediction of topological insulators [@topological_insulators],
there has been a huge effort understanding and characterizing topological materials, resulting
in a complete classification of any crystalline system [@vergniory]. However, not so much is known in the context
of disordered solids. This is the aim of the library: to enable numerical studies of
crystalline and disordered materials to identify possible topological systems where the usual
techniques are not useful. In any case, it also serves as a general purpose tight-binding framework,
due to the modular approach taken in its construction.
The determination of the band structure of a solid is the starting point for any calculation in condensed matter physics.
This amounts to determining the matrix elements $t^{\alpha\beta}{ij}$ of the electronic Hamiltonian:
$$H=\sum{ij,\alpha\beta}t^{\alpha\beta}{ij}c^{\dagger}{i\alpha}c_{j\beta}$$
where the indices
Currently, there are several tight-binding packages available, such as PyBinding [@pybinding], Pyqula, PythTB, Kwant [@kwant] and PySKTB [@pysktb]
as well as $\mathbb{Z}_2$Pack [@z2pack] for the computation of topological invariants. Of those libraries, only PySKTB was
designed to build Slater-Koster models, while the rest require specifying directly the hopping amplitudes. On top of
that, they are usually oriented towards crystalline structures, lacking tools for the description of disorder. tightbinder
provides all the standard functionality expected from a tight-binding code, focusing specifically on Slater-Koster models,
which can be used to describe realistic amorphous materials.
It also provides tools for the topological characterization of solids, similar to those of $\mathbb{Z}_2$Pack but
integrated within the API. These features give the library its own identity within the landscape of tight-binding frameworks, not
necessarily competing but providing alternative tools and a different perspective.
The band structure is the spectrum of the Hamiltonian of the system,
which is obtained by computing and diagonalizing its matrix representation.
Therefore, the library is mainly built using linear algebra operations from the common Python libraries for scientific computing, i.e.
NumPy
[@numpy], SciPy
[@scipy] and matplotlib
[@matplotlib] for visualization of the results.
tightbinder
focuses on providing the necessary routines and classes to build, modify
and compute properties of empirical tight-binding models. The main features of the
library are:
- Determination of Slater-Koster tight-binding models with matrix elements involving up to
$d$ orbitals, with intraatomic spin-orbit coupling. One can specify hoppings up to the nth-nearest neighbours, and use atoms from different chemical species with different numbers of electrons. - Configuration file based description of the model of the solid: Using a standarized format for configuration files, one can specify all the relevant parameters of the model, from the lattice vectors to the Slater-Koster hopping amplitudes.
- Two main classes defined, one to describe crystalline Slater-Koster models (
SlaterKoster
), and another one for amorphous solids (AmorphousSlaterKoster
). There are also predefined models, and the possibility of defining custom models which inherit from a baseSystem
class. - Methods and routines to modify systems: once they are built, there are methods to modify the size or the boundaries of the solid, as well as routines to introduce different forms of disorder and external fields.
- Topology identification: Computation of the
$\mathbb{Z}_2$ invariant of time-reversal topological insulators and of the entanglement spectrum from a specified cut of the system. - Computation of observables from the eigenstates of the system, e.g. bands, expected value of the spin, density of states (also available using the kernel polynomial method), localization. There are plotting routines available for the different quantities.
- Fitting of the Slater-Koster parameters (or any user-defined model parameter) to reproduce some given energy bands, usually from DFT calculations.
- Transport calculations in two-terminal devices based on the non-equilibrium Green's function formalism and the Landauer formula.
The basic workflow starts with the preparation of a configuration file, where we set all the parameters relative
to the material we want to describe. This is, the crystalographic information and then the details of the Slater-Koster model,
which imply specifying which orbitals participate for each chemical species, and the corresponding Slater-Koster amplitudes.
With the configuration prepared, the model is initialized simply passing the parsed configuration to the class constructor.
From here, one can perform transformations of the base model, or directly obtain its spectrum and then perform
some postprocessing. In fig. \ref{plot} we illustrate the results of this process, where we declared a configuration file for Bi(111) and then used it
to explore the topological nature of the material from different quantities.
tightbinder
has already been valuable for one previous work [@uria], and continues to be used in the
research of topological amorphous materials. We hope that more researchers will benefit from the package in their study of topological disordered solids.
The library provides a stable API, but is still under development to incorporate new functionality. Future plans include
additional routines to extract information from the models such as the pair distribution function
The authors acknowledge financial support from Spanish MICINN (Grant Nos. PID2019-109539GB-C43, TED2021-131323B-I00 & PID2022-141712NB-C21), María de Maeztu Program for Units of Excellence in R&D (GrantNo.CEX2018-000805-M), Comunidad Autónoma de Madrid through the Nanomag COST-CM Program (Grant No. S2018/NMT-4321), Generalitat Valenciana through Programa Prometeo (2021/017), Centro de Computación Científica of the Universidad Autónoma de Madrid, and the Red Española de Supercomputación.