The RPA and RPA+BSE Dielectric functions

This tutorial will go through how the macroscopic dielectric function is calculated. The random-phase approximation (RPA) macroscopic dielectric function can be calculated in lmf using the OPTICS category in the ctrl file; see this page for a detailed description. Whilst the dielectric function in the form produced by lmf is useful for analysis there are two crucial effects missing. The first is the effect of local fields, and the second is excitonic (electron-hole interaction) effects. These effects can be included through use of the Bethe-Salpeter equation for the polarisation. See this page for a background to the theory.

Preliminaries

blm, lmfa, lmf, lmfgwd, lmgwsc are all assumed to be in your path. The source code for all Questaal executables can be found here. You should ensure that the executable bethesalpeter is also in your path.

Tutorial

Start by making a directory lif

$ mkdir lif && cd lif

Structural information about the unit cell is then contained in the file init.lif. Create this file and paste the following

The –gw switch adjusts certain parameters so that a GW calculation can be performed. Now run lmfa to calculate the free-atom density and copy this to basp.lif, as this is the file read by lmf:

$ lmfa ctrl.lif
$ cp basp0.lif basp.lif

Since no local orbitals were found we do not need to re-run lmfa. The next step then is to edit ctrl.lif and pick a suitable -mesh and add the value of GMAX suggested by the output of lmfa.

nit=30
nkabc=5
gmax=9.3

One important thing to note for this particular example are the parameters gcutb and gcutx, these are cut-offs used in the GW. Change these to

gcutb=3.7 gcutx=3.1

blm may choose negative values for these parameters, which are not compatible and must be changed. The values given were 3.6 and 3.0 respectively, however, these particular choices for this particular system may causes a segmentation fault when calculating the RPA polarisation needed to calculate the self-energy.

We are now ready to run our self consistent LDA calculation. Type the following

$ lmf ctrl.lif

This should produce a band gap of about 9.4 eV, which is small compared with experiment ~14.2 eV.

QSGW calculation

We now want to perform a QSGW calculation. To build the input files required by QSGW, type the following

$ echo -1 | lmfgwd ctrl.lif

The main input is GWinput. This file, as it stands, is sufficient for this particular example. We can now perform a QSGW calculation on this system:

$ lmgwsc --code2 lif

Convergence should be reached after 5 iterations (iteration number 4, since counting starts at 0). The gap produced now should be about 16.4~16.5 eV. This is quite high, but can – however – be corrected slightly with a finer k-mesh.

Before we run the bethesalpeter program we need to use lmf to produce the optical matrix elements, see this page for a description of how the optical matrix elements enter in to the expression for the macroscopic dielectric function. To do this we need to ensure the k-mesh used by bethesalpeter is consistent with that used by lmf. To do this run the following command

$ echo 6 | lmfgwd ctrl.lif

We then need to include information in ctrl.lif about which pairs of states etc to calculate the optical matrix elements for. We do this through the OPTICS category, see this page

MODE, LTET, WINDOW and NPTS do not affect the calculation of the matrix elements. FILBND and EMPBND include the upper and lower bounds on the valence and conduction bands for which we calculate the matrix elements and MEFAC determines how the contribution to these matrix elements from the non-local part of the potential is included. We do not include this correction here (it is handled in bethesalpeter, see below) hence MEFAC=0.

which are (in order of appearance): the maximum (in Rydberg) for which the dielectric function is calculated; the minumum ; the number of frequencies; the number of valence states to include in the Bethe-Salpeter equation; the number of conduction states included; LDA energies ARE used to construct the optical matrix elements accounting for a non-local potential; the direction of the perturbing field; Lorentzian broadening (Rydberg) at ; broadening at (broadening can increase linearly); do not read the kernel from a previous calculation; and do not read the diagonalized 2-particle Hamiltonian from a previous calculation. Note that NumValStates and/or NumCondStates can be less than the number of states included in FILBND and EMPBND in ctrl.lif. The valence and conduction states used in the Bethe-Salpeter equation are those closest to the Fermi level. The rest of the states are included in , but included at RPA level. The reason for doing this is the computational expense of solving the Bethe-Salpeter equation.

We are now ready to run a Bethe-Salpeter equation calculation to get the macroscopic dielectric function. To do this type

$ echo 0 | bethesalpeter > out.bse
$ cp eps_BSE.out eps_BSE.outBSE

eps_BSE.out contains parameters used, followed by three columns. The energy (for numOmegaBSE energies from MinOmega_BSE to MaxOmega_BSE) in eV are in column one followed by the real and imaginary parts of the macroscopic dielectric function. The imaginary part determines the absorption. We can vary the broadenings to match experiment. Ensure RestartwithKernel and RestartwithDiagonal are switched on to avoid having to calculate and diagonalize the matrix all over again.

Finally, the reason we copied the output file is so that we can compare this with an RPA . To do this type

$ echo -1 | bethesalpeter

The two outputs can be plotted in a plotting program such as gnuplot. The output from the two calculations above are shown below in the image, along with the experimental spectrum.

Adjust the broadenings to match experiment with RestartwithKernel and RestartwithDiagonal switched on.

If this page has any errors, there is something you think is missing or unclear, or for any other issues, you can create a post here letting us know.