# Sampling of the BZ with k-points¶

In this exercise we will explore the convergence with k-point sampling for a
(semi)metalic system, and compare it with an insulator. We have selected three
carbon-structures that are particularly easy to converge in terms of basis and
real-space mesh. You will work in the directories *graphene*, *graphite*, and
*diamond*.

## Example 1 - Testing kpoint-convergence with Energy¶

Hint

Enter the *01-Graphene* directory and later the *02-Diamond* directory.

In this section, we examine the differences in setting the k-point sampling for two carbon polymorphs: graphene as a representative 2D structure and diamond as a 3D one.

Begin by uncommenting the line that includes `kgridcutoff`

and assigning it a
specific value, for example, first 2 Bohr and then 30 Bohr:

```
kgrid.cutoff 2 bohr
```

Run the calculation using the modified fdf files for both graphene and diamond. Afterward, examine the following useful information from the output files:

The effective k-cutoff:

siesta: k-cutoff (effective) = 3.922 Ang

Total number of k-points:

siesta: k-grid: Number of k-points = 4

k-points sampling in each direction of the reciprocal space:

siesta: k-grid: 0 2 0 0.500 siesta: k-grid: 0 0 2 0.500 siesta: k-grid: 2 0 0 0.500

If

`WriteKpoints T`

, we also get coordinates and weights of the considered k-points (the same information is included in the SystemLabel.KP file):siesta: k-point coordinates (Bohr**-1) and weights: siesta: 1 0.149858E+00 0.149858E+00 0.149858E+00 0.250000E+00 siesta: 2 0.449573E+00 -0.149858E+00 -0.149858E+00 0.250000E+00 siesta: 3 -0.149858E+00 0.449573E+00 -0.149858E+00 0.250000E+00 siesta: 4 0.149858E+00 0.149858E+00 -0.449573E+00 0.250000E+00

Note, that as expected, the distribution of the k-points is set in agreement with the geometry of the input system.

To manually set the kgrid sampling, comment out `kgridcutoff`

and uncomment
the `block kgrid_Monkhorst_Pack`

in both fdf files:

```
%block kgrid_Monkhorst_Pack
4 0 0 0.5
0 4 0 0.5
0 0 1 0.0
%endblock kgrid_Monkhorst_Pack
```

Compare the number of used k-points with the previous case.

To ensure convergence of the kgrid, monitor changes in the total energy of the system. Compare the values retrieved from both samplings. It is worth mentioning that metallic systems usually require a large number of k-points to achieve convergence.

## Example 2 - kpoint-convergence with Bands and DOS¶

### Graphene¶

Hint

Enter the *01-Graphene* directory.

Here we will focus on the Density of States (DOS) for graphene. For that, we
will need to edit `graphene.fdf`

and uncomment the following lines:

```
%block kgrid_Monkhorst_Pack
4 0 0 0.5
0 4 0 0.5
0 0 1 0.0
%endblock kgrid_Monkhorst_Pack
```

Here, a 4x4x1 grid is used, which, as we will see, this is insufficient for a good description of graphene.

To plot the DOS we will use the utility program `Eig2DOS`

. For the broadening
for each state in eV (a value of the order of the default (0.2 eV) is usually
reasonable, but if you want to reproduce the smooth V-shape close to graphene’s
Dirac cone you will probably have to decrease that value). We can try:

```
Eig2DOS -f -s 0.1 -n 400 -m -12.0 -M 2.0 -k graphene.KP graphene.EIG > dos
```

which will compute the DOS in the (12 eV ,2 eV) range around the Fermi level
(`-f`

option), using a grid of 400 points and a broadening of 0.1 eV.

The content of the `dos`

file can be plotted using gnuplot:

```
gnuplot
plot "dos" u 1:4 with lines
```

We get a set of spikes, with just some inkling that there might be a V-shaped feature near the Fermi level. Obviously the sampling is not good enough.

The file `graphene.fdf`

will also produce a file graphene.bands containing the
band structure along the several lines in the Brillouin zone (BZ) as specified
using the block:

```
%block Bandlines
1 0.5000000000 0.000000000 0.0000 M
30 0.0000000000 0.000000000 0.0000 \Gamma
45 0.3333333333 0.333333333 0.0000 K
30 0.5000000000 0.500000000 0.0000 M
%endblock BandLines
```

To plot the band structure we use the utility program `gnubands`

, taking
advantage of some new features (type `gnubands -h`

for a list of options):

```
gnubands -F -G -o bandstructure -E 10 -e -20 *.bands
```

That will shift the origin of energy to the Fermi level. With the above command we will get a window between -20 eV and 10 eV with respect to Ef. Also, a ‘bandstructure.gplot’ driver file is created automatically (which has extra information to place and label the ‘ticks’ for each symmetry point in the BZ). Now we plot:

```
gnuplot --persist -e "set grid" bandstructure.gplot
```

The position of the Dirac cone is highlighted by the gridline passing by the high-symmetry K point). It is obvious, however, by looking at the Ef gridline, that the Fermi level does not fall exactly at the Dirac cone, as it should (see Fig. 3).

The position of the Fermi level in (semi)metals is very sensitive to the k-point mesh used. In this case, the 4x4x1 sampling originally set in the input file is clearly not appropriate. You can increase the Monkhorst-Pack parameters and check the convergence. Notice also that in graphene (and other hexagonal lattices) the K-point (1/3,1/3,0) is particularly relevant, and it is advisable that it is explicitly included in the discretization. In fact, in this case including the K-point makes all the difference, as can be seen by using this block:

```
%block kgrid_Monkhorst_Pack
6 0 0 0.0
0 6 0 0.0
0 0 1 0.0
%endblock kgrid_Monkhorst_Pack
```

The Fermi level is now exactly at the vertex of the Dirac cone. This is not
really a consequence of having increased the density of k-points, but of
including the K-point in the sampling (check the *graphene.KP* file; note that
the k-points are given in cartesian coordinates, not relative to the reciprocal
basis vectors). In fact, if we use the block:

```
%block kgrid_Monkhorst_Pack
3 0 0 0.0
0 3 0 0.0
0 0 1 0.0
%endblock kgrid_Monkhorst_Pack
```

leading to a much coarser sampling, we still get the Fermi level correctly aligned. The presence of the K point in the sampling set pins the Fermi level at the Dirac cone.

It is also instructive to see the behavior of the DOS when the k-point sampling gets more dense. For coarse samplings, it does not look at all like the “free-electron-like” curve we see in textbooks. This is due to the very simple method used to construct the DOS (just broadening a collection of discrete energy levels). You probably have to increase the mesh beyond 60x60x1 to have good plots for the DOS.

Note

You do not need to run again a full scf cycle to get the DOS with more
k-points. You could re-use the converged density-matrix to shorten the cycle
(option `DM.UseSaveDM`

). There is an alternative route that does not use
the .EIG file, but the computation of the partial density of states. Just
include the blocks:

```
%block ProjectedDensityOfStates
EF -20.00 10.00 0.100 500 eV
%endblock ProjectedDensityOfStates
%block PDOS.kgrid_Monkhorst_Pack
60 0 0 0.0
0 60 0 0.0
0 0 1 0.0
%endblock PDOS.kgrid_Monkhorst_Pack
```

and the program will compute the pDOS (and the DOS) in a finer grid. The DOS
is in *graphene.DOS*, which can be plotted as:

```
gnuplot> plot "graphene.DOS" u 1:2 with lines
```

to get a figure similar to Fig. 4. (Note that the scf sampling was set to 6x6x1, as above). The pDOS information might be useful.

### Diamond¶

Hint

Enter the *02-Diamond* directory.

Finally, another 3D example is diamond. It has the same fcc structure as
silicon, and the high-symmetry K points are included in the input file
`diamond.fdf`

. Unlike graphene and graphite, diamond is non-metallic, and the
k-point convergence is easier. Plot bands, and DOS and check the results.

### Graphite¶

Hint

Enter the *03-Graphite* directory.

Graphite is the 3D version of graphene. It is a semimetal, and similar caveats than graphene apply. Now, however, the k-point sampling along the three spatial directions must be considered.

The input `graphite.fdf`

includes the bandlines required to plot the bands.
Notice that there is a flat band right at the Fermi level (compare with
Fig. 5). Check the convergence of the Fermi level, and the
DOS as a function of the k-sampling.