Skip to content
    import matplotlib
from matplotlib import pyplot

import numpy as np

from common import draw_classic_axes, configure_plotting

configure_plotting()

pi = np.pi
  

Solutions for lecture 8 exercises

Quick warm-up exercises

1.

The part first part of ω2 will always be equal or larger than the second part. Therefore ω20.

2.

Be cautious with the difference in the unit cell size.

3.

Values of k outside of the 1st Brillouin zone describe the same solutions.

Exercise 1: analyzing the diatomic vibrating chain

1.

Use the small angle approximation sin(x)x to ease calculations. For the Taylor polynomial take ω2=f(x)f(0)+f(0)k+12f(0)k2 (some terms vanish, computation is indeed quite tedious, but it's a 'fun' task). Calculating the group velocity yields

|vg|=κa22(m1+m2)

2.

Optical branch corresponds with (+) in the equation given in the lecture notes. Be smart: you do not have to calculate the derivatives again. Finding the Taylor polynomial andcomputing the group velocity results in

|vg|=0

3.

Density of states is given as g(ω)=dN/dω=dN/dk×dk/dω. We know dN/dk=2L/2π=L/π since we have 1D and positive and negative k-values. dk/dω can be computed using the group velocity: dk/dω=(dω/dk)1=(vg)1

Exercise 2: the Peierls transition

1.

A unit cell consits of exactly one t1 and one t2 hopping.

2.

Using the hint we find: Eϕn=ϵϕn+t1ψn+t2ψn1 Eψn=t1ϕn+t2ϕn+1+ϵψn

Notice that the hopping, in this case, is without the '-'-sign!

3.

Using the Ansatz and rearranging the equation yields:

E(ϕ0ψ0)=(ϵt1+t2eikat1+t2eikaϵ)(ϕ0ψ0)

4.

The dispersion is given by:

E=ϵ±t12+t22+2t1t2cos(ka).
pyplot.figure()
k = np.linspace(-2*pi, 2*pi, 400)
t1 = 1;
t2 = 1.5;
pyplot.plot(k, -(t1+t2)*np.cos(k/2),'r',label='1 atom dispersion')
pyplot.plot(k[199:100:-1],-(t1+t2)*np.cos(k[0:99]/2),'r--',label='1 atom dispersion with folded Brillouin zone')
pyplot.plot(k[299:200:-1],-(t1+t2)*np.cos(k[300:399]/2),'r--')
pyplot.plot(k, np.sqrt(t1**2 + t2**2+2*t1*t2*np.cos(k)),'b',label='2 atom dispersion')
pyplot.plot(k, -np.sqrt(t1**2 + t2**2+2*t1*t2*np.cos(k)),'b')

pyplot.xlabel('$ka$'); pyplot.ylabel(r'$E-\epsilon$')
pyplot.xlim([-2*pi,2*pi])
pyplot.ylim([-1.1*(t1+t2),1.1*(t1+t2)])
pyplot.xticks([-2*pi, -pi, 0, pi,2*pi], [r'$-2\pi$',r'$-\pi$', 0, r'$\pi$',r'$2\pi$'])
pyplot.yticks([-t1-t2, -np.abs(t1-t2), 0, np.abs(t1-t2), t1+t2], [r'$-t_1-t_2$',r'$-|t_1-t_2|$', '0', r'$|t_1-t_2|$', r'$t_1+t_2$']);
pyplot.vlines([-pi, pi], -2*(t1+t2)*1.1,2*(t1+t2)*1.1, linestyles='dashed');
pyplot.hlines([-np.abs(t1-t2), np.abs(t1-t2)], -2*pi, 2*pi, linestyles='dashed');
pyplot.fill_between([-3*pi,3*pi], -np.abs(t1-t2), np.abs(t1-t2), color='red',alpha=0.2);

pyplot.legend(loc='lower center');

png

(Press the magic wand tool to enable the python code that created the figure to see what happends if you change t1 and t2.)

Notice that the red shaded area is not a part of the Band structure anymore! Also check the wikipedia article.

5.

For the group velocity we find

vg(k)=t1t2asin(ka)t12+t22+2t1t2cos(ka),

and for the effective mass we obtain

m(k)=2a2t1t2[t1t2sin2(ka)(t12+t22+2t1t2cos(ka))3/2+cos(ka)t12+t22+2t1t2cos(ka)]1.

6.

We know g(E)=dNdkdkdE=Lπ1vg(E) with vg(k) from the previous subquestion. Rewriting vg(k) to vg(E) and substituting it in g(E) gives

g(E)=4Laπ|Eϵ|4t12t22[(Eϵ)2t12t22]2.

Graphically the density of states looks accordingly:

pyplot.subplot(1,3,1)
k = np.linspace(-2*pi, 2*pi, 400)
t1 = 1;
t2 = 1.5;
pyplot.plot(k, -(t1+t2)*np.cos(k/2),'r',label='1 atom dispersion')
pyplot.plot(k[199:100:-1],-(t1+t2)*np.cos(k[0:99]/2),'r--',label='1 atom dispersion with folded Brillouin zone')
pyplot.plot(k[299:200:-1],-(t1+t2)*np.cos(k[300:399]/2),'r--')
pyplot.plot(k, np.sqrt(t1**2 + t2**2+2*t1*t2*np.cos(k)),'b',label='2 atom dispersion')
pyplot.plot(k, -np.sqrt(t1**2 + t2**2+2*t1*t2*np.cos(k)),'b')

pyplot.xlabel('$ka$'); pyplot.ylabel(r'$E-\epsilon$')
pyplot.xlim([-2*pi,2*pi])
pyplot.xticks([-2*pi, -pi, 0, pi,2*pi], [r'$-2\pi$',r'$-\pi$', 0, r'$\pi$',r'$2\pi$'])
pyplot.yticks([-t1-t2, -np.abs(t1-t2), 0, np.abs(t1-t2), t1+t2], [r'$-t_1-t_2$',r'$-|t_1-t_2|$', '0', r'$|t_1-t_2|$', r'$t_1+t_2$']);

pyplot.subplot(1,3,2)
w = np.sqrt(t1**2 + t2**2+2*t1*t2*np.cos(k))
pyplot.hist(w,30, orientation='horizontal',ec='black',color='b');
pyplot.hist(-w,30, orientation='horizontal',ec='black',color='b');
pyplot.xlabel(r'$g(E)$')
pyplot.ylabel(r'$E-\epsilon$')
pyplot.yticks([],[])
pyplot.xticks([],[])

pyplot.subplot(1,3,3)
w = -(t1+t2)*np.cos(k/2)
pyplot.hist(w,60, orientation='horizontal',ec='black',color='r');
pyplot.xlabel(r'$g(E)$')
pyplot.ylabel(r'$E-\epsilon$')
pyplot.yticks([],[])
pyplot.xticks([],[])

pyplot.suptitle('Density of states for 2 atom unit cell and 1 atom unit cell');

png

Exercise 3: atomic chain with 3 different spring constants

1.

The unit cell should contain exactly one spring of κ1, κ2 and κ3 and exactly three atoms.

2.

The equations of motion are

mu¨n,1=κ1(un,1un,2)κ3(un,1un1,3)mu¨n,2=κ2(un,2un,3)κ1(un,2un,1)mu¨n,3=κ3(un,3un+1,1)κ2(un,3un,2)

3.

Substitute the following ansatz in the equations of motion:

(u1,nu2,nu3,n)=eiωtikxn(A1A2A3)

4.

Because the spring matrix and the matrix X commute, they share a common set of eigenvectors. The eigenvalues of the matrix X are λ=1 with an eigenvector

(101)

and λ=+1 with eigenvectors

(101),(010).

These eigenvectors can be used to calculate the eigenvalues of the spring matrix. However, be cautious! The eigenvalue λ=+1 is degenerate and to find the eigenvalue of the spring matrix we should take a linear combination of the two corresponding eigenvectors. This is explained at page 3 in this document.

The eigenvalues of the spring matrix are

ω2=(ω12ω22ω32)=1m(qk3+3q24k324k3q+9q22k3+3q2+4k324k3q+9q22)

5.

If κ1=κ2=κ3 then we have the uniform mono-atomic chain. If the length of the 3 spring constant unit cell is a, then the length of the mono-atomic chain is a/3.