Use of hybrid functionals  [SOLVED]

Total energy, DFT+U, BigDFT,...

Moderator: amadon

Post Reply
Posts: 24
Joined: Tue Aug 27, 2013 9:46 pm

Use of hybrid functionals

Post by bmatt » Tue Aug 19, 2014 10:50 pm

Dear abinit users,

From another post on hybrids, I obtained the correct value to place for the ixc variable to run an scf calculation with HSE06.
Searching online, how would one know this value? Also, what is the proper way to use these features (any other variable decloration needed)?

During my run using HSE06, all of my energies were given as NaN and this is useless. I have properly linked the etsf library because it shows up as fallbacks in my log file. I am using abinit 7.6.2 and run the cf with paw pseudo potentials
If anyone has had this issue or knows what to do, I would very much appreciate it.

Posts: 1
Joined: Mon Oct 13, 2014 12:48 pm

Re: Use of hybrid functionals

Post by ConradSnyder » Mon Oct 13, 2014 1:44 pm

These functionals mix some SCF exchange with the DFT definitions.
B3P91 - uses Becke's exchange functional with part of the Hartree-Fock exchange mixed in, and a scaling factor on the correlation part.
HYBRID a0 ax ac where a0, ax and ac are the three parameters occuring in the above functionals. If you wish to do this the HYBRID directive must follow the standard functional definition.
Other hybrid functionals are B97, B97-1 and PBE0 These have only one parameter - the weight of the exact ie SCF exchange in the functional (and strictly speaking the weight in PBE0 is a theoretically determined constant, not a parameter).

Posts: 24
Joined: Tue Aug 27, 2013 9:46 pm

Re: Use of hybrid functionals

Post by bmatt » Tue Mar 24, 2015 1:31 pm

Hello again users,
I understand the theory behind hybrids and especially HSE06 which mixes short range HF exchange on top of the PBE functional for all ranges.
My problem exists with:
1. even though in the sample test files t41 and t42 in the libxc tests, the value for using the HSE06 functional is 105 or 125 and is also stated again for the variable gwcalctyp on the input variable site which tells the code that perturbative exchange is going to be used (after a KSS file has been created)
Even though this is so, in the log file, when it displays the functional type used, it states PBE0 and when I change the gwcalctyp value to 205 or 225 it then says HSE06...which one is the correct answer?

2. when running abinit-7.6.2 and abinit-7.10.2, using hybrids in the scf procedure with ixc = -428, the correct functional is displayed (HSE06), but it is pretty unstable and highly depends on the value of nband and ecut.
I can get the calculation to work in serial with some tuning of the variables but in parallel the code crashes right after it reads the pseudo potentials and displays the distribution of plane waves over nbands and k points
This problem also occurs for the perturbative method from part 1 above.
Is there some memory issues with running in parallel or do you have to designate certain distributions for parallelization?
I have exhausted all my knowledge of memory optimization in abinit, and any help would be appreciated to be able to run hybrid calculations (scf or perturb) in parallel.

Posts: 24
Joined: Tue Aug 27, 2013 9:46 pm

Re: Use of hybrid functionals  [SOLVED]

Post by bmatt » Sun Dec 27, 2015 4:06 pm

It has been a while but I just wanted to update the forum to maybe help others....
In my experience, HSE06 is only obtainable in abinit (version-7.10.2) with the perturbative approach using the GW portion of abinit...Here is how I got it to work
1. create a KSS file (using norm conserving pseudo potentials) with a dense gamma centered grid. You need this to make a smooth band structure because the GW portion requires explicitly defined k-points.

2. create an input file with the following:
gwcalctyp = 125 #HSE06
# where the "25" means updates on energies and wavefunctions
icutcoul = 5 #short range exchange
rcut = 9.0909090909 #\omega term in HSE06
gwpara = 2
optdriver = 4
kssform = 3

#variables to uptake previously calculated data (KSS file, WFK file, DEN file)
getqps = -1

# variables you will have to adjust to have the run not crash and to converge results
ecuteps = 40.0
ecutwfn = 25.0
ecutsigx = 10.0

#k-point declaration
nkptgw = 1 kptgw= 0.0 0.0 0.0
bdgw = 20 60 20 60
# for nsppol=2
#bdgw = 20 60 # for nsppol=1

Here is where I could not figure out the mpi form so each k-point calculated is run in serial and the kptgw has to be a k-point from the KSS file
I think to run in parallel, you must have to have the same number of empty bands that you do cores, but I have not confirmed this

Hope anyone running calcs with exchange can find this useful and please correct me if anything is wrong

Posts: 13
Joined: Thu Apr 27, 2017 6:27 pm

Re: Use of hybrid functionals

Post by cgs12 » Sun Jul 30, 2017 12:44 am


Thank you so much for your posts. I am also trying to implement exact exchange and hybrid functionals. I have some follow-up questions and would really appreciate it if you could shed some light on it.

1) Do you know which functionals work by simply changing the variable 'ixc' and which functionals can only work under the GW framework? It seems that ixc = 40 (exact exchange) to 42 works fine for a simple system.
2) If we are implementing hybrid functionals, then the pseudopotentials that we use should also be consistent, i.e. we can no longer use the pseudopotentials that are readily available, e.g. Troullier-Martins pseudopotentials which are based on LDA. Did you have to generate a separate set of pseudopotentials for this purpose? If that's the case, how could we go about doing it?
3) Did you end up figuring out how to run the code in parallel, along with the use of these hybrid functionals?
4) Based on other posts, it is mentioned that we won't be able to compute forces and stresses using these functionals? Is this still the case for the most recent version of Abinit?

Thanks in advance!

Posts: 1
Joined: Fri Jul 06, 2018 7:26 am

Re: Use of hybrid functionals

Post by essaybox » Fri Jul 06, 2018 7:29 am

The value for using the HSE06 functional is 105 or 125 and is also stated again for the variable gwcalctyp on the input variable site which tells the code that perturbative exchange is going to be used.

Post Reply