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. 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!

20 thoughts on “Band structure calculations in QE using hybrid functionals”

1. Thanks for sharing!! Very nicely described

I would like to try if phonon calculation can be performed for more accurate epsilon results.

Like

1. Abdul says:

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

2. zww4855 says:

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

3. 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

4. Ruishen says:

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 Ruishen,

This seems to be an open (?) problem: https://gitlab.com/QEF/q-e/issues/109

I also have to admit that I rarely use PAW as I am quite satisfied with the PPs from the ONCV library which are “almost as soft” as PAW/US (well,.. “almost”)! Until this is resolved I think PAW cannot be used with open_grid.x

HTH!
Chris

Like

2. C.Hepsibah Priyadarshini says:

Where can I download open_grid.x. I am not able to find it.

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

5. Caterina says:

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. Caterina says:

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

6. Haseeb Ahmad says:

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

7. Hepsibah says:

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):
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

8. Hepsibah says:

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):

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

1. Hi guys, I haven’t used this in a while, I will try to repeat the tutorial with the newest version of QE tomorrow and let you know 🙂 sorry for the slow response.

Like

9. Mukesh JaKHAR says:

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. ajvarblagi says:

Please check that the prefix in the pw2wannier90.x input file is the pw prefix with “_open”.

Like

10. Menna Hasan says:

Thank you for this tutorial, would yo please upload the description of the input files.
Thanks

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

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