Skip to content

santoshkumarradha/pysktb

Repository files navigation

Python Documentation Issues License DOI

Slater-Koster tight-binding Hamiltonians for 1D, 2D, and 3D systems
From topological insulators to strongly correlated f-electron materials

DocumentationInstallationExamplesCitation


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


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.

Performance


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