Slater-Koster tight-binding Hamiltonians for 1D, 2D, and 3D systems
From topological insulators to strongly correlated f-electron materials
Documentation • Installation • Examples • Citation
pip install pysktbFor the latest development version (includes f-orbital support):
git clone https://github.com/santoshkumarradha/pysktb.git
cd pysktb
pip install -e .from pysktb import Lattice, Atom, Structure, Hamiltonian
# Define lattice and atoms
lattice = Lattice([[1, 0, 0], [0, 1, 0], [0, 0, 1]], a=3.5)
atom = Atom("X", [0, 0, 0], orbitals=["s", "px", "py", "pz"])
structure = Structure(lattice, [atom], bond_cut={"XX": {"NN": 3.6}})
# Set up Hamiltonian and solve
params = {"X": {"e_s": 0, "e_p": 1.5}, "XX": {"V_sss": -0.5, "V_sps": 0.5, "V_pps": 0.8, "V_ppp": -0.2}}
ham = Hamiltonian(structure, params)
kpts, kpts_dist, spl_pnts = ham.get_kpts([[0,0,0], [0.5,0.5,0.5]], nk=50)
eigenvalues = ham.solve_kpath(kpts)| Category | Feature | Status |
|---|---|---|
| Orbital Basis | s, p orbitals | ● |
| d orbitals | ● | |
| f orbitals (lanthanides) | ● | |
| Slater-Koster parametrization | ● | |
| Spin Physics | Spin-orbit coupling (p, d, f) | ● |
| Spin-polarized calculations | ● | |
| Magnetic systems | ● | |
| Green's Functions | DOS with Lorentzian broadening | ● |
| Local DOS (atom/orbital resolved) | ● | |
| Spectral function A(k,E) | ● | |
| Topological edge states | ● | |
| Forces & Dynamics | Distance-dependent hopping | ● |
| Harrison, PowerLaw, Exponential, GSP scaling | ● | |
| Repulsive potentials (BornMayer, Morse) | ● | |
| Atomic forces (Hellmann-Feynman) | ● | |
| Structure | 1D, 2D, 3D systems | ● |
| Beyond nearest-neighbor | ● | |
| pymatgen integration | ● | |
| Orbital Visualization | Real-space orbital plots (2D/3D) | ● |
| Slater, Gaussian, Hydrogen radial functions | ● | |
| Edge state wavefunction visualization | ● | |
| Ribbon superlattice with bonds | ● | |
| Performance | Numba JIT compilation | ● |
| k-point parallelization | ● | |
| Total energy calculations | ● |
● complete · ◐ in progress · ○ planned
Full examples in examples.ipynb
![]() Topological Edge States Spectral function A(k,E) |
![]() Graphene Band structure & BZ colorplot |
![]() Halide Perovskites Rashba SOC effect |
# Band structure in 4 lines
ham = Hamiltonian(structure, params)
kpts, dist, pts = ham.get_kpts(path, nk=50)
bands = ham.solve_kpath(kpts)
# Green's function DOS in 3 lines
gf = GreensFunction(ham)
dos = gf.dos(energies, nk=[30, 30, 1], eta=0.1)
# Edge states in 3 lines
sgf = SurfaceGreensFunction(ham, surface_atoms=edge_atoms)
edge_spectral = sgf.edge_spectral_kpath(k_values, energies)More examples
1D sp-chain (SSH model) — Topological crystalline insulator
![]() Band structure |
![]() Orbital projection |
![]() Density of states |
Buckled Antimony — Topological states
![]() Dirac cone merging arXiv:1912.03755 |
![]() Higher-order topology arXiv:2003.12656 |
![]() Surface states with SOC |
f-orbital Systems — See f_orbital_example.py for Cerium-like lanthanide implementation with 4f electrons and spin-orbit coupling.
Green's Function DOS — Graphene DOS and LDOS via Green's functions
See greens_dos_example.py for computing DOS with physical Lorentzian broadening and sublattice-resolved LDOS.
Edge States — Topological edge states in graphene zigzag ribbon
See edge_states_example.py for computing edge spectral functions and visualizing flat-band edge states at E=0.
Real-Space Orbital Visualization — Atomic orbitals and edge state wavefunctions
![]() Atomic Orbitals s, px, py, pz orbital shapes |
![]() Edge State Localization Edge vs bulk state distribution |
![]() Honeycomb Superlattice Edge state with C-C bonds visible |
![]() 3D Orbital pz orbital dumbbell shape |
See orbital_visualization.ipynb for real-space orbital plotting with Slater, Gaussian, and Hydrogen-like radial functions, plus edge state visualization with honeycomb lattice bonds.
Distance-Dependent Hopping & Forces — Scaling laws and force calculations
from pysktb import Harrison, BornMayer, Forces
# Distance-dependent hopping: V(d) = V₀(d₀/d)²
params = {
"C": {"e_s": 0.0},
"CC": {
"V_sss": Harrison(V0=-5.0, d0=1.42, cutoff=4.0),
"repulsive": BornMayer(A=500, B=3.0, cutoff=4.0),
}
}
ham = Hamiltonian(structure, params)
forces = Forces(ham)
# Compute total energy and forces
E_total, E_band, E_rep = forces.get_total_energy(n_electrons=2, nk=[10, 10, 1])
F = forces.get_forces(n_electrons=2, nk=[10, 10, 1])See forces_and_scaling.ipynb for visualizing scaling laws, energy curves, and band structure evolution with distance.
![]() JIT compilation speedup |
![]() k-point parallelization |
| Status | Feature |
|---|---|
| ● | Distance-dependent hopping & forces |
| ◐ | Phonon calculations (dynamical matrix) |
| ◐ | Electron-phonon coupling |
| ◐ | Complete pymatgen integration |
| ◐ | Berry phase calculation |
| ○ | Bogoliubov-de-Gennes (BdG) for superconductivity |
| ○ | ASE structure interface |
| ● | Green's function DOS |
| ● | Topological edge states |
| ● | Real-space orbital visualization |
| ○ | Sympy analytical matrix elements |
| ○ | Low-energy k.p Hamiltonian extraction |
● complete · ◐ in progress · ○ planned
If you use this code in your research, please cite:
@misc{pysktb,
doi = {10.5281/ZENODO.4311595},
url = {https://zenodo.org/record/4311595},
author = {Radha, Santosh Kumar},
title = {pysktb: Tight-binding electronic structure codes},
publisher = {Zenodo},
year = {2020}
}













