Band structure calculations in QE using hybrid functionals

In recent years the interest in hybrid functionals (that is the incorporation of parts of Hartree-Fock exchange in calculations based on common approximations of exchange-correlations such as LDA, GGA and so on) has steadily increased owing to its improvement over most common functionals, especially when it comes to band-gap calculation of extended solids – see for example this work for a comparison. Quantum Espresso now offers a variety of hybrid functionals (for a complete list see the header of funct.f90) but currently the code can only use hybrid functionals for self-consistent calculations. The reason being that:
The problem is quite fundamental, because in order to get the Fock operator at a certain k-point you need the wavefunctions on a grid that is commensurate with it, this can only be done self-consistently. (L. Paulatto)
But there is a quite elegant solution via maximally localized Wannier functions. If you worked with wannier functions before you know they required the “full grid” (conveniently generated using the tool kmesh.pl) but a recently introduced tool allows to “unfold” the SCF calculation of the reduced grid to the full grid using the executable open_grid.x. An example is provided with recent versions of QE as well. In the following I will use this approach to improve the band-gap of MgO. Using PBE pseudopotentials the band-gap is underestimated at about 4.3 eV but using the HSE hybrid the band-gap can be improved to about 7 eV, which is within acceptable range of the experimental value of ~7.7 eV. The workflow is fairly straightforward:
  1. run a (converged) SCF calculation with input_dft=’HSE’ and a number of empty bands. You have to ensure convergence with respect to the usual parameters (k-points, cutoff, …) AND the mesh for the Fock operator (nqx)
  2.  unfold the reduced grid onto the full grid using open_grid.x
  3.  wannierize the obtained wave-functions using wannier90.x and plot the band-structure along a desired high symmetry path
The wannierization is by far the most tricky part in this particular example but by projecting on O:p and Mg:s one can accurately describe  the valence band and an additional single conduction band. For the resulting band-structure see the figure below.
Figure 1. Comparison of the band-structure of MgO on PBE level (purple) and the corresponding wannierzation (grey) as well as the final HSE hybrid calculation with vastly improved band-gap of 7.4 eV (blue)
So this is actually quite straight-forward. please note that in above calculation the Fock operator was calculated on a very coarse 1x1x1 grid. The calculation on such a coarse grid actually seems to over-estimate the band-gap and a converged energy can be obtained on a 6x6x6 nqx grid with ~6.7 eV. The entire calculation can be run using the attached script – I hope you find it helpful!

22 thoughts on “Band structure calculations in QE using hybrid functionals

    1. Hello latticedynamics,
      I wish you know if you are able to do the phonon calculation. If yes I will be glad if you will share the codes with us

      Like

  1. Hi Christoph,

    thanks for the tutorial and references; it was very insightful. I was wondering how to plot the results. We essentially have to harvest the orbital eigenvalues and match with the kpts file from open_grid.x right?

    Like

  2. Dear zww4855, could you let me know what exactly you want to plot? The bands? The easiest way would be to let wannier90 do the work by using bands_plot = .true. in the win file and then plot the prefix_band.dat

    In my example I get quite nice bands, at least close to the Gamma point; if you want to improve the bands you probably have to get better MLWFs!

    HTH!
    Chris

    Like

  3. Hi Christoph,

    Thanks for sharing your experience of hybrid functional band structure calculation!

    I have a problem with the script of open_grid.x , everytime the script will show the segmentation fault when I tried to unfold the reduced grids obtained by paw pseudopotentials. However, it works fine with the results obtained by the NC pseudo, do you know why? Or can the open_grid.x grid only deal with the results from NC pseudo?

    Thanks!
    Ruishen

    Like

      1. Dear Hepsibah, open_grid.f90 is in the source directory of PP/src – could you check if it is still there. I can see it on my recent installation of QE 6.5!

        Like

  4. Honestly, I don’t think it’s only an issue with PAW PP. I’m using norm-conserving ones (pbesol-nc), and I’m still getting a segmentation fault when running open_grid.x:

    ————————————————————————–
    mpirun noticed that process rank 41 with PID 0 on node n006.cluster.com exited on signal 11 (Segmentation fault).
    ————————————————————————–

    Do you know what may be the issue?

    Like

    1. My input scf file looks like this:

      &control
      calculation = ‘scf’,
      prefix = ‘pa’,
      verbosity = ‘high’,
      pseudo_dir = ‘/home/ccevallos/pslibrary.1.0.0/pbesol/PSEUDOPOTENTIALS’,
      outdir = ‘./tmp’,
      wf_collect=.true.
      /

      &SYSTEM
      ibrav = 0,
      nat=4,
      ntyp=2,
      ecutwfc=100.00,
      ecutrho=1000.00,
      occupations = ‘fixed’,
      input_DFT=’PBE0′,
      nqx1=1,
      nqx2=1,
      nqx3=25,
      /

      ATOMIC_SPECIES
      C 12.011 C.pbesol-nc.UPF
      H 1.00784 H.pbesol-n-nc.UPF

      CELL_PARAMETERS {angstrom}
      10.000000000000000 0.000000000000000 0.000000000000000
      0.000000000000000 10.000000000000000 0.000000000000000
      0.000000000000000 0.000000000000000 2.46

      ATOMIC_POSITIONS (angstrom)
      C -0.014436109 0.000000000 -0.008945780
      C 0.633731142 0.000000000 1.185927865
      H -1.102040351 0.000000000 -0.004392100
      H 1.721345317 0.000000000 1.181410015

      K_POINTS automatic
      1 1 25 1 1 1

      Like

  5. Dear Chris, thanks for the wonderful tutorial.

    I just want to say, that it would have been much better if the .wim and the other wannier input file contained the detailed comments. So that we might have used them for our system easily!

    Thanks,
    Haseeb

    Like

  6. Thank you so much for attaching the script for carrying out HSE calculations!! I have 2 errors. I don’t know how to proceed. I am new to QE. Can you kindly tell me what to do? Any help in this regard would be greatly appreciated!!!

    After carrying out SCF calculation and proceeding for open_grid.x I get this error
    Error in routine pw_readschemafile (1):
    xml data file not found
    The xml data file is available in the output directory generated by SCF calculation still I get this error!

    Wannier too I get an error
    Exiting…….
    No AgO.eig file found. Needed for disentanglement

    Can you kindly help me…
    THANK YOU!!!!

    Like

    1. I have received several messages about this and it seems that there is a bug in recent versions of PWSCF regarding this; I think I used 6.4 compiled with Intel for the initial test, I would recommend you try that version first!

      Like

  7. Thank you so much Prof!! I’ve run the SCF, extracted k-points using kmesh.pl, executed wannier but I end up with an error in pw2wannier which states
    Error in routine pw_readschemafile (1):
    xml data file not found

    Is the workflow right. Can k-points be extracted using kmesh rather than opengrid. Thank you so much for taking your time to reply!!

    Like

  8. I GOT THIS ERROR IN EXECUTING pw2wannier90.x

    ##
    Checking info from wannier.nnkp file

    – Real lattice is ok
    – Reciprocal lattice is ok
    Something wrong!
    numk= 144 iknum= 74

    Error in routine pw2wannier90 (144):
    Wrong number of k-points
    ##

    Like

    1. Hi Menna, do you mean a description of the contents of the input file? There is only one file to download which contains all the steps as a simple bash script.

      scf.in is the input file of the self consistent calculation done using pw.x
      opengrid.in is the input for open_grid.x which writes the KS orbitals for the complete k-point grid in real space. This also writes the file for the pw2wannier step bypassing the non-SCF calculation. The mgo.win file is the usually wannier90 input file.

      HTH!
      Chris

      Like

  9. Dear Chris. Thank you very much for the elaborations. I have question on how do I implement HSE06/HSE03 in quantum espresso? As I can see in you example provided (attached) you used HSE in general.

    Like

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.