Calculation of electronic band structures¶
In this tutorial we calculate the electronic band structure of Si along high symmetry directions in the Brillouin zone.
First, a standard ground state calculations is performed and the results are saved to a .gpw file. As we are dealing with small bulk system, plane wave mode is the most appropriate here.
from ase.build import bulk
from gpaw import GPAW, PW, FermiDirac
# Perform standard ground state calculation (with plane wave basis)
si = bulk('Si', 'diamond', 5.43)
calc = GPAW(mode=PW(200),
xc='PBE',
kpts=(8, 8, 8),
random=True, # random guess (needed if many empty bands required)
occupations=FermiDirac(0.01),
txt='Si_gs.txt')
si.calc = calc
si.get_potential_energy()
calc.write('Si_gs.gpw')
Next, we calculate eigenvalues along a high symmetry path in the Brillouin
zone kpts={'path': 'GXWKL', 'npoints': 60}
. See
ase.dft.kpoints.special_points
for the definition of the special
points for an FCC lattice.
For the band structure calculation, density is fixed to the previously
calculated ground state density (fixdensity=True
), and as we want to
calculate all k-points, symmetry is not used (symmetry='off'
). The
unoccupied states can be sometimes converged faster with the conjugate gradient
eigensolver.
# Restart from ground state and fix potential:
calc = GPAW('Si_gs.gpw',
nbands=16,
fixdensity=True,
symmetry='off',
kpts={'path': 'GXWKL', 'npoints': 60},
convergence={'bands': 8})
calc.get_potential_energy()
Finally, the bandstructure can be plotted (using ASE’s band-structure tool
ase.dft.band_structure.BandStructure
):
bs = calc.band_structure()
bs.plot(filename='bandstructure.png', show=True, emax=10.0)

The full script: bandstructure.py
.