# Extremal points and effective mass

This tutorial demonstrates how to find extremal points (maxima/minima) in k-space and calculate effective masses using the band-edge program. This is done for silicon starting from a self-consistent LDA density. Silicon is a trivial example as its extremal points are found on high-symmetry lines. The band-edge program is particularly useful when looking for multiple extremal points that do not fall on high-symmetry lines.

```
$ blm si --nk=4 --gmax=5 && cp actrl.si ctrl.si && lmfa si && cp basp0.si basp.si && lmf si > out.lmfsc
$ lmf si --rs=1,0 -vnit=1 --band~fn=syml #calculate bands
$ echo -6,6 / | plbnds -fplot -ef=0 -scl=13.6 -lbl=L,G,X,W,G bnds.si #set up plotting
$ fplot -f plot.plbnds && gs fplot.ps #plot and view
$ band-edge si -floatmn -maxit=20 -r=.1 -band=5 -q0=0.5,0,0 #float step
$ band-edge si -edge2=1 -maxit=20 -r=.04 -band=5 -gtol=.0001 -q0=0.82,0,0 #gradients step
$ band-edge si -mass -alat=10.26 -r=.0005,.001,.002,.003 -band=5 -q0=0.847,0,0 #calculate mass
```

### Tutorial

The starting point is a self-consistent LDA density, you may want to review the DFT tutorial for silicon. Copy the following lines to a file called *init.si*:

```
LATTICE
ALAT=10.26
PLAT= 0.00000000 0.50000000 0.50000000
0.50000000 0.00000000 0.50000000
0.50000000 0.50000000 0.00000000
# pos means cartesian coordinates, units of alat
SITE
ATOM=Si POS= 0.00000000 0.00000000 0.00000000
ATOM=Si POS= 0.25000000 0.25000000 0.25000000
```

Run the following command to obtain a self-consistent density:

```
$ blm si --nk=4 --gmax=5 && cp actrl.si ctrl.si && lmfa si && cp basp0.si basp.si && lmf si > out.lmfsc
```

It will be helpful to have a band structure to refer to when finding the extremal points, you may want to review the silicon band plotting tutorial. Create a symmetry file *syml.si* containing the following lines:

```
41 .5 .5 .5 0 0 0 L to G
41 0 0 0 1 0 0 G to X
21 1 0 0 1 .5 0 X to W
41 1 .5 0 0 0 0 W to G
0 0 0 0 0 0 0
```

Run the following command to generate the bands:

```
$ lmf si --rs=1,0 -vnit=1 --band~fn=syml
```

Now plot the bands by running the following two commands:

```
$ echo -6,6,10,15 | plbnds -fplot -ef=0 -scl=13.6 -lbl=L,G,X,W,G bnds.si #set up plotting
$ fplot -f plot.plbnds && gs fplot.ps #plot and view
```

Take a look at the band structure plot. The valence band maximum is at the $\Gamma$ point while the conduction band minimum is most of the way along the line between $\Gamma$ and $X$. We will now use the band-edge tool to accurately locate the position of the conduction band minimum and to calculate the effective mass. This is done in three steps, you first do a rough search by **‘floating’** to a point near the minimum. From here, you do a more refined search by carrying out a minimization until the gradient is negligibly small. Lastly, you calculate the effective mass around this point.

#### 1. Float to low-energy point

The band-edge script has a **‘float’** option that is useful for doing a quick search to find a low-energy (or high-energy) region of k-space. You specify a starting point, then the script creates a cluster of points around it and checks what is the lowest-energy point. It then uses the lowest-energy point as the next central point, creates a new set of points around it and again moves to the lowest-energy one. This process is repeated until the central point is the lowest-energy point.

Let’s start at the point half-way between $\Gamma$ and $X$ (0.5, 0.0, 0.0) and float down in energy. Run the following command:

```
$ band-edge si -floatmn -maxit=20 -r=.1 -band=5 -q0=0.5,0,0
```

The **‘floatmn’** switch specifies that you are looking for a minimum-energy point (see additional exercises for a maximum-energy point example). The **‘maxit’** switch sets the number of iterations (number of times a set of points is created), **‘r’** is a range that defines how far from the centre the points are generated, **‘band’** is for the band considered (here conduction band is 5 since 4 electrons and spin degenerate) and lastly **q0** is the starting k-point.

You should get an output similar to the following:

```
start iteration 1 of 20
lmf si --band~lst=5~box=.1,n=12+o,q0=0.5,0,0 > out.lmf
qnow : 0.500000 0.000000 0.000000 0.2628584
gradient : -0.231511 0.000000 0.000046 0.231511
q* : 0.925046 0.000000 0.001935
use : 0.589443 0.000000 0.044721
```

Take a look at the line beginning with lmf. Here, the band-edge tool is running lmf to get the energy of each point in the cluster around your starting point. The **qnow** line gives the current central k-point **(0.5,0,0)** and its energy in Rydbergs. The **‘use’** line prints the lowest-energy k-point from the cluster of points, this will then be used as the central point in the next iteration. The cluster of 13 k-points and their energies are printed to the bnds.si file, take a look and you will see that the point **(0.589443, 0.0, 0.044721)** is indeed the lowest-energy point.

Note that the qnow energies are getting smaller as we float to a low-energy region. After 5 iterations, the following is printed: **‘cluster center is extremal point … exiting loop’**. The central k-point is the lowest-energy point and the float routine is finished.

#### 2. Gradient minimization

Starting from the low-energy point we floated to, the next step is to do a more refined search using a gradient minimization approach. Band-edge creates a new cluster of points, does a quadratic fit and then traces the gradients to a minimum point. Run the following command:

```
$ band-edge si -edge2=1 -maxit=20 -r=.04 -band=5 -gtol=.0001 -q0=0.82,0,0
```

The **‘edge2’** part specifies what gradient minimization algorithm to use (run **‘band-edge –h’** for more information), the r is the excursion range (step size in minimization), the **‘gtol’** is the tolerance in the gradient and the **q0** is the starting point that we obtained from the float step.

The output is similar to before but now we will pay attention to the gradient line which prints the x, y and z gradient components and the last column gives the magnitude. Note how the gradient magnitude is decreasing with each step until it falls below the specified tolerance (**gtol**). At this point, the gradients minimization is converged and the following is printed **‘gradient converged to tolerance gtol = .0001’**.

#### 3. Calculate effective mass

Now that we have accurately determined the conduction band minimum, we can calculate the effective mass. This is done by fitting a quadratic form to a set of points around the conduction band minimum. Run the following command:

```
$ band-edge si -mass -alat=10.26 --bin -r=.0005,.001,.002,.003 -band=5 -q0=0.8458,0,0
```

The **mass** refers to effective mass calculation and **alat** is the lattice constant (found in various places such as the lmf output, init or site file). The lattice constant is needed to convert to atomic units since the code reports k-points in units of $2\pi/alat$. Here, the r gives the radii of the four clusters of points around the central point. The extra points improve the accuracy of the quadratic fitting.

The last line of the output prints the three effective mass components in atomic units. So for silicon, the effective mass is anisotropic with lighter masses in two directions and a heavier effective mass in the third direction.

### Additional Exercises

**1) Valence band maximum and effective mass**

Although we know the valence band maximum for silicon is at the $\Gamma$ point, we will use it as an example for finding a maximum point. In the float step, change the **floatmn** (for minimum) to **floatmx** (for maximum) and change the band number to 4 (for valence band). Notice the energies are going up. Now do a gradient minimization from the point you floated to, remember to change the band number to 4. The valence band maximum is in a flatter region so try using a smaller excursion radius, say 0.001. Then calculate the effective mass. Your values should be around **(-0.33, -0.56, -0.88)**. The negative signs indicate a maximum point, a saddle point would have at least one positive sign.

Edit This Page