Tuning the range separation for range separated hybrids

The optimal range separation parameter gamma yields a HOMO energy corresponding to the ionization potential (IP). The optimal gamma will differ from molecule to molecule. Scanning over a number of gamma’s and then further refining is a typical task for which python scripting with PLAMS can make your life easier.

To get you started with tuning range-separation hybrids (RSHs) for your own systems of interest, we provide here a (python) example script to tune LCY-PBE for the push-pull system p-Nitroaniline. In ADF2019 only RSHs with Yukawa switching, available in XCFun, are amenable to changing gamma. So we will work with LCY-PBE, which differs from the LC-wPBE with error function switching. Yukawa switching actually has higher accuracy for atomization energies and Rydberg excitations, as shown by Akinaga and Ten-no.

Run the PLAMS script from command line, e.g. $ADFBIN/plams gammascan.py > gammascan.out

The script first defines the target to optimize. It minimizes simultaneously the difference between HOMO and IP for the neutral and the anion system, the latter being a proxy for optimizing the LUMO as close as possible to the fundamental gap, following the suggestion of Kronik and coworkers.

Then the job type is defined and the molecule read from the Molecule database shipped with the ADF Modeling Suite. We start with a large stride in gamma-space, followed by a refinement around the found minimum, and next a further refinement.

Remark: ADF uses a fit method to calculate the Coulomb repulsion integrals and range separated hybrid integrals. For the bond energy a first order fit correction term is included, however this is not the case for the HOMO energy. Since the HOMO energy is used in the optimization it is recommended is to use a good numerical quality.

The first optimum value for 0.2-0.3-0.4-0.5 is found to be 0.5:

gamma  J
0.2000        0.04833711
0.3000        0.02569572
0.4000        0.00927650
0.5000        0.00402627
Optimal gamma value: 0.5000

The second optimal value is 0.47 and this did not change in the last refinement:

gamma         J
0.4400        0.00408026
0.4700        0.00183261
0.5000        0.00402627
0.5300        0.00708774
0.5600        0.01007175
Refined optimal gamma value: 0.4700

gamma         J
0.4500        0.00299303
0.4600        0.00214585
0.4700        0.00183261
0.4800        0.00223755
0.4900        0.00305807
Refined optimal gamma value: 0.4700

Make sure to reach out to our support team if you have any questions or problems about scripting for tuning RSHs or for similar tasks which could benefit from automation.