An effective 2D model (tight-binding)
In this example, we set up a tight-binding model for a quasi - 2D system. We consider 2 - sublattice square lattice with nearest-neighbour (inter-sublattice) and next - nearest - neighbour (intra-sublattice) hopping terms. For creating this model, the tbmodels
package is used.
Using different parameters t1
and t2
and modifying the settings
(currently they’re the default values) can give you a feeling of the different parameters. Try setting num_lines
very low (e.g. 3) and see how the convergence criteria will affect the result.
#!/usr/bin/env python
import itertools
import logging
import matplotlib.pyplot as plt
import tbmodels
import z2pack
logging.getLogger("z2pack").setLevel(logging.WARNING)
t1, t2 = (0.2, 0.3)
settings = {
"num_lines": 11,
"pos_tol": 1e-2,
"gap_tol": 2e-2,
"move_tol": 0.3,
"iterator": range(8, 27, 2),
"min_neighbour_dist": 1e-2,
}
model = tbmodels.Model(
on_site=(1, 1, -1, -1),
pos=[[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0], [0.5, 0.5, 0.0]],
occ=2,
)
for p, R in zip([1, 1j, -1j, -1], itertools.product([0, -1], [0, -1], [0])):
model.add_hop(overlap=p * t1, orbital_1=0, orbital_2=2, R=R)
model.add_hop(overlap=p.conjugate() * t1, orbital_1=1, orbital_2=3, R=R)
for R in ((r[0], r[1], 0) for r in itertools.permutations([0, 1])):
model.add_hop(t2, 0, 0, R)
model.add_hop(t2, 1, 1, R)
model.add_hop(-t2, 2, 2, R)
model.add_hop(-t2, 3, 3, R)
tb_system = z2pack.tb.System(model)
result = z2pack.surface.run(system=tb_system, surface=lambda s, t: [s / 2.0, t, 0], **settings)
fig, ax = plt.subplots()
z2pack.plot.wcc(result, axis=ax)
plt.savefig("plots/wcc.pdf", bbox_inches="tight")
print(f"t1: {t1}, t2: {t2}, Z2 invariant: {z2pack.invariant.z2(result)}")