# Non self-consistent calculations: Band structures and Density Of States

Prev: LabQSM#Module 1: Basic DFT calculations and Convergences (9h)

## Non self-consistent calculations: Intro

Once the charge density has been obtained in a scf run, more calculations can be performed at fixed density (non-scf). Among these:

- calculations of Kohn-Sham energies and orbitals on any given set of k-points (i.e. without specific aim of represent a reasonable sampling of the BZ);
- calculations as above, also increasing the number of computed (= diagonalized) bands (incl the calculation of empty Kohn-Sham states);
- Importantly, nscf calculations are typically done to plot KS bands or compute the DOS,
- but also as a preliminary step to other calculations (e.g. uniform k-point samplings and large amounts of empty states are using in GW and other many-body perturbation theory algorithms implemented with sum-over-states techniques)

In the Quantum ESPRESSO input file one has to set:

calculation="nscf" # kpts sampling BZ

or

calculation="bands" # kpts along lines

Some comments:

`bands`

is also a nscf-calculation strictly speaking (i.e. the charge density is clearly not updated).- It differs from
`calculation="nscf"`

since there is not even the requirement of a uniform k-sampling (k-points can be computed along special directions, or just at any place in the BZ). - In this perspective,
`nscf`

runs can evaluate integrated quantities like an update of the Fermi energy. - During nscf (as well as bands) KS eigenvalues are diagonal to full accuracy (
`diago_full_acc=.true.`

by default), at variance with scf calculations, where accuracy is lowered for empty states (not relevant to compute the density not the total energy). - While one could set
`diago_full_acc=.true.`

in scf runs, it is anyway highly recommended to run a second nscf calculation to perform BZ refinements or increase the number of state for plotting or inspection. - K-points (and number of bands if relevant) need to be specified according to the specific needs. See below for bands and DOS.

## DOS

In this case a uniform k-point sampling is needed, similarly to scf calculations.

A proper sampling of the BZ is then performed, but the density is not updated.

Input example (`pw.x`

executable) to prepare for DOS calculations:

[...] K_POINTS {automatic} 20 20 20 0 0 0

By doing this we are de fact performing a refinement of the BZ sampling.

Setting `calculation="nscf"`

is a good choice.

Once the KS data have been produced by using `pw.x`

, we can take advantage of a post-processing utility of QE,
`dos.x`

to compute the actual DOS

$> dos.x < dos.in > dos.out

where a typical input file contains the following information:

$> cat dos.in

&DOS prefix = 'diamond' outdir = './SCRATCH/' degauss=0.01 ! [Ry] broadening parameter [ Emin=val ! min/max/step of the energy grid Emax=val deltaE=val ] fildos = 'dos_diamond.dat' /

The output file can then be visualised using some standard tools as described in Plotting and visualization tools.

## Band structure

In this case we need to sample the BZ along user-defined segments in reciprocal space.

Such sampling can be either generated by the `pw.x`

, see below, or provided explicitly by the user and `calculation="bands"`

needs to be set.

The conventions to define and label high symmetry k-points for different lattices can be found here: MaterialsCloud SeekPath

Input example (`pw.x`

) to produce the required KS data:

[...] K_POINTS {crystal_b} 6 0.500 0.500 0.000 40 # X 0.000 0.000 0.000 40 # G 0.500 0.500 0.500 40 # L 0.750 0.500 0.250 40 # W 0.750 0.375 0.375 40 # K 0.000 0.000 0.000 1 # G

Note that here 6 is the number of line edges (= 5 segments).

Names of k-points are not required and just added to decorate the input file

Alternatively, one can provide the list of k-points explicitly. The input file would look like:

[...] K_POINTS {crystal} 140 0.500 0.500 0.000 1 # X 0.490 0.490 0.000 1 0.480 0.480 0.000 1 [...] 0.010 0.010 0.000 1 0.000 0.000 0.000 1 # G [...]

- The first line provides the total number of input k-points.
- Each line contains the 3 components of the selected k-point (either in cartesian or crystal coords.
- The extra column (filled with 1, here) is a placeholder for k-point weight (not used or
`bands`

runs)

Once the nscf data have been computed, `bands.x`

(a post-processing utility of QE) can be used to cast the data in a form ready to be plotted.

$ ./bands.x < bands.in > bands.out

where bands.in looks like:

&BANDS prefix = 'diamond' outdir = './SCRATCH/' filband = 'bands_diamond.dat' /

As for `dos.x`

, it is not difficult to parse the data directly from the output file of `pw.x`

and reformat them by using your own tools.

An example of such a tool is provided in

LabQSM/tools/plot_bands.py

Note that in order to have all eigenvalues printed in the `pw.x`

output file, you may need to set the variable

&CONTROL [...] verbosity="high" /

(which can useful also in a number of other cases when you want extended info about the system studied).

## Examples and Exercises

### Exercise1

**Band structure and DOS of Diamond**

- Plot the DOS and the band structure of diamond along high-symmetry k-point lines
- Use the converged parameters and lattice constant obtained in previous calculations to run scf and nscf calculations

### Exercise2

**Band structure and DOS of Aluminium**

- Plot the DOS and the band structure of Aluminium along high-symmetry k-point lines
- Al is a FCC crystal, 1 atom per cell, Exp lattice parameter: 4.0495 Ang
**Hint**: high symmetry kpts can be found in the Seek-path of materialscoulud: https://www.materialscloud.org/work/tools/seekpath

### Exercise3

**Band structure and DOS of GaAs**

- Plot the DOS and the band structure of GaAs along high-symmetry k-point lines
- GaAs is a zinc-blende structure (fcc with 2 atoms per cell)
**Hint**: high symmetry kpts can be found in the Seek-path of materialscoulud: https://www.materialscloud.org/work/tools/seekpath