Band Structure of A Simple Tight Binding Model

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Band structure of a

simple tight-binding
model
Rishi Paresh Joshi, National Institute of Science Education and Research, Bhubaneswar

ight-binding models play a pivotal role eration in this report are 1-dimensional (1D)

T in our understanding of condensed mat-


ter physics, providing a powerful frame-
work for describing the electronic structure of
simple wire and 2-dimensional (2D) Honey-
comb lattice. This report displays how easily
the Python library Kwant can code for the
materials at the quantum level. These models band structure, effective mass, and density of
are particularly significant due to their ability states for both these lattices (DOS). Kwant
to capture the intricate interplay of electrons is a software package designed for simulat-
in solids, elucidating fundamental phenomena ing quantum transport in various mesoscopic
that underlie the properties of a wide range systems, including quantum wires, dots, topo-
of materials. For example, tight-binding sys- logical insulators, graphene, quantum Hall
tems are used as a model where topological systems, and superconducting structures. It
order arises, like in the famous Haldane model provides a flexible and efficient platform for
that describes the Anomalous Quantum Hall investigating these systems’ electronic and
Effect(AQHE)[1] in the honeycomb lattice of transport properties, aiding researchers in
graphene or the SSH model describing the gaining insights into the quantum behavior
electrical conductance of polyacetylene[2]. At of materials at the nanoscale[3]. This report
the heart of tight-binding models is electron can be subdivided into the band structure of
hopping between adjacent atomic orbitals, re- a simple wire, as done in [4]. Further, calcu-
flecting the quantum mechanical nature of lations for effective mass and DOS for simple
electrons and their interactions within a crys- wire are presented here. Similarly, the entire
talline lattice. This enables the modeling of Honeycomb lattice coding was done and pre-
electronic properties with remarkable accu- sented here. We used the linear combination
racy, making tight-binding models an indis- of atomic orbitals (LCAO) principle to explain
pensable tool for researchers in materials sci- tight-binding in a simple 1D wire[5]. We also
ence and condensed matter physics. The re- gain a theoretical understanding of the tight-
port contains analytical and numerical deriva- binding Hamiltonian for the 2D Honeycomb
tions for band structure and related calcula- lattice[6][7].
tions of tight-binding lattices primarily used in
condensed matter. The lattices under consid-
Rishi Paresh Joshi 2111093 2023

Aim: Band structure of a simple To find the possible values of ϕ1 and ϕ2 and the
tight-binding wire associated eigenenergies of the molecular orbitals, we
apply the full Hamiltonian to |ψ⟩ :
In this section, we present the theoretical derivation
for the band structure of a simple tight-binding wire. H|ψ⟩ = E|ψ⟩ = ϕ1 H|1⟩ + ϕ2 H|2⟩
To explain tight-binding, we can first consider the Taking the left inner product with ⟨1|, we obtain
principle of LCAO. In the subsequent paragraph, we
explain LCAO, taking the example of a diatomic
⟨1|E|ψ⟩ = ϕ1 ⟨1|Ĥ|1⟩ + ϕ2 ⟨1|Ĥ|2⟩ = Eϕ1
molecule and then generalizing the principle to a
lattice of atoms. Similarly, taking the inner product with ⟨2| yields:

0.1 LCAO for a diatomic molecule Eϕ2 = ϕ1 ⟨2|Ĥ|1⟩ + ϕ2 ⟨2|Ĥ|2⟩.


We combine these two equations into an eigenvalue
Consider two atoms next to each other, forming a problem:
diatomic molecule. The Hamiltonian describing the
energy of an electron on the molecule is     
ϕ1 ⟨1|Ĥ|1⟩ ⟨1|Ĥ|2⟩ ϕ1
E = (2)
ϕ2 ⟨2|Ĥ|1⟩ ⟨2|Ĥ|2⟩ ϕ2
Ĥ = V̂1 + V̂2 + K̂
The eigenvalue problem depends on only two pa-
with V̂1 the potential energy due to the first nu- rameters: the onsite energy ⟨1|Ĥ|1⟩ = ⟨2|Ĥ|2⟩ ≡ E
0
cleus, V̂2 due to the second nucleus, and K̂ the kinetic that gives the energy of an electron occupying either
energy of the electron. of the atomic orbitals and the hopping integral (or
Since the different orbitals of an atom are sepa- just hopping) ⟨1|Ĥ|2⟩ ≡ −t that characterizes the
rated in energy, we consider only one orbital per energy associated with the electron moving between
atom (even though this is often a bad starting point the two orbitals.
and it should only work for s-orbitals). First, let us examine what constitutes the onsite
Additionally, we assume that the atoms are suffi- energy and the hopping:
ciently far apart, such that the shape of the orbitals
barely changes due to the presence of the other atom. D E D E
If the atoms are far apart from each other such that E 0 = ⟨1|Ĥ|1⟩ = 1 V̂ 1 + V̂ 2 + K̂ 1 = ε 0 + 1 V̂ 2 1
they do not interact, the eigenstates of the electrons  
where we used that V̂1 + K̂ |1⟩ = ε0 |1⟩. In other
are the atomic orbitals. If we call the atomic orbital
of the electron on the first atom |1⟩ and that of the words, the onsite energy is the combination of the
electron on the second atom |2⟩, we have: energy
D ofE the original orbital plus the energy shift
  1 V̂2 1 of the electron due to the potential of the
V̂1 + K̂ |1⟩ = ε0 |1⟩ neighboring atom. Second, the hopping is given by:
 
V̂2 + K̂ |2⟩ = ε0 |2⟩ D E D E
t = −⟨1|Ĥ|2⟩ = − 1 V̂1 + V̂2 + K̂ 2 = − 1 V̂1 2
Key idea: to find the wavefunction of the electron
The orbitals |n⟩ are purely real because we consider
on the molecule - the molecular orbital -, we search
bound state solutions of the Schrödinger equation.
for a solution that is a linear combination of the
Hence t is real as well.
atomic orbitals (LCAO):
The eigenvalue problem we obtained describes a
particle with a discrete 2 × 2 Hamiltonian:
|ψ⟩ = ϕ1 |1⟩ + ϕ2 |2⟩. (1)
 
E0 −t
where ϕ1 and ϕ2 are probability amplitudes. The H=
−t E0
orbital |ψ⟩ is called a molecular orbital because it de-
scribes the eigenstate of an electron on the diatomic Diagonalizing this LCAO Hamiltonian yields the
molecule. following two eigenvalues:
For simplicity, we assume that the atomic or-
bitals are orthogonal 1 , i.e. ⟨1 | 2⟩ = 0. This or- E± = E0 ∓ t
thogonality ensures that |ψ⟩ is normalized whenever In the case of a lattice, we can use the Bloch
|ϕ1 |2 + |ϕ2 |2 = 1. theorem to represent the lattice wave function.

2 Page 2 of 10
Rishi Paresh Joshi 2111093 2023

0.2 Bloch theorem


For electrons in a perfect crystal, there is a basis of
wave functions with the following two properties[8]:

• each of these wave functions is an energy eigen-


state,

• each of these wave functions is a Bloch state,


meaning that this wave function ψ can be writ-
ten in the form
Figure 1: Band structure of a simple tight-binding wire
ψ(r) = eik·r u(r) (3) using Kwant 0.7.

where u(r) has the same periodicity as the atomic On substituting the Bloch wavefunctions into the
structure of the crystal, such that:- equations of motion:
uk (x) = uk (x + n · a) (4)
LHS = Euk eiEt/ℏ−ikna
The defining property of a crystal is translational = E0 uk eiEt/ℏ−ikna −tuk eiEt/ℏ−ik(n+1)a −tuk eiEt/ℏ−ik(n−1)a ,
symmetry, which means that if the crystal is shifted Again, we are not interested in a trivial solution
an appropriate amount, it winds up with all its atoms hence we assume u ̸= 0 and thus,
k
in the same places. (A finite-size crystal cannot
have perfect translational symmetry, but it is a valid
approximation.) E = E0 − te−ika − teika = E0 − 2t cos(ka)
A three-dimensional crystal has three primitive
lattice vectors a1 , a2 , a3 . If the crystal is shifted by 0.3.1 Plotting the dispersion relation using
any of these three vectors or a combination of them kwant
of the form
1. Define the System: Use Kwant to define the
n1 a1 + n2 a2 + n3 a3 , (5) tight-binding system, specifying the lattice, hop-
ping parameters, and other relevant details.
Where ni are three integers, the atoms end up in 2. Set Up the Momentum Path: Create a path
the exact locations as they started. These are three in momentum space along which you want to
vectors b1 , b2 , b3 (with units of inverse length), with calculate the band structure. This often involves
the property that ai · bi = 2π, but ai · bj = 0 when defining a sequence of high-symmetry points in
i ̸= j. the Brillouin zone.

0.3 Calculation of the band structure of a 3. Calculate the Band Structure: Utilize Kwant’s
1D wire kwant.physics.Bands module to calculate the
band structure along the specified momentum
Similarly to the diatomic system case (1), we formu- path.
late the molecular orbital via the LCAO model:
4. Extract Momenta and Energies: Retrieve the
calculated momenta and corresponding energies
X
|Ψ⟩ = ϕn |n⟩
n from the band structure calculation.
We assume only nearest-neighbor hopping −t and 5. Plot the Band Structure: Using a plotting li-
an on-site energy E0 . The coupled Schrödinger equa- brary (e.g., matplotlib), visualize the band struc-
tion of the |n⟩ orbital is (the steps are just like in ture. A simple line plot is employed, where the
the diatomic case (2): x-axis represents momenta and the y-axis repre-
sents energies (code 0.7).
Eϕn = E0 ϕn − tϕn+1 − tϕn−1 . (6)
Thus, from sections 0.3 and 0.3.1, we have learned
Again, the periodic boundary conditions imply how to find the dispersion relation; now, we can use
ϕN = ϕ0 . The ϕN are the Bloch wavefunctions (3) it for many other applications, as done below.

3 Page 3 of 10
Rishi Paresh Joshi 2111093 2023

What more can be done in addition


to plotting the band structure of a
simple tight-binding model?
0.4 Calculation of effective mass of 1D
tight-binding wire
Consider an electric field E in the x direction; we
want to know what happens is the trajectory of the
electrons in this wire. The full Hamiltonian of the
Figure 2: The plot of the effective mass of 1D tight-
system is
binding wire vs. k for the lowest energy
band 0.7
p2
H= + Uatomic (x) + eEx
2m
where Uatomic is the potential created by the nuclei, 0.5 Calculation of 1D tight-binding wire
and E the electric field. DOS
A typical electric field is much smaller than the The DOS is the number of states per unit of energy.
interatomic potential, and therefore, we can start by In 1D, we have
obtaining the dispersion relation E(k) without an
electric field (by applying the LCAO method 1) and
L X L X −1
then solve g(E) = |dk/dE| = |v| (9)
2π 2πℏ
H = E(k) + eEx. The sum goes over all possible values of k and spin
with the same energy E. If working in two or more
To derive how particles with an arbitrary disper- dimensions, we must integrate the values of k with
sion relation move, we recall Hamilton’s equations the same energy. Also, note that for energies below
for particle velocity v and force F : E0 − 2t or above E0 + 2t, there are no values of k
with that energy, so there is nothing to sum over.
dr ∂H(p, r) Once again, starting from
v≡ =
dt ∂p
(7)
dp ∂H(p, r) E = E0 − 2t cos(ka)
F ≡ =−
dt ∂r
we get
Substituting p = ℏk into the first equation (7), we
arrive at the expression for the electron group velocity ka = ± arccos [(E − E0 ) /2t]
v ≡ ℏ−1 ∂E/∂k. From the second equation (7), we
obtain that the force acting on an electron in a band and
stays −eE, which in turn results in the acceleration.
dk ℏ 1
dv ∂v dp |v|−1 = ℏ = q
= = F/m dE a
dt ∂p dt 4t2 − (E − E0 )2

Comparing this expression with dv/dt = F/m, we One can get to this result immediately if you re-
arrive at the effective mass: member the derivative of arccosine. Otherwise, it
would help if we went a longer way: compute dE/dk
 −1  2 −1  2 −1 as a function of k, express k through E as we did
∂v ∂ E 2 ∂ E
m ≡∗
= =ℏ (8) above, and take the inverse.
∂p ∂p2 ∂k 2 We now add together the contributions of the
positive and the negative momenta as well as both
The group velocity describes how quickly electrons
spin orientations, and arrive at the density of states
with a certain k-vector move, while the effective mass
describes how hard they are to accelerate by applying L 4 1
an external force; thus, it is inversely proportional g(E) = q
2π a
4t2 − (E − E0 )2
to electron mobility and current.

4 Page 4 of 10
Rishi Paresh Joshi 2111093 2023

Figure 3: 1D DOS plot, when the energy is close to the


bottom of the band, E = E0 − 2t + δE, we get
g(E) ∝ δE −1/2 , as we expect in 1D 0.7.

Figure 5: The 3D plot of the band structure of a honey-


comb lattice with horizontal axis ky and verti-
cal axis kx 0.8.

Figure 4: The circular 2D Honeycomb lattice under con-


sideration 0.9 Figure 6: Energy vs. kx 0.9

We have now seen how the band structure 1, ef-


fective mass 2 and DOS 3 look like in 1D. Now, we tight-binding spinless Hamiltonian can be written as
H = −t <i,j> c+
P
explore the 2D case with the special Honeycomb i cj + h.c. ),
lattice. +
where ci and cj are the creation and annihilation
operators of an electron in the nearest-neighbors,
0.6 Calculation of the 2D band structure, sites, i and j, belonging to different sublattices, re-
effective mass and DOS of the spectively.
Honeycomb lattice With
P −ik·ri
P Fourier transforms ci = ke ck and
−ik·rj c , the above Hamiltonian is trans-
The honeycomb lattice, the first model of 2D Dirac j c = k e k

materials, has been widely employed in studying fun- formed in the following form in momentum space:
 
damental physical scenarios in 2D Dirac materials 0 f (k)
H(k) = .
and beyond. For example, it is a pioneer model f ∗ (k) 0

for quantum anomalous Hall effects (AQHE) and In√the foregoing, f (k) = e−ikx a + ei(kx 3/2−ky /2)a +
quantum spin Hall effects (SQHE) in Haldane[1]. i(kx 3/2+ky /2)a
e , where a represents the distance be-
The conventional honeycomb lattice comprises reg-
tween two adjacent sites. From this tight-binding
ular hexagons, forming a profile similar to a ”hon-
Hamiltonian of the honeycomb lattice, two energy-
eycomb,”. Each site is threefold and coordinated at
momentum relationships can be obtained:
an angle of 120◦ . The honeycomb lattice contains q √ √
E± (k) = ± 3 + 2 cos 3kx a + 4 cos 12 3kx a cos 32 ky a .
  
two sublattices, each constituting a 2D hexagonal
Bravais lattice. Neglecting the on-site energy differ- Now, we can get effective mass and the DOS like we
ence between the two sublattices (set to zero) and did for the 1D case using Eq. (8) and Section. (0.5).
considering only nearest-neighbor hopping (t), the

5 Page 5 of 10
Rishi Paresh Joshi 2111093 2023

Results
• We showed the derivation for the band structure
of a 1D tight-binding wire Section. 0.3. We
showed that the graph obtained Fig. 1 as given
in the Kwant tutorial[4] is in accordance with
the theory.

• We derived the equation for effective mass


Eq. (8). It was then coded using a central dif-
ference scheme Section. 0.7 and plotted, Fig. 2.
Figure 7: Energy vs. ky 0.9
• We derived the equation for DOS Eq. (9). It was
then coded using a built-in function, Section. 0.7
and plotted, Fig. 3.

• We generalized the method to calculate band


structure to 2D lattices in a honeycomb lattice
Section. 0.3.1, and we derived the dispersion
relation Eq. (0.6) and plotted the band structure
Fig. 5, 6, 7, plotted the effective mass Fig. 8, 9
and plotted the DOS, Fig. 10. The analytical
result is that the band gap is 0; numerically, it
was 2.9634633505575086 × 10−16 , Section. 0.9
which is close to 0.
Figure 8: Effective mass vs. kx 0.9
References
[1] F.D.M. Haldane, Model for a Quantum Hall Ef-
fect without Landau Levels: Condensed-Matter
Realization of the ”Parity Anomaly” (Phys. Rev.
Lett. 61,1988).

[2] Su, W. P.; Schrieffer, J. R.; Heeger, A. J., ”Soli-


tons in Polyacetylene” (Phys. Rev. Lett. 42 (25):
1698–1701, 1979).

[3] C. W. Groth, M. Wimmer, A. R. Akhmerov, X.


Waintal, Kwant: a software package for quan-
Figure 9: Effective mass vs. ky 0.9
tum transport, New J. Phys. 16, 063065 (2014)

[4] Tutorial on Kwant, https: // kwant-project.


org/ doc/ 1/ ,https: // github. com/
kwant-project , Last visited: Nov.,2023

[5] Open Solid State notes, https:


// opensolidstate , Last visited: Nov.,2023

[6] Supriyo Dutta, ”Electronic transport in meso-


scopic systems”. Tight binding model:(or the
method of finite differences), Cambridge Univer-
sity Press, 1995. ISBN: 0521416041

[7] Runyu Fan, Lei Sun, Xiaofei Shao, Yangyang Li,


Figure 10: DOS of honeycomb lattice 0.9. Mingwen Zhao, ”Two-dimensional Dirac mate-
rials: Tight-binding lattice models and material

6 Page 6 of 10
Rishi Paresh Joshi 2111093 2023

candidates”, ChemPhysMater, Volume 2, Issue Appendix A (Codes)


1,2023, Pages 30-42, ISSN 2772-5715, https:
//doi.org/10.1016/j.chphma.2022.04.009. 0.7 Code for bandstructure and
bandstructure related calculations of
[8] Bloch’s theorem - Wikipedia., https: // en.
wikipedia. org/ wiki/ Bloch’s_ theorem ,
Simple 1D tight-binding wire
Last visited: Nov.,2023
1 # - Computing the band structure of a
,→ finalized lead.
2
3 import kwant
4 import numpy as np
5 # For plotting.
6 from matplotlib import pyplot
7
8 def make_lead(a=1, t=1.0, W=10):
9 # Start with an empty lead with a
,→ single square lattice
10 lat = kwant.lattice.square(a)
11
12 sym_lead =
,→ kwant.TranslationalSymmetry((-a,
,→ 0))
13 lead = kwant.Builder(sym_lead)
14
15 # build up one unit cell of the lead,
,→ and add the hoppings
16 # to the next unit cell
17 for j in range(W):
18 lead[lat(0, j)] = 4 * t
19
20 if j > 0:
21 lead[lat(0, j), lat(0, j - 1)]
,→ = -t
22

23 lead[lat(1, j), lat(0, j)] = -t


24
25 return lead
26 def Diff2Energy(bands,x,h):#plotting
,→ effective mass for one of the bands
27 cd = 4*(bands(x+h/2)[0]+
28 bands(x-h/2)[0]-2*bands(x)[0]) /h**2
29 return cd
30
31
32 def plot_effectivemass(flead, momenta):
33 h=0.01
34 bands = kwant.physics.Bands(flead)
35 mef=[1/(Diff2Energy(bands,k,h)) for k
,→ in momenta]
36 pyplot.plot(momenta, mef)
37 pyplot.xlabel("momentum[(lattice
,→ constant)^-1]")
38 pyplot.ylabel("Effective mass")
39 pyplot.show()
40
41 def simple_dos_example(flead):
42 spectrum =
,→ kwant.kpm.SpectralDensity(flead)

7 Page 7 of 10
Rishi Paresh Joshi 2111093 2023

43 energies, densities = spectrum() 20 def dispersion_2D(syst, params=None,


44 plot_dos([('densities', (energies, ,→ lim=1.5*np.pi, num_points=200):
,→ densities)),]) 21 """A simple plot of 2D band
45 ,→ structure."""
46 def plot_dos(labels_to_data): 22 if params is None:
47 for label, (x, y) in labels_to_data: 23 params = []
48 pyplot.plot(x, y, label=label, 24 momenta = np.linspace(-lim, lim,
,→ linewidth=2, color="orange") ,→ num_points)
49 pyplot.legend(loc=2, framealpha=0.5) 25 energies = []
50 pyplot.xlabel("energy [t]") 26 for kx in momenta:
51 pyplot.ylabel("DoS [a.u.]") 27 for ky in momenta:
52 pyplot.show() 28 lattice_k =
53 pyplot.clf() ,→ momentum_to_lattice([kx,
54 ,→ ky])
55 def main(): 29 h = syst.hamiltonian_submatrix
56 lead = make_lead().finalized() 30 (args=(list(params)
57 kwant.plotter.bands(lead, show=False) ,→ +list(lattice_k)))
58 pyplot.xlabel("momentum [(lattice 31 energies.append(np.linalg.
,→ constant)^-1]") 32 eigvalsh(h))energies =
59 pyplot.ylabel("energy [t]") ,→ np.array(energies).reshape
60 pyplot.show() 33 (num_points, num_points, -1)
61 momenta = [-np.pi + 0.02 * np.pi * i 34 emin, emax = np.min(energies),
,→ for i in range(101)] ,→ np.max(energies)
62 plot_effectivemass(lead, momenta) 35 kx, ky = np.meshgrid(momenta, momenta)
63 simple_dos_example(lead) 36 fig = pyplot.figure()
64 # Call the main function if the script 37 axes = fig.add_subplot(1, 1, 1,
,→ gets executed (as opposed to ,→ projection='3d')
,→ imported). 38 for band in range(energies.shape[-1]):
65 if __name__ == '__main__': 39 axes.plot_surface(ky, kx,
66 main() ,→ energies[:, :,band],
,→ cstride=2, rstride=2,
,→ cmap=matplotlib.cm.RdBu_r,
,→ vmin=emin,
0.8 Code for 3D plot of Dirac ,→ vmax=emax,linewidth=0.1)
band-structure of 2D Honeycomb 40
lattice 41
42

1 import matplotlib 43 graphene = kwant.lattice.honeycomb(a=1,


2 from matplotlib import pyplot ,→ name='')
3 import numpy as np 44 bulk_graphene =
4 import kwant ,→ kwant.Builder(kwant.TranslationalSymmetry
5 45 (*graphene.prim_vecs))bulk_graphene[graphene.
6 46 shape((lambda pos: True), (0, 0))] = 0
7 def momentum_to_lattice(k): 47 bulk_graphene[graphene.neighbors(1)] = 1
8 """Transform momentum to the basis of 48 dispersion_2D(kwant.wraparound.wraparound
,→ reciprocal lattice vectors. 49 (bulk_graphene).finalized())
9

10 See https://en.wikipedia.org/wiki/
11 Reciprocal_lattice#Generalization
0.9 Code for 2D plot of kx , ky in a 2D
12 _of_a dual_lattice
13 """ Honeycomb lattice, its DOS and its
14 graphene = effective mass, and its band gap
,→ kwant.lattice.honeycomb(a=1,
,→ name='') 1 from __future__ import division # so that
15 B = np.array(graphene.prim_vecs).T ,→ 1/2 == 0.5, and not 0
16 A = B.dot(np.linalg.inv(B.T.dot(B))) 2 from math import pi, sqrt, tanh
17 return np.linalg.solve(A, k) 3 import numpy as np
18 4 import kwant
19 5

8 Page 8 of 10
Rishi Paresh Joshi 2111093 2023

6 # For computing eigenvalues 51 def lead0_shape(pos):


7 #import scipy.sparse.linalg as sla 52 x, y = pos
8 53 return (-0.4 * r < y < 0.4 * r)
9 # For plotting 54
10 from matplotlib import pyplot 55 lead0 = kwant.Builder(sym0)
11 56 lead0[graphene.shape(lead0_shape, (0,
12 ,→ 0))] = -pot
13 # Define the graphene lattice 57
14 sin_30, cos_30 = (1 / 2, sqrt(3) / 2) ,→ lead0[[kwant.builder.HoppingKind(*hopping)
15 graphene = kwant.lattice.general([(1, 0), ,→ for hopping in hoppings]] = -1
,→ (sin_30, cos_30)], 58
16 [(0, 0), 59 # The second lead, going to the top
,→ (0, 1 ,→ right
,→ / 60 sym1 =
,→ sqrt(3))]) ,→ kwant.TranslationalSymmetry(graphene.vec((0,
17 a, b = graphene.sublattices ,→ 1)))
18 61
19 62 def lead1_shape(pos):
20 def make_system(r=10, w=2.0, pot=0.0): 63 v = pos[1] * sin_30 - pos[0] *
21 ,→ cos_30
22 #### Define the scattering region. 64 return (-0.4 * r < v < 0.4 * r)
,→ #### 65
23 # circular scattering region 66 lead1 = kwant.Builder(sym1)
24 def circle(pos): 67 lead1[graphene.shape(lead1_shape, (0,
25 x, y = pos ,→ 0))] = pot
26 return x ** 2 + y ** 2 < r ** 2 68
27 ,→ lead1[[kwant.builder.HoppingKind(*hopping)
28 sys = kwant.Builder() ,→ for hopping in hoppings]] = -1
29 69
30 # w: width and pot: potential maximum 70 return sys, [lead0, lead1]
,→ of the p-n junction 71
31 def potential(site): 72
32 (x, y) = site.pos 73 #def compute_evs(sys):
33 d = y * cos_30 + x * sin_30 74 # Compute some eigenvalues of the
34 return pot * tanh(d / w) ,→ closed system
35 75 #sparse_mat =
36 sys[graphene.shape(circle, (0, 0))] = ,→ sys.hamiltonian_submatrix(sparse=True)
,→ potential 76
37 77 #evs = sla.eigs(sparse_mat, 2)[0]
38 # specify the hoppings of the graphene 78 #print (evs.real)
,→ lattice in the 79 def Diff2Energy(bands,x,h):
39 # format expected by 80 cd =
,→ builder.HoppingKind ,→ 4*(bands(x+h/2)+bands(x-h/2)-2*bands(x))/h**2
40 hoppings = (((0, 0), a, b), ((0, 1), 81 return cd
,→ a, b), ((-1, 1), a, b)) 82
41 83 def plot_bandstructure(flead, momenta):
,→ sys[[kwant.builder.HoppingKind(*hopping)
84 bands = kwant.physics.Bands(flead)
,→ for hopping in hoppings]] = -1 85 energiesx = [bands(k) for k in
42 ,→ momenta]
43 # Modify the scattering region 86 momentax=[x+pi for x in momenta]
44 #del sys[a(0, 0)] 87
45 #sys[a(-2, 1), b(2, 2)] = -1 88 print("Bands gap is\n", emax1-emin2)
46 89 pyplot.figure()
47 #### Define the leads. #### 90 pyplot.plot(momentax, energiesx)
48 # left lead 91 pyplot.xlabel("momentum_x [(lattice
49 sym0 = ,→ constant)^-1]")
,→ kwant.TranslationalSymmetry(graphene.vec((-1,
92 pyplot.ylabel("energy [t]")
,→ 0))) 93 pyplot.show()
50 94 pyplot.figure()

9 Page 9 of 10
Rishi Paresh Joshi 2111093 2023

95 energiesy = [bands(k) for k in 143


,→ momentax] 144 plot_dos([
96 pyplot.plot(momentax, energiesy) 145 ('densities', (energies,
97 pyplot.xlabel("momentum_y [(lattice ,→ densities)),
,→ constant)^-1]") 146 ])
98 pyplot.ylabel("energy [t]") 147 # Plot the closed system without
99 pyplot.show() ,→ leads.
100 148 kwant.plot(sys,
101 ,→ site_color=family_colors,
102 def plot_effectivemass(flead, momenta): ,→ site_lw=0.1, colorbar=False)
103 h=0.01 149
104 bands = kwant.physics.Bands(flead) 150 # Compute some eigenvalues.
105 mefx=[1/(Diff2Energy(bands,k,h)) for k 151 #compute_evs(sys.finalized())
,→ in momenta] 152

106 pyplot.figure() 153 # Attach the leads to the system.


107 momentax=[x+pi for x in momenta] 154 for lead in leads:
108 pyplot.plot(momentax, mefx) 155 sys.attach_lead(lead)
109 pyplot.xlabel("momentum_x [(lattice 156
,→ constant)^-1]") 157 # Then, plot the system with leads.
110 pyplot.ylabel("Effective mass") 158 kwant.plot(sys,
111 pyplot.show() ,→ site_color=family_colors,
112 mefy=[1/(Diff2Energy(bands,k,h)) for k ,→ site_lw=0.1,
,→ in momentax] 159 lead_site_lw=0,
113 momentay=momentax ,→ colorbar=False)
114 pyplot.plot(momentay, mefy) 160
115 pyplot.xlabel("momentum_y [(lattice 161 # Finalize the system.
,→ constant)^-1]") 162 sys = sys.finalized()
116 pyplot.ylabel("Effective mass") 163
117 pyplot.show() 164 # Compute the band structure of lead
118 def main(): ,→ 0.
119 pot = 0.0 165 momenta = [-2*pi + 0.02 * pi * i for i
120 sys, leads = make_system(pot=pot) ,→ in range(101)]
121 166 plot_bandstructure(sys.leads[0],
122 # To highlight the two sublattices of ,→ momenta)
,→ graphene, we plot one with 167
123 # a filled, and the other one with an ,→ plot_effectivemass(sys.leads[0],momenta)
,→ open circle: 168 # Plot conductance.
124 def family_colors(site): 169 #energies = [-2 * pot + 4. / 50. * pot
125 return 0 if site.family == a else ,→ * i for i in range(51)]
,→ 1 170 simple_dos_example(sys)
126 def plot_dos(labels_to_data):
127 for label, (x, y) in labels_to_data:
128 plt.plot(x, y, label=label,
,→ linewidth=2, color="orange")
129 plt.legend(loc=2, framealpha=0.5)
130 plt.xlabel("energy [t]")
131 plt.ylabel("DoS [a.u.]")
132 plt.show()
133 plt.clf()
134
135 def simple_dos_example(fsys):
136 fsyst = make_syst().finalized()
137
138 spectrum =
,→ kwant.kpm.SpectralDensity(fsyst)
139
140 energies, densities = spectrum()
141
142 energy_subset = np.linspace(0, 2)

10 Page 10 of 10

You might also like