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/604872fda946baf06467e84a8da30a8cfaf235eda8b49ef35906a3adff578d0c.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/b22a265101754ddf5777a764b3141607cc62d05fd86aa411880a032b9ff4e680.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/22c16a7be9f6afb6bc1e329f1b16aa5de5f47a6ef1788760848f73f01209f73d.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/68325b922bf80a9bcbb0c686159c7d1006013fba8a9555258843bd3c5f0b4b03.png