The GW method is one of the most accurate ab initio methods for the prediction of electronic band structures. Despite its power, the GW method is not routinely applied to large scale materials physics or chemistry problems due to its unfavorable computational scaling: standard implementations scale as O(N4) where N is the number of electrons in the system. To develop GW software that can tackle heavy computational load and large memory requirement, we have developed and implemented algorithms that work in real space for the canonical plane-wave pseudopotential approach to electronic structure calculations.
This documentation will explain how to run the OpenAtom GW software with step-by-step instructions and pointers to examples. If you have further questions, comments, issues, or bugs to report, please contact the OpenAtom developer team.
OpenAtom is hosted using git and can be downloaded using the following command:1
git clone https://charm.cs.illinois.edu/gerrit/openatom.git --depth=1
You will also need to download charm++ using the following command:
git clone https://charm.cs.illinois.edu/gerrit/charm.git
At this moment, compiling the GW part is independent from the main ground-state OpenAtom compilation (this may change in the near future). To create the GW executable, go to the src_gw_bse subdirectory and follow the instruction in the README file. Once you compile successfully, two executables (charmrun and gw_bse) will appear in build subdirectory.
This document will use a 2-atom unit cell bulk Si system to explain how to run GW calculations. We strongly recommend users to download examples before proceeding to next sections. Example files with full data sets for small 2-atom unit cells of Si and GaAs are available via the OpenAtom git repository:
git clone https://charm.cs.illinois.edu/gerrit/datasets/gwbse/Si2
git clone https://charm.cs.illinois.edu/gerrit/datasets/gwbse/GaAs2
The Si2 and GaAs2 examples include all input files for DFT calculations (Quantum Espresso files) and OpenAtom GW. The OpenAtom GW output files resulting from running the software can also be found in the output subdirectory to permit for checking.
For the current release, we rely on the Quantum Espresso (QE) software2 to generate ground state wavefunctions and energies. In the example directory (Si2/QuantumEspresso), input files for scf and bands calculations with QE are included. Once bands calculation is done, use our converter (pw2openatom.x) to generate states that OpenAtom can read. The converter is located in external_conversion subdirectory. Follow the instruction in the README there to set up the converter.
To prevent the Coulomb operator from diverging at zero wave vector when computing the dielectric response, you must also separately generate wavefunctions and energies for occupied states with shifted k grids. A small shift is recommended (e.g., (0, 0, 0.001) in our example in lattice units).
OpenAtom GW is designed for large systems which do not require dense k grid. Hence, no symmetries are considered in OpenAtom GW. If you wish to run a small system with many k points, we recommend to using another other GW software which has symmetry reduction built-in such as BerkeleyGW3 .
For educational purposes, we describe in more detail an example of 2-atom Si with 8 k points here and 52 bands. The key steps for preparing the GW calculation are:
A description of the input options for pw2openatom.x is available at the end of the README file.
In this first release, we have not implemented a converter that calculates V xc matrix elements. For V xc matrix elements, we encourage users to run the Quantum Espresso pw2bgw.x program with the vxc_flag set to be on. In our next release, we will provide our own converter which calculates V xc matrix elements.
Here are the steps to follow in order to compute the V xc elements using Quantum Espresso:
where n1 and n2 are the smallest and largest band indices for which you want the Vxc matrix elements.
If off diagonal elements are desired, use the vxc_offdiag_nmin and vxc_offdiag_nmax keywords instead.
User must create 4 input files to run OpenAtom GW.
This file tells the code how many k points are used and what they actually are. The format of this file follows below:
nk
kx1 k
y1 k
z1 w
k1
...
kxnk k
ynk k
znk w
knk
sx sy sz
nk1 nk2 nk3
nk - number of k points
kx ky kz - k point coordinates (crystal, i.e. lattice, coordinates)
wk - weight
sx sy sz - shift vector (crysta/lattice coordinates)
nk1 nk2 nk3 - positive integers specifying density of k grid along each reciprocal lattice
vector
Example of klist.dat with 8 k points:
8
0.000000000 0.000000000 0.000000000 0.125
0.000000000 0.000000000 0.500000000 0.125
0.000000000 0.500000000 0.000000000 0.125
0.000000000 0.500000000 0.500000000 0.125
0.500000000 0.000000000 0.000000000 0.125
0.500000000 0.000000000 0.500000000 0.125
0.500000000 0.500000000 0.000000000 0.125
0.500000000 0.500000000 0.500000000 0.125
0.0 0.0 0.001
2 2 2
This file tells the shape of the simulation cell and reciprocal lattice vector. The format of this file follows below:
la
a1x a1y a1z
a2x a2y a2z
a3x a3y a3z
b1x b1y b1z
b2x b2y b2z
b3x b3y b3z
la - lattice parameter (Bohr radius [atomic] units)
a1, a2, a3 : lattice vector (units of la)
b1, b2, b3 : reciprocal lattice vector (Cartesian coordinates in units 2π∕la)
Example of lattice.dat:
10.2612
0.000000000 0.500000000 0.500000000
0.500000000 0.000000000 0.500000000
0.500000000 0.500000000 0.000000000
-1.000000 1.000000 1.000000
1.000000 -1.000000 1.000000
1.000000 1.000000 -1.000000
This file sets which matrix element to calculate for Σ, ⟨ψn1| Σ |ψn2⟩. The format of this file is:
nlm
l1 m1
l2 m2
...
lnlm mnlm
nlm : How many lm pair that a user wants to calculate
l : band index of ψl
m : band index of ψm
Example of band_list.dat file:
2
4 4
5 5
Simulation keywords file sets relevant variables used for GW runs. The example of simulation keywords file is below. Full list of keywords and arguments are explained in the next section.
To run OpenAtom GW, copy charmrun and gw_bse in the build subdirectory to the dataset subdirectory (Si2) and run with this command:
You can change the number of processors by changing p1 to pX where X is the number of processors. The output using 1 processor run is available in output sdirectory.
The simulation keyword file contains 5 subsections (we call them meta-keywords):
Each meta-keyword requires keywords and key-arguments.
If multiple options are available, boldface indicates a default value.
— planned for the near future—
\num_spin : number of spin
\coulb_trunc_opt : Coulomb truncation options.
— planned for the near future—
\screened_coulomb_cutoff{1} : Energy cutoff for screened coulomb interaction (in Ryd).
\PP_num_mode{1} : number of Plasmon-Pole modes to be summed over
Following options can be used to read and write P Matrix, Epsilon and Epsilon Inverse matrices to file. Each row of a matrix is read from or written to a file with suffix _row${row_index}.