# 4.1. Example: band structure of silicon

Firstly, we obtain the ground state density determining the Hamiltonian to be used in the band structure calculation.

```
info.calculationType = 'self-consistent'
info.savepath = './results/si_real_scf';
element(1).species = 'Si';
element(1).path = './Si_TM_LDA.mat';
atom.xyz = 10.25 * ...
[[ 0 0 0]
[0.2500 0.2500 0.2500]];
atom.element = ones(2,1);
domain.latvec = 10.25/2*[0,1,1;1,0,1;1,1,0];
domain.lowres = 0.5;
diffop.method = 'fft';
functional.list = {'XC_GGA_X_PBE','XC_GGA_C_PBE'};
kpoint.gridn = [5,5,5];
```

The keywords are described below.

`info.calculationType`

is a string determining the nature of the calculation. If it is set to self-consistent as it is here, the Kohn-Sham equation is solved self-consistently and the equilibrium ground-state density is saved upon completion of the calculation;`info.savepath`

is a string containing the path to the results file. RESCU uses two files to save the data. One file is an HDF5 file which contains all the distributed arrays (e.g. density, kinetic energy density, wavefunctions) and the other file is a MAT-file which contains the rest of the results (e.g. total energy, Kohn-Sham energies, forces). In the present example, the files`./results/si_real_scf.h5`

and`./results/si_real_scf.mat`

will be created;`element(1).species`

is a string containing the label of element(1);`element(1).path`

is a string containing the path to the pseudo-potential file associated with element(1);`atom.xyz`

is an array containing the atom Cartesian coordinates;`atom.element`

is an array containing the element number associated with each atom. All eight atoms are element(1);`domain.latvec`

is an array containing three lattice row vectors;`domain.lowres`

is a number defining the grid resolution in Bohr radii;`diffop.method`

is a string determining the method used to compute derivatives. Fast Fourier transforms will be used here;`functional.list`

cell array of strings containing the names of the functionals included in the DFT calculation; we use the PBE exchange correlation functional [PBE];`kpoint.gridn`

use a 5\(\times\)5\(\times\)5 uniform grid to sample reciprocal space.

RESCU is executed as follows

```
rescu -i si_real_scf
```

The next step is calculating the band structure. RESCU is notified to do
a band structure calculation through the keyword
`info.calculationType`

. The path to the converged density is passed
using the keyword `rho.in`

. Most of the self-consistent calculation
input should be reused as the system remains the same. Redundant data is
therefore read from `rho.in`

. The output path must be modified,
otherwise the self-consistent results will be overwritten. Finally, the
`kpoint`

keywords should also be different.

```
info.calculationType = 'band-structure'
info.savepath = './results/si_real_bs';
kpoint.type = 'line';
kpoint.gridn = 32;
kpoint.sympoints = {'L','G','X','W','K'};
rho.in = './results/si_real_scf';
```

The new keywords are described below.

`info.calculationType`

is a string determining the nature of the calculation. If it is set to band-structure, the eigenvalues of the Hamiltonian are calculated. There is no self-consistent procedure involved;`kpoint.type`

is the string ’line’ which tells RESCU to compute a line going through the k-points defined by kpoint.sympoints and having a total of kpoint.gridn;`kpoint.gridn`

use 32 point along the line defined by kpoint.sympoints;`kpoint.sympoints`

cell array containing the reduced coordinates or conventional labels (FCC labels in the present example).`rho.in`

the path of the file containing the self-consistent density. Here we point to the result from the calculation done above.

For a band structure calculation, RESCU is executed as follows

```
rescu -i si_real_scf
```

Upon completion, RESCU will write the basic band structure data in
`BandStructure.txt`

. The first three lines give the number of
high-symmetry k-points, their labels (e.g. \(L, \Gamma, X\) for an
FCC crystal) and their k-point indices. The next lines gives the total
number of k-points (\(n_k\), bands \(n_b\) and spin degrees of
freedom \(n_s\)). For example,

```
5 # num high symmetry points
L G X W K # label high symmetry points
1 21 44 55 63 # indices high symmetry points
63 10 1 # nk, nb, ns
```

Then comes the k-point fractional coordinates, i.e. a block of
\(n_k\) lines with three coordinates. Finally, there are the
energies, i.e. a block of \(n_k\) lines with \(n_b\) numbers. If
the simulation included spin, that last block is repeated twice.
Additional data is found in the `band`

structure stored in
`./results/si_real_bs.mat`

.

# 4.2. Band structure plot

Once the band structure calculation is over, the results can be read
directly from the output files. RESCU also has an automated plotting
option. Suppose that the results are stored in
`./results/si_real_bs.mat`

, then they can be plotted typing

```
rescu -p ./results/si_real_bs.mat
```

This will read `./results/si_real_bs.mat`

, display a plot of the band
structure, and save the figure to `si_real_bs_bs.fig`

. By default, the
figure is saved as a MATLAB figure and _bs is appended to the input
file’s name. It is also possible to determine the name and extension of
the output file as follows

```
rescu -p ./results/si_real_bs.mat EvsK_si.png
```

This would save the figure as a PNG file named `EvsK_si.png`

. The
resulting figure should look like Fig. 4.2.1.
RESCU read the Fermi level off the input file and shift the energies
such that the Fermi level is zero. The k-point labels or coordinates
appear in the ordinate axis.

Perdew, John P., Kieron Burke, and Matthias Ernzerhof. Generalized gradient approximation made simple (vol 77, pg 3865, 1996). Physical review letters 78.7 (1997): 1396-1396.