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)
../../_images/bandstructure.png

The full script: bandstructure.py.