Slater-Koster tight-binding Hamiltonians for 1D, 2D, and 3D systems
From topological insulators to strongly correlated f-electron materials
Documentation •
Installation •
Examples •
Citation
Installation
pip install pysktb
For the latest development version (includes f-orbital support):
git clone https://github.com/santoshkumarradha/pysktb.git
cd pysktb
pip install -e .
Quick Start
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)
Features
| 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
Examples
Full examples in examples.ipynb

Topological Edge States Spectral function A(k,E)
|

Graphene Band structure & BZ colorplot
|

Halide Perovskites Rashba SOC effect
|
Clean Syntax
# 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
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
|
Roadmap
| 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
Citation
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}
}
License
MIT
评论