### Draw GaAs band structure using Quantum ESPRESSO

Quantum ESPRESSO is a free, first-principles calculator. The documentation is extensive and many related tools are available. Also, since it uses a plane wave basis, there are few control parameters to determine the calculation accuracy, so it can be said that this is one of the best software to try first-principle calculation first.

In this review, we perform band calculations of GaAs, a typical semiconductor, and briefly describe the band diagram. The environment is Material Apps LIVE! used version 2.1. The preinstalled version of Quantum ESPRESSO is version 6.2. In writing this article, I referred to the following tutorial (Japanese text only).

http://www.cmpt.phys.tohoku.ac.jp/~koretsune/SATL_qe_tutorial/

The calculation procedure for obtaining the band diagram is as follows.

- Self-consistent calculation with pw.x
- Non-self-consistent calculation with pw.x
- Post-Processing with bands.x
- Plotting using gnuplot

Let’s first launch the terminal console in MaterialApps LIVE! From the Start menu, select “System Tools” > “LXTerminal”.

### 1. Self-consistent calculation

First, create an input file for the self-consistent computation. Create the following text file and save it as GaAs.scf.in.

`&control`

calculation = 'scf'

prefix = 'GaAs'

pseudo_dir = './'

wf_collect = .true.

/

&system

ibrav = 2

celldm(1) = 10.6867

nat = 2

ntyp = 2

ecutwfc = 60

ecutrho = 244

/

&electrons

mixing_mode = 'plain'

mixing_beta = 0.7

conv_thr = 1.0d-8

/

ATOMIC_SPECIES

Ga 69.723 Ga.pbe-dn-kjpaw_psl.1.0.0.UPF

As 74.921595 As.pbe-n-kjpaw_psl.1.0.0.UPF

ATOMIC_POSITIONS

Ga 0.00 0.00 0.00

As 0.25 0.25 0.25

K_POINTS {automatic}

8 8 8 0 0 0

Let’s take a closer look. Let’s take a look at the first part.

`&control`

calculation = 'scf'

prefix = 'GaAs'

pseudo_dir = './'

wf_collect = .true.

/

The parameters are set in the form of “Parameter Name = Value” between & control and /. The calculation parameter specifies the calculation mode. In this case ‘scf’. This means self-consistent computation (Solve the Kohn-Sham equations self-consistently). The prefix parameter specifies the headers for various output file names. A good way would be to specify the substance name. Let’s say ‘GaAs’. Pseudo_dir is where the pseudopotential file is located. We’ll put a pseudo-potential file in our working directory as we’ll see later, so we’ll set it to ‘./’ now. wf_collect is an option to save wave functions.

`&system`

ibrav = 2

celldm(1) = 10.6867

nat = 2

ntyp = 2

ecutwfc = 60

ecutrho = 244

/

This section specifies the characteristics of the system. ibrav is the way of specifying the Bravais lattice, and ibrav = 2 specifies the unit lattice vector of fcc. Note that the crystal structure of GaAs is a Zinc-Blende structure, in which Ga and As are placed on two sublattices of a diamond lattice whose unit lattice vector is the same as that of fcc. celldm (1) is the lattice constant, nat is the number of atoms in the unit cell, and ntyp is the number of elements. ecutwfc and ecutrho are cut-off energies (units are Rydberg). The higher the cutoff, the higher the accuracy, but the heavier the calculation. The recommended values vary depending on the type of pseudopotential, but we have set the recommended values as described at the beginning of the pseudopotential file, described later.

`&electrons`

mixing_mode = 'plain'

mixing_beta = 0.7

conv_thr = 1.0d-8

/

This section specifies parameters for wave function convergence. conv_thr is the parameter used to determine convergence. Mixing_mode, mixing_beta are parameters for faster convergence, but you don’t have to worry too much about them for light calculations. See the official page for details.

`ATOMIC_SPECIES`

Ga 69.723 Ga.pbe-dn-kjpaw_psl.1.0.0.UPF

As 74.921595 As.pbe-n-kjpaw_psl.1.0.0.UPF

This part specifies the atomic type and atomic weight (We don’t use it in our calculations.) and the pseudopotential file. Quantum ESPRESSO uses a technique called the pseudopotential method, in which electrons in the inner core are not handled directly, but instead the effect of the inner core electrons on the valence electrons is described by the ‘pseudo’potential. This greatly reduces the computational complexity, but the results vary depending on the choice of the pseudopotential. Therefore, the pseudopotential should be chosen carefully. The pseudopotentials can be downloaded from the Quantum ESPRESSO page. We will use the following two pseudopotential files for Ga and As.

Pseudopotential of Ga

Pseudopotential of As

Copy it to your current working directory. Let’s return to the description of the input file.

`ATOMIC_POSITIONS`

Ga 0.00 0.00 0.00

As 0.25 0.25 0.25

It represents the internal coordinates (xyz coordinates) in the Ga and As unit cells.

`K_POINTS {automatic}`

8 8 8 0 0 0

The last part specifies the number of points in the wave vector (k point) space. The first three numbers specify the number of wave number divisions in the x, y, and z directions. If {automatic} is specified, the k-point is automatically taken discretely in the first Brillouin zone. The last three numbers describe the origin shift of the wavenumber. Here, it is assumed that there is no shift (All 0). The more k points, the more accurate the calculation, but the slower the calculation. In the self-consistent calculation, we take the number of k points to be relatively small because the calculation is repeated until the electron density converges, which takes time.

To calculate Quantum ESPRESSO using the input file, execute the following command:

`pw.x < GaAs.scf.in`

If more than one computational core is available, for example,

`mpirun -np 2 pw.x < GaAs.scf.in`

you can then perform parallel calculations. The calculation should be done in a few minutes.

### 2. Non-self-consistent calculation

1. gives you an accurate electron density, but there are not enough k points to draw the band diagram. Based on the electron density obtained in 1, the band calculation is performed for many k points on the desired line segments in reciprocal lattice space. Create the following text file and save it as GaAs.nscf.in.

`&control`

calculation = 'bands'

prefix = 'GaAs'

pseudo_dir = './'

wf_collect = .true.

/

&system

ibrav = 2

celldm(1) = 10.6867

nat = 2

ntyp = 2

ecutwfc = 60

ecutrho = 244

nbnd = 16

/

&electrons

mixing_mode = 'plain'

mixing_beta = 0.7

conv_thr = 1.0d-8

/

ATOMIC_SPECIES

Ga 69.723 Ga.pbe-dn-kjpaw_psl.1.0.0.UPF

As 74.921595 As.pbe-n-kjpaw_psl.1.0.0.UPF

ATOMIC_POSITIONS

Ga 0.00 0.00 0.00

As 0.25 0.25 0.25

K_POINTS {tpiba_b}

6

0.50 0.25 0.75 30 !W

0.00 0.00 0.00 30 !G

0.50 0.00 0.50 30 !X

0.50 0.25 0.75 30 !W

0.50 0.50 0.50 30 !L

0.00 0.00 0.00 30 !G

The input file is almost identical to the one used in 1. Only the changes are described below. The first part is:

`&control`

calculation = 'bands'

prefix = 'GaAs'

pseudo_dir = './'

wf_collect = .true.

/

Parameter calculation is calculated to ‘bands’. This does not do a self-consistent calculation, but only a single-shot non-self-consistent calculation. In the system part,

`&system`

ibrav = 2

celldm(1) = 10.6867

nat = 2

ntyp = 2

ecutwfc = 60

ecutrho = 244

nbnd = 16

/

The last line adds the parameter nbnd. This specifies the number of bands to calculate. The k-points specification is changed as follows.

`K_POINTS {tpiba_b}`

6

0.50 0.25 0.75 30 !W

0.00 0.00 0.00 30 !G

0.50 0.00 0.50 30 !X

0.50 0.25 0.75 30 !W

0.50 0.50 0.50 30 !L

0.00 0.00 0.00 30 !G

The {tpiba_b} option specifies to perform calculations on k-points along 5 line segments joining 6 points (specified by the first digit) in reciprocal space, with 30 divisions between the specified coordinate points that represent the start or end of the line segments. Use this input file and run

`pw.x < GaAs.nscf.in`

or

`mpirun -np 2 pw.x < GaAs.nscf.in`

### 3. Post-Processing

Create the following text file and save it as GaAs.band.in.

`&bands`

prefix = 'GaAs'

lsym = .true.

/

Use this to run the following command in Terminal:.

`bands.x -i GaAs.band.in`

This generates a plot file, bands.out.gnu, for gnuplot.

### 4. Plotting by gnuplot

Launch gnuplot from a terminal.

`gnuplot`

Type the plot command in gnuplot.

`plot 'bands.out.gnu'`

If you get the band diagram below, the calculations were performed successfully. The vertical axis represents energy (The unit is eV.) and the horizontal axis represents wave numbers (scaled by distance in reciprocal space). Around 0.9 on the horizontal axis corresponds to the gamma point (point of zero wavenumber).

## Summary

We introduced the band calculation by Quantum ESPRESSO. If it is a simple substance, a band diagram can be calculated without much trouble. I hope you can use it not only for research but also for university courses.