Customized HF exchange fraction in B3LYP

Dear Psi4 developers,

From your documents, it is clear how to customize HF exchange fraction in a functional where exchange and correlation are separated. For example for BLYP, I have

hfx_func = {
            "name": "hfx_func",
            "x_functionals": {"GGA_X_B88": {"alpha": 1-hfx*0.01}},
            "x_hf": {"alpha": hfx*0.01},
            "c_functionals": {"GGA_C_LYP": {}}

But is there a way to do so for functional that is defined by a “xc_functionals” such as B3LYP? Thanks!


I don’t think so. Specifying x_hf together with xc_functional will result in a warning/error message.
The only option so far is to not use xc_functional and instead specify the x and c components manually.
I would assume this is possible for all pre-defined xc_functionals, but not sure.
For B3LYP it is not problem.

Thanks for your speedy reply!

For B3LYP, I found its exchange and correlation part are below:

   => Exchange Functionals <=

    0.0800   Slater exchange
    0.7200         Becke 88

   => Exact (HF) Exchange <=

    0.2000               HF 

   => Correlation Functionals <=

    0.1900   Vosko, Wilk & Nusair (VWN5_RPA)
    0.8100   Lee, Yang & Parr

Do you know where I can find a dictionary that map these names to the actual keywords I should use in “x_fucntionals” and “c_functionals” block? For example, I can find the naming of the components of BLYP at psi4/ at master · psi4/psi4 · GitHub, but cannot find it for B3LYP at psi4/ at master · psi4/psi4 · GitHub as it simply says “HYB_GGA_XC_B3LYP”.

Since libxc provides the functional we did not make a psi4 dictionary for it.
The components you need to find in Libxc - a library of exchange-correlation functionals for density-functional theory
and then you need to look in the paper (or here the psi4 output) to stitch the correct parts together.

I wrote the dictionary for it below. The input also compares against the reference, so it should be OK I think. (Verify with some larger calculations when you use it for research) Here you can increase HF exchange to make B3LYP* or other variants (like different VWN).

molecule h2o {
0 1
H 1 1.0
H 1 1.0 2 104.5

set {
basis cc-pVDZ

e_ref = energy('b3lyp')

my_b3lyp = {
    "name": "manual B3LYP",
    "x_functionals": {
        "GGA_X_B88": {"alpha": 0.72},
        "LDA_X": {"alpha": 0.08 }
    "x_hf": {
        "alpha": 0.20
    "c_functionals": {
        "GGA_C_LYP": {"alpha": 0.81 },
        "LDA_C_VWN_RPA": {"alpha": 0.19 }
    "description": '  manual B3LYP example \n',

e = energy('scf',dft_functional=my_b3lyp)
compare_values(e_ref,e,8,'B3LYP comparison')
1 Like

Thanks! I tested on a large TMC and the energies match up to the 6 decimal points!

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.