# Introduction to *GW* approximation

## Theory

*GW* approximation is a many-body perturbation theory that describes the electron self-energy, . In a compact form, , which is a convolution of Green’s function () and screened Coulomb interaction (, where is the bare Coulomb interaction). The binaries ` sigma_real.x `

(for systems with inversion symmetry) and ` sigma_cplx.x `

(for systems without inversion symmetry) are aimed to calculate the self-energy . With the inclusion of self-energy, we are able to (easily) calculate the quasiparticle (interacting electrons) band structure of materials.

The electron self-energy is in general non-local, and frequency-dependent. One makes several approximations (need references) and can express the electron self-energy in the following way, i.e. the so-called GW approximation,

,

where . Generally we use non-interacting Green’s function constructed with Kohn-Sham wavefunctions, and we use the RPA dielectric matrix calculated in the previous step to construct the screened Coulomb potential.

The Green’s function reads

,

and the screened Coulomb potential is

.

In DFT, people often use LDA or GGA (note: BGW also supports hybrid functional as starting point) to describe the exchange correlation in a local sense, whereas in the *GW* approximation, the exchange correlation is embedded in the electron self-energy. After we evaluate the matrix elements sandwiched by the Kohn-Sham states, we subtract the contribution from the local exchange-correlation potential , and add the self-energy to the Kohn-Sham eigenvalues,

.

In this way, we get the quasibarticle band structures.

In BerkeleyGW, there are several different options to account for the frequency-dependence and its integral, and this is introduced in the previous section Epsilon. One can use plasmon-pole model to describe the frequency-dependence, and most often we use generalized plasmon-pole model (GPP, this is the default of BerkeleyGW); or directly sampling at different frequencies (either real or imaginary axis) and integrate, and we call this full-frequency calculation.

In GPP, one uses the dielectric matrix at zero frequency (i.e. static limit) and -sum rule model the dielectric behavior at finite frequencies. For a GPP calculation, in BerkeleyGW, we separate the self-energy into two parts: the screened exchange (SEX) term which accounts for the contribution from the holes in the Green’s function, and the Coulomb-hole (COH) term, which accounts for the contribution from the holes in the screened Coulomb potential. The two terms read as

,

,

where is an anti-symmetric spectral function [need reference]. We observe that the first term requires a summation over all occupied states, and it appears to be the bare exchange interaction but instead of bare Coulomb potential, the screened Coulomb potential shows up, therefore the name screened exchange. However, the COH term requires a summation over all bands (occupied plus unoccupied), therefore a careful convergence test is needed w.r.t. number of empty states.

If we neglect the frequency-dependence, i.e. take the static limit, we are doing static COHSEX calculation. Furthermore, (as just touched before) if we use bare Coulomb potential, and consider only the bare exchange term (no COH, as we don’t even have ), we are at the Hartree-Fock level.

In full-frequency calculation, we separate the self-energy into bare-exchange part, and the correlation part . One can directly sample the real axis, or sample the imaginary axis (contour deformatoin).

In BerkeleyGW, we calculate the physical quantities in reciprocal space with plane wave basis set.

## Running tips

BerkeleyGW is designed to efficiently perform massive parallelization, so is `sigma`

. The `sigma`

code is parallelized over bands, and calculate the matrix elements (diagonal, or off-diagonal) one point each time. For a moderate system of few to 10 atoms, the usage of around one hundred to few thousands CPUs is quite efficient. Please read the output carefully to investigate the parallelization report to get a better idea what is the optimal number of CPUs for your particular system. Since the points are calculated one-by-one, you can manually separate the points into several jobs to save human waiting time.