# 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()
ef = calc.get_fermi_level()
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, the density is fixed to the previously calculated ground state density, and as we want to calculate all k-points, symmetry is not used (symmetry='off').

# Restart from ground state and fix potential:
calc = GPAW('Si_gs.gpw').fixed_density(
nbands=16,
symmetry='off',
kpts={'path': 'GXWKL', 'npoints': 60},
convergence={'bands': 8})

Finally, the bandstructure can be plotted (using ASE’s band-structure tool ase.spectrum.band_structure.BandStructure):

bs = calc.band_structure()
bs.plot(filename='bandstructure.png', show=True, emax=10.0)

The full script: bandstructure.py.

## Effect of spin-orbit coupling¶

Here is a zoom in on the VBM to see the effect of including Spin-orbit coupling:

from ase.build import bulk
from gpaw import GPAW, PW, FermiDirac
import numpy as np

# Non-collinear ground state calculation:
si = bulk('Si', 'diamond', 5.43)
si.calc = GPAW(mode=PW(400),
xc='LDA',
experimental={'magmoms': np.zeros((2, 3)),
'soc': True},
kpts=(8, 8, 8),
symmetry='off',
occupations=FermiDirac(0.01))
si.get_potential_energy()

bp = si.cell.bandpath('LGX', npoints=100)
bp.plot()

# Restart from ground state and fix density:
calc2 = si.calc.fixed_density(
nbands=16,
basis='dzp',
symmetry='off',
kpts=bp,
convergence={'bands': 8})

bs = calc2.band_structure()
bs = bs.subtract_reference()

# Zoom in on VBM:
bs.plot(filename='si-soc-bs.png', show=True, emin=-1.0, emax=0.5)