Visualizing tight-binding models#

from pythtb import TBModel, Lattice
import numpy as np
import matplotlib.pyplot as plt

Graphene model#

lat = [[1, 0], [1 / 2, np.sqrt(3) / 2]]
orb = [[1 / 3, 1 / 3], [2 / 3, 2 / 3]]
lattice = Lattice(lat, orb, periodic_dirs=[0, 1])

# make two dimensional tight-binding graphene model
my_model = TBModel(lattice)

# set model parameters
delta = 0
t = -1

# set on-site energies
my_model.set_onsite([-delta, delta])
# set hoppings (one for each connected pair of orbitals)
# (amplitude, i, j, [lattice vector to cell containing j])
my_model.set_hop(t, 0, 1, [0, 0])
my_model.set_hop(t, 1, 0, [1, 0])
my_model.set_hop(t, 1, 0, [0, 1])

TBModel.visualize()#

Periodic in both directions#

fig, ax = my_model.visualize()
ax.set_title("Graphene, bulk")
ax.set_xlabel("x coordinate")
ax.set_ylabel("y coordinate")
plt.show()
../_images/89a9f8a2f984d10259412bc9af67e962bba3e28969459cdf2871192b80ae4ada.png

Finite along direction 0#

cut_one = my_model.cut_piece(8, 0, glue_edges=False)

fig, ax = cut_one.visualize()
ax.set_title("Graphene, ribbon")
ax.set_xlabel("x coordinate")
ax.set_ylabel("y coordinate")
plt.show()
../_images/b6b2abdd6d263033b19c36a06ddfcd5c5a50be25ad06da6c8709fb53622b6957.png

Finite in both directions#

cut_two = cut_one.cut_piece(8, 1, glue_edges=False)

fig, ax = cut_two.visualize()
ax.set_title("Graphene, finite")
ax.set_xlabel("x coordinate")
ax.set_ylabel("y coordinate")
plt.show()
../_images/5a9c12f18334768f54556b28f4255146822ef478ef40589d0c7e561b11473805.png

Finite flake with periodic boundary conditions along direction 1#

cut_two = cut_one.cut_piece(8, 1, glue_edges=True)

fig, ax = cut_two.visualize()
ax.set_title("Graphene, finite")
ax.set_xlabel("x coordinate")
ax.set_ylabel("y coordinate")
plt.show()
../_images/aaf6a74043559c5ca54bf448079dfccd9447e7c245420a54d57a2ed29129ad13.png