GW correction on an arbitrary point of the Brillouin zone with Yambo

Here I show how to calculate GW correction for a generic k-point not included in the original grid used to perform a GW calculations using Yambo 4.2.
This method allows to obtain the GW correction without the need of recalculate the full dielectric constant used in the initial calculation.
As example I will take 2-dimensional hexagonal boron nitride, but the method is general and valid for solids of any dimension.

Notice that in yambo 4.2.0 there is a small bug so you have to overwrite the files

src/bz_ops/bz_samp_indexes.F and ypp/k-points/k_grids.F
with these two correct ones (k_grids.F and bz_samp_indexes.F).
This bug will be corrected in the new versions.

Here the steps for the calculation of GW correction on an arbitrary point of the BZ

  1. Start a standard GW calculation with Yambo with a give k-points grid, for example 6x6x1 in this case (DFT and Yambo inputs dft_inputs.tgz yambo_inputs.tgz)
  2. Generate a shifted grid that contains the point you are interested in with the command ypp -k k, for example the points (0.12345, 0.12345, 0.0), in this case ypp will generate a new grid with 28 points. (Notice that this grid contains the old one 7 k-points plus the shifted one 21 k-points)
  3. Recalculate wave-functions on this new k-points set, using the same number of bands of the initial calculation ( DFT_shifted.tgz )
  4. Read with the wave-functions and then using the command yambo -i -V kpt for the setup. In the input setup change the variable IkXLim to the number of k-points in the original grid, 7 in this case IkXLim = 7
  5. Copy the dielectric constant of the old calculation SAVE/ndb.pp* in the new SAVE/ folder
  6. Calculate the GW on the point we are interested in, for the example the point (0.12345, 0.12345, 0.0) corresponds to the k-point number 28.



Leave a Reply

Your email address will not be published. Required fields are marked *