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.