Electronic Band Structure from GW

by Dmitrii Nabok for exciting nitrogen

Purpose: In this tutorial you will learn how to perform a basic G$_{0}$W$_{0}$ calculation. As an example, the electronic band structure of bulk Si is calculated. Notice that self-consistent GW is not yet implemented in exciting.

### 0. Define relevant environment variables

Read the following paragraphs before starting with the rest of this tutorial!

Before starting, be sure that relevant environment variables are already defined as specified in How to set environment variables for tutorials scripts. Here, you can find a list of the scripts which are relevant for this tutorial, with a short description.

• PLOT-compare-bands.py: Python visualization script for plotting and comparing energy bands.
• PLOT-gwdos.py: Python visualization script for plotting and comparing density of states.

From now on the symbol $will indicate the shell prompt. Requirements: Bash shell. Python numpy, lxml, matplotlib.pyplot, and sys libraries. Important note: All input parameters are in atomic units! ### 1. Theoretical background: G0W0 approximation. The quasiparticle energies in the G$_{0}$W$_{0}approximation are given as a solution of the linearized quasi-particle (QP) equation [Hybertsen1986] as (1) \begin{align} \epsilon_{n\mathbf{k}}^{QP} = \epsilon_{n\mathbf{k}} + Z_{n\mathbf{k}} \left[ {\rm Re}~\Sigma_{n\mathbf{k}}(\epsilon_{n\mathbf{k}}) - V_{n\mathbf{k}}^{xc} \right]\,, \end{align} where\epsilon_{n\mathbf{k}}$are the Kohn-Sham (KS) eigenvalues,$\Sigma_{n\mathbf{k}}$and$V_{n\mathbf{k}}^{xc}$are, respectively, the diagonal matrix elements of the self-energy and the exchange-correlation (xc) potential that is employed in the single-particle KS Hamiltonian. The QP renormalization factor$Z_{n\mathbf{k}}$accounts for the energy-dependence of the self-energy. The self-energy$\Sigma(\mathbf{r},\mathbf{r}';\omega)is given by [Hedin1965] (2) \begin{align} \Sigma(\mathbf{r},\mathbf{r}';\omega) = \frac{i}{2\pi} \int G_0(\mathbf{r},\mathbf{r}';\omega+\omega')~W_0(\mathbf{r},\mathbf{r}';\omega')~e^{i\omega'\eta}~d\omega', \end{align} whereG_0$is the noninteracting single-particle Green function obtained from the Kohn-Sham states and$W_0is the dynamically screened Coulomb potential (3) \begin{align} W_0(\mathbf{r},\mathbf{r}';\omega) = \int \epsilon^{-1}(\mathbf{r},\mathbf{r}'';\omega)~v_{\rm C}(\mathbf{r}'',\mathbf{r}') d\mathbf{r}''. \end{align} Here,v_{\rm C}(\mathbf{r},\mathbf{r}') = 1/|\mathbf{r}-\mathbf{r}'|$is the Coulomb potential and$\epsilon(\mathbf{r},\mathbf{r}';\omega)$is the dielectric function calculated in the random-phase approximation (RPA). ### 2. Ground-state calculation Create a working directory tutorial-GW and move inside it. $ mkdir tutorial-gw
$cd tutorial-gw  Below is the input file (input.xml) for bulk Si, which we consider in this tutorial. <input> <title>Silicon</title> <structure speciespath="$EXCITINGROOT/species">
<crystal>
<basevect>5.13 5.13 0.00</basevect>
<basevect>5.13 0.00 5.13</basevect>
<basevect>0.00 5.13 5.13</basevect>
</crystal>
<species speciesfile="Si.xml" rmt="2.1">
<atom coord="0.00 0.00 0.00"></atom>
<atom coord="0.25 0.25 0.25"></atom>
</species>
</structure>

<groundstate
do="fromscratch"
rgkmax="7.0"
ngridk="4 4 4"
xctype="LDA_PW"
>
</groundstate>

</input>


To perform the actual calculation, copy and paste the text from above into a file called input.xml within the directory tutorial-gw. Make sure to set $EXCITINGROOT to the correct exciting root directory in the speciespath attribute using the command $ SETUP-excitingroot.sh


Now, you can start the groundstate calculation by invoking the exciting executable (serial version)

$time excitingser  After the run, one can inspect the INFO.OUT file for checking the convergence behaviour of the SCF cycle and for other information related to the ground-state calculation. Please note that the quality of the groundstate calculations (the starting point) plays an important role when calculating G$_{0}$W$_{0}$QP corrections. Therefore one should always check the convergence of results with respect to the groundstate parameters (such as rgkmax, ngridk, etc.) in production calculations. ### 3. GW "single-shot" run Using the data from the previous run as an input, one performs a G$_{0}$W$_{0}$cycle to calculate quasiparticle QP energies. First, one should disable the execution of the groundstate part by changing the attribute do = "fromscratch" to do = "skip" in the groundstate element. ... <groundstate do="skip" ...> </groundstate> ...  To initialize G$_{0}$W$_{0}$calculations, the following block should be present in your input file: ... <gw taskname="g0w0" ngridq="2 2 2" nempty="22" ibgw="1" nbgw="10" > <mixbasis lmaxmb="3" epsmb="1.d-4" gmb="1.0" ></mixbasis> <freqgrid nomeg="32" ></freqgrid> </gw> ...  Let us look closer at the gw element. Attributes and elements used in this example are Parameter Description gw/taskname Specifies the task name. gw/ ngridq Specifies the number of both the k and the q-points used specifically in GW calculations. Notice that these values are independent from the one specified by groundstate/ ngridq. gw/nempty The number of empty states used as an input in GW calculations. Note that this value is independent from the one specified inside the groundstate element. gw/ibgw, gw/nbgw Give the range of resulting quasiparticle states to be calculated. ibgw (nbgw) is the lowest (highest) band index for which the GW correction is calculated. Notice that the numbering of the band indexes is such that the index 1 is the one for the lowest occupied valence band. Furthermore, nbgw must be chosen to be larger than the number of occupied bands. gw/ mixbasis Specifies the parameters for the mixed product basis. gw/ freqgrid Specifies the frequency grid for dynamical quantities. For all available parameters and options and their description, one should check the GW Section of Input Reference. It is interesting to notice that the computational setup given for the mixed-product basis and the frequency grid is rather universal and could be applied for the most of materials without modifications. Now, you can start the calculation by invoking the exciting executable (serial version) $ time excitingser


The main output of G$_{0}$W$_{0}$ run is stored in GW_INFO.OUT and EVALQP.DAT. The former file contains information on the GW program work-flow. In particular, energy band-gap values for KS and QP spectra can be found in the end of this file.

The text file EVALQP.DAT contains all important quantities that are calculated during G$_{0}$W$_{0}$ run. Below, we describe the structure of this file. The line "k-point # 1:" starts the block of data and contains the lattice coordinates of the irreducible k-point and the corresponding Brillouin-zone-integration weight. Then, for each electronic state (within the range determined by the ibgw and nbgw input attributes) one can find the following quantities:

• the starting KS eigenenergies (E_KS);
• the quasiparticle energies as obtained by considering the exchange part of the self-energy only (E_HF);
• the G$_{0}$W$_{0}$ quasiparticle energies (E_GW);
• the diagonal matrix elements of the exchange self-energy (Sx);
• the diagonal matrix elements of the correlation self-energy (Sc);
• the diagonal matrix elements of the underlying exchange-correlation potential (Vxc);
• the energy difference E_HF$-$E_KS (DE_HF);
• the energy difference E_GW$-$E_KS (DE_GW);
• the linearization prefactor $Z_{n\mathbf{k}}$ (Znk).

It is important to note that the zero of the E_HF and E_GW quasiparticle energies listed in EVALQP.DAT is the KS Fermi energy (that can be found, e.g., in GW_INFO.OUT). Therefore, in order to obtain absolute QP eigenenergies one has to add to the data listed in EVALQP.DAT the corresponding KS Fermi energy.

### 4. Quasiparticle band structure

##### i) Band structure plot

Now, we will visualize the results to compare the Kohn-Sham (KS) and quasiparticle (QP) band structures. To calculate them, one should introduce the following changes into the input.xml file.

• After the groundstate block, add the new element block properties as indicated below.
...
<properties>
<bandstructure>
<plot1d>
<path steps="100">
<point coord=" 0.750   0.500   0.250" label="W"/>
<point coord=" 0.500   0.500   0.500" label="L"/>
<point coord=" 0.000   0.000   0.000" label="GAMMA"/>
<point coord=" 0.500   0.500   0.000" label="X"/>
<point coord=" 0.750   0.500   0.250" label="W"/>
<point coord=" 0.750   0.375   0.375" label="K"/>
</path>
</plot1d>
</bandstructure>
<dos
winddos="-0.5 0.5"
nwdos="200"
></dos>
</properties>
...

• In the gw element replace taskname = "g0w0" by taskname = "band" to calculate the QP band structure on the basis of results obtained from the previous G$_{0}$W$_{0}$ run. In this case, Fourier interpolation is used to evaluate the band energies for the k-point path specified in the properties element.
...
<gw
... >
</gw>
...


Finally, run exciting one more time.

$time excitingser &  The output files BAND.OUT and BAND-QP.OUT can now be used to plot the electronic band structure. This can be easily done using the script PLOT-compare-bands.py. To execute it, type $ PLOT-compare-bands.py -15 10 gw

Comparison for GW calculations

$  The script produces a file PLOT.png which you can visualize on the screen with standard tools. The result should look like the following. ##### ii) Density of states Now, we will compute and compare the Kohn-Sham (KS) and quasiparticle (QP) density of states. To calculate them, one should introduce the following changes into the input.xml file. • In the gw element replace taskname = "band" by taskname = "dos" to calculate the QP density of states on the basis of results obtained from the previous G$_{0}$W$_{0}$run. ... <gw taskname="dos" ... > </gw> ...  Now, you can run exciting: $ time excitingser &


The results for the KS and G$_{0}$W$_{0}$ density of states are stored in TDOS.OUT and TDOS-QP.OUT correspondingly. To visualize them one can simply execute the script PLOT-gwdos.py.