Which B97 is which?

I am trying to replicate the results of this study; See the supplementary information for a list of DFTs (it’s open access I think).

The paper lists the following DFTs:
B97 - A global hybrid GGA, citation A. D. Becke, The Journal of Chemical Physics 107, 8554 (1997).
B97-D - A local GGA, citation S.Grimme, Journal of Computational Chemistry 27, 1787 (2006).
B97-Danything - All of these are listed as local GGAs based on B97-D.

LibXC has the following DFTs:
GGA_XC_B97 - Same citation as B97 above; Seems to be the same fnctl
GGA_XC_B97_D - Same citation as B97-D above; Seems to be the same fnctl

Psi4 is consistent in its definitions of B97-D* – These are all based on B97-D, as suggested by the paper.

However, things start getting weird when I look for B97. First of all, there is a duplicate definition of B97-D2 in the libxc functionals file. Then, it seems that B97 in LibXC and most papers has been renamed to B97-0. So I could just add an alias from B97->B97-0? Not quite… A comment in the code says:

# empirical_dispersion_resources.dashcoeff now defines 'b97' (<-'b97-d') as Grimme's GGA
#   functional, so one could just define
#       funcs.append({
#            "name": "B97",
#           "xc_functionals": {
#               "GGA_XC_B97_D": {}
#           }})
#   and let the dict_builder fill out -D2, -D3(BJ), etc. Leaving the
#   explicit definitions below so plain 'b97' isn't further confused.

…which doesn’t make any sense, since B97 is a different functional from B97-D.

I’m reading this to mean that QCEngine renamed B97 → B97-0, and B97-D → B97 so that the dashcoeffs automatically generate properly. Hence, any of my code should refer to B97 as B97-0. Is this correct?

I’m glad I left that comment or I’d never have remembered the trouble :slight_smile: . Yeah, “B97” is ambiguous – here’s an excerpt from Density-functional approaches to noncovalent interactions: A comparison of dispersion corrections (DFT-D), exchange-hole dipole moment (XDM) theory, and specialized functionals | The Journal of Chemical Physics | AIP Publishing

d. B970-D.
Employing a purely empirical approach to Exc construction, Becke proposed B97,(Ref. 76) a hybrid (χx = 0.1943) power-series expansion of gradient correction terms with coefficients optimized to fit G2/97 (Refs. 77 and 78) thermochemical data. The name for the dispersion-corrected form of this functional, B97-D, has been supplanted by Grimme’s recent reparameterization and dehybridization (vide infra).(Ref. 18) As this latter version is expected to be more widely used in the current literature, the original functional will be denoted in this paper as B970 (B970-D for its DFT-D variant).

So there doesn’t exist a useable GGA B97 without a dispersion correction. And the hybrid GGA may or may not be used with a (different) dispersion correction. Psi4 aims to trigger the confusion early by not defining an energy("b97") on the grounds that it’s better to be mystified than to run a study with a mistaken method.

Searching “B97-” at DFT Functionals may help in presenting all at once. If you want the original hybrid GGA, B97-0 is it. psi4/psi4/driver/procrouting/dft/libxc_functionals.py at master · psi4/psi4 · GitHub confirms the matchup with Libxc.

lmk if still unclear.