logo

Main menu

HomeNewsPeopleDownloadYambo-pyRun the codeInput file
Structure Verbosity Yambo (>=3.4.0) Yambo (older) Ypp Variables
TutorialsDocumentationPublicationsEventsContactsTest-Suite Forum

The Wikipedia Page of Yambo Yambo@Wiki

Fortran cafe The Fortran Cafe'

Bethe-Salpeter wine The Bethe-Salpeter-Equation (BSE) wine

A street entitled to Yambo in Rome
A bar entitled to Yambo in Rome
A bar entitled to Yambo in Rome Yambo road, bar & restaurant

BZ kpoint grid generator (ypp -k k)

Default options

bzgrids#BZ Grid
K_grid#K-grid analysis
cooIn= "rku"#Points coordinates (in) cc/rlu/iku/alat
cooOut= "rku"#Points coordinates (in) cc/rlu/iku/alat
%GWKpts
0.000|0.000|0.000|# GW K-point grid
%
#NoWeights#Do not print K-points weight
#ForceUserPts#Do not check the correctness of the user points
 
K-points units
cc Cartesian coordinates
rlu reduced lattice coordinates or crystal coordinates
alat Cartesian coordinates in units of the lattice parameter "a"
iku integer reduced lattice units (internal Yambo units)

Example: How to calculate GW correction in a generic k-point

First of all you have to perform a converged GW calculation as explained in the GW tutorial on a regular k-points grid. Then suppose you want the GW correction on another k-point not included in the previous grid for example the point k=(0.1,0.1,0.0).
You put the new k-point in the BZ k-point grid generator (ypp -k k), then run ypp and it will produce a new set of k-points, something similar to:
 .....
 .....
 <---> User K-points : 1
 <---> Reducing & Expanding the 12 k-points ...done
 <---> Reduced K-grid points: 12
       ---------- Reduced K-grid ----------
   0.0000000   0.0000000   0.0000000   0.0085470
   0.3333333   0.0000000   0.0000000   0.0512821
   0.3333333   0.3333333   0.0000000   0.0170940
  -0.2333333   0.1999999   0.0000000   0.1025641 
   0.1000001  -0.4666667   0.0000000   0.1025641
   0.4333333  -0.1333333   0.0000000   0.1025641
  -0.5666667   0.2000001   0.0000000   0.1025641
   0.0999999  -0.1333333   0.0000000   0.1025641
  -0.2333333   0.5333334   0.0000000   0.1025641
  -0.2333333  -0.1333335   0.0000000   0.1025641
   0.4333334  -0.4666666   0.0000000   0.1025641
   0.1000000   0.2000000   0.0000000   0.1025641  1
 <---> [07] Game Over
The first k-points (in blue) belong to the old grid (in the above example the first 4 k-points), while the red ones are obtained by shifting the previous regular grid of the desired k-point, indicated by the number 1. In practice ypp generates a second grid, that maintains the same distances between the k points (the q-vectors q=k-k'), but it is centered in a different point of the BZ. The results can be visualized in the picture below, where the black points are the old grid and the red the new one.
Once you have the new k-points put them (the red and the blue ones) in your DFT code (if you are using ABINIT uncomment the flag NoWeights because ABINIT does not require the weight for each k-point), and re-calculate, in a different folder, the band structure on these points. Notice that you have to use the same parameters of the initial grid, namely the same number of bands, and the same grid for the density, just in the non-self consistent calculation you will add manually a new list of k-points. Once you have calculated the new wave-functions convert them in the Yambo format (with a2y or p2y).
Then run the setup with the command yambo -i -V kpt, a new variable will appear in your input:
setup                        # [R INI] Initialization
% IkSigLim
 1 | 12 |                     # [KPT] QP K-points indices range
%
IkXLim= 4                    # [KPT] X grid last k-point index
% QptCoord                   # [KPT] [iku] Q-points coordinates (compatibility)
%
set the variable IkXLim to the number of the last point of the initial not-shifted grid, in this example IkXLim=4. Run the setup, and then copy the file containing the dielectric constant SAVE/ndb.pp (or SAVE/db.pp if you do not use NetCDF) from the previous not-shifted grid calculation to the new SAVE folder. Now you are ready to calculate the quasi-particle corrections on the new k-points using the same G0W0 input just selecting the point you are interested in at the end of the file.
......
%QPkrange                    # [GW] QP generalized Kpoint/Band indices
  12|  12|  1| 10|
%
......
If everything works fine Yambo will calculate the GW corrections on the new k-points without recalculate the dielectric constant, but just printing a warning message
<01s> [WARNING]Wrong serial number for ./SAVE//ndb.pp
to let you know that the dielectric constant has been calculated in another run.