Getting correlation energy contribution of BEEF-vdW

Queries about input and output files, running specific calculations, etc.


Moderators: Global Moderator, Moderator

Post Reply
Message
Author
benjamin_shi
Newbie
Newbie
Posts: 4
Joined: Thu Mar 13, 2025 3:06 pm

Getting correlation energy contribution of BEEF-vdW

#1 Post by benjamin_shi » Mon Nov 10, 2025 2:07 am

Dear VASP forum members,

I am trying to obtain the correlation energy contribution from BEEF-vdW; both the non-local vdW dispersion portion and the energy from the BEEF correlation functional. My system is a metallic system if it matters

Currently, to get the non-local dispersion portion, I read the WAVECAR (from a standard BEEF-vdW calculation) and set:
ALGO = Eigenval
NELM = 1
GGA = BF
LUSE_VDW = .FALSE.
LASPH = .TRUE.

To get the BEEF correlation energy, I set:
ALGO = Eigenval
NELM = 1
GGA = BF
LUSE_VDW = .FALSE.
LASPH = .TRUE.
ALDAX = 0.0
AGGAX = 0.0
AEXX = 0.0
ALDAC = 0.5 # 0.5 in first run then 1.0 in second run
AGGAC = 0.5 # 0.5 in first run then 1.0 in second run

For the above, I ran first at 50% only correlation energy then 100% only correlation energy to first the actual correlation component based on their difference (x2).

Is this the appropriate way to get the correlation energy component? I'm not sure whether ALGO = Eigenval is the correct choice or whether I should perform a non-self-consistent calculation by setting ICHARG=11.

Thank you very much for any help!

Best wishes,
Benjamin


fabien_tran1
Global Moderator
Global Moderator
Posts: 502
Joined: Mon Sep 13, 2021 11:02 am

Re: Getting correlation energy contribution of BEEF-vdW

#2 Post by fabien_tran1 » Tue Nov 11, 2025 3:20 pm

Hi Benjamin,

In principle, using ALGO=Eigenval and NELM=1 works for extracting components of the energy. However, for the particular case of GGA=BF (BEEF functional) I can see in the code that the parameters AGGAX and AGGAC are not used, which is unfortunately not mentioned in the VASP manual. This is something that I will fix for the next VASP release.

The alternative solution is to use the implementation of BEEF in Libxc, which, by chance, is implemented with exchange-correlation (GGA_XC_BEEFVDW) and only exchange (GGA_X_BEEFVDW). The steps are as follows.

1) Self-consistent calculation (see Nonlocal vdW-DF functionals):

Code: Select all

GGA = LIBXC
LIBXC1 = GGA_XC_BEEFVDW
LUSE_VDW = .TRUE.
ZAB_VDW = -1.8867
LASPH = .TRUE.
LWAVE = .TRUE.

2) One-iteration calculation for extracting the BEEF correlation:

Code: Select all

ALGO = Eigenval
NELM = 1
GGA = LIBXC
LIBXC1 = GGA_X_BEEFVDW
LUSE_VDW = .TRUE.
ZAB_VDW = -1.8867
LASPH = .TRUE.
LWAVE = .FALSE. #To preserve the WAVECAR from step 1.

3) One-iteration calculation for extracting the non-local dispersion:

Code: Select all

ALGO = Eigenval
NELM = 1
GGA = LIBXC
LIBXC1 = GGA_XC_BEEFVDW
LUSE_VDW = .FALSE.
ZAB_VDW = -1.8867
LASPH = .TRUE.
LWAVE = .FALSE. #To preserve the WAVECAR from step 1.

Then, the two components of the correlation energy are obtained by calculating the difference between the total energies ("free energy TOTEN" in OUTCAR).


benjamin_shi
Newbie
Newbie
Posts: 4
Joined: Thu Mar 13, 2025 3:06 pm

Re: Getting correlation energy contribution of BEEF-vdW

#3 Post by benjamin_shi » Tue Nov 11, 2025 4:39 pm

Hi Fabien,

Thank you very much for looking into this!

Regarding your point about AGGAX not being read by the GGA=BF option. Does this also affect if I try to create hybrid versions of BEEF-vdW through options like AEXX=0.25?

If that's the case, if I wanted to create (non-self-consistent) hybrid versions of BEEF-vdW, would I have to then use the Libxc version (instead of GGA = BF) and do something the code below to extract the exact-exchange component?

Code: Select all

ALGO = Eigenval
NELM = 1
GGA = LIBXC
LIBXC1 = GGA_X_BEEFVDW
LHFCALC = .TRUE.
AEXX = 0.50
LUSE_VDW = .FALSE.
ZAB_VDW = -1.8867
LASPH = .TRUE.
LWAVE = .FALSE. #To preserve the WAVECAR from step 1.

fabien_tran1
Global Moderator
Global Moderator
Posts: 502
Joined: Mon Sep 13, 2021 11:02 am

Re: Getting correlation energy contribution of BEEF-vdW

#4 Post by fabien_tran1 » Tue Nov 11, 2025 8:44 pm

Indeed, an hybrid functional can not be constructed using GGA=BF, since the BF exchange would not be multiplied by AGGAX=1-AEXX. Libxc has to be used, and below is the example with AEXX=0.25:

Code: Select all

XC = GGA_X_BEEFVDW LDA_C_PW GGA_C_PBE
XC_C = 1.0 0.6001664769 0.3998335231
LHFCALC = .TRUE.
AEXX = 0.25
LUSE_VDW = .TRUE.
ZAB_VDW = -1.8867
LASPH = .TRUE.
LWAVE = .TRUE.

See Eq. (4) and \(\alpha_c\) in Table III of http://doi.org/10.1103/PhysRevB.85.235149 to understand the semilocal part. Other examples are shown at XC. The example that you showed seems incomplete since BEEF correlation is ignored.


benjamin_shi
Newbie
Newbie
Posts: 4
Joined: Thu Mar 13, 2025 3:06 pm

Re: Getting correlation energy contribution of BEEF-vdW

#5 Post by benjamin_shi » Tue Nov 11, 2025 9:59 pm

Thank you very much for the rapid response! I should've clarified that my original code snippet was mean to allow me to get different levels of (hybrid) exchange contributions after having obtained the correlation energy from the previous code snippets you provided.


fabien_tran1
Global Moderator
Global Moderator
Posts: 502
Joined: Mon Sep 13, 2021 11:02 am

Re: Getting correlation energy contribution of BEEF-vdW

#6 Post by fabien_tran1 » Tue Nov 11, 2025 10:20 pm

Ok, but the precise procedure depends on the goal. If it is to obtain the total energy non-self-consistently, then only one ALGO=Eigenval calculation is necessary (the functional has to be fully specified in the INCAR). If the different components of the XC energy are required for analysis purpose, then several ALGO=Eigenval calculations are required.


Post Reply