# Tutorial

In this section, we briefly introduce GW and GW-BSE theory and their relation to components of the BerkeleyGW code. Then, we guide you through several example GW and GW-BSE calculation designed to teach BerkeleyGW to beginners. The tutorial is organized following the workflow shown above. The BerkeleyGW code consists of four executables: epsilon, sigma, kernel, and absorption. A typical GW calculation involves performing a mean field calculation, then running epsilon followed by sigma. A GW-BSE calculation involves performing a GW calculation and then running kernel followed by absorption. Details of each step are described below:

1. Mean Field: BerkeleyGW supports a large number of mean field codes, including Paratec, Quantum Espresso, PARSEC, SIESTA, Octopus, ABINIT, and RMGDFT. The tutorials are designed to demonstrate how to start from a number of different mean field codes.
2. Epsilon : Computes the RPA deielectric matrix. It takes the mean field wavefunctions as input and outputs the RPA dielectric matrix, which we call epsmat.
3. Sigma : Computes the electron self-energy within the GW approximation. Takes the RPA dielectric matrix and the mean field wavefunctions, exchange correlation, and charge density as input. The output is the GW quasiparticle (QP) energies and related information, such as the QP bandstructure and QP lifetimes.
4. Bethe-Salpeter Equation : Computes the optical properties in two executables:
1. Kernel: Computes the kernel of the Bethe-Salpeter equation on a coarse k-point grid. Takes the RPA dielectric matrix and mean field wavefunctions as input.
2. Absorption: Constructs the BSE Hamiltonian from the Kernel matrix elements, optionally interpolates to a finer k-grid, and diagonalizes the Hamiltonian to obtain electron-hole (exciton) excitation energies, wavefunctions, and optical spectra. Takes the kernel matrix, QP energies (optionally), and mean field wavefunctions as input.

The examples below are adapted from our annual workshop, which we encourage you to attend. BerkeleyGW supports a large number of operating systems and compilers. Precompiled modules are available on NERSC machines. The examples are designed to be run without modification on the Edison supercomputer at NERSC. If you do not have access to Edison, you will need to slightly modify the batch scripts to run on your preferred machine. Places where modification is required are noted in each example.

A full description of the input variables can be found here.