Implement NEO-DFT on host
This PR adds functionality to do electron-proton correlation (EPC) functional in GauXC, thus allowing nuclear-electronic orbital (NEO) DFT calculations.
Changes:
-
Modified
loadBalancerto store 2 basis. -
Modified
XCIntegratorto also take aepcfunctional. -
Added
neo_eval_exc_vxcfunction is added. UKS is forced for protonic to ensure high spin configuration for protons. Electronic system can be either RKS or UKS. -
Protonic basis screening, collocation evaluation, xmat evaluation, density evaluation... are all carried out using the existing machinery.
-
Available EPC functionals are:
EPC17_1,EPC18_2,EPC18_1,EPC18_2. These are done using the Builtin backend of ExchCXX (https://github.com/wavefunction91/ExchCXX/pull/38).
References: EPC17-1, EPC17-2, EPC18-1 and EPC18-2 -
EPC17_1, EPC17_2, EPC18_1, EPC18_2 functional is benchmarked against PySCF implementation. Settings: water molecule, H radius set to 52.9 pm, sto-3g/prot-sp basis, RB3LYP + unrestricted EPC functionals, (99,590) Lebedev grid with no pruning, MuraKnowles radial quadrature, and Becke weights. PySCF set to 1e-15 energy convergence, GauXC set to 1e-10 RMSDP convergence
| Functionals | EPC17_1 | EPC17_2 | EPC18_1 | EPC18_2 |
|---|---|---|---|---|
| GauXC | -75.2922851028909 | -75.2315058326807 | -75.2885522845334 | -75.2269730022946 |
| PySCF | -75.2922851084361 | -75.2315058383013 | -75.2885522900691 | -75.2269730078668 |
-
EPC17_2 functional is additionally benchmarked against Chronus Quantum implementation. Settings: COH2 molecule, H radius set to 52.9 pm, cc-pvdz/prot-pb4-d basis, RBLYP + unrestricted EPC17_2 functionals, (99,590) Lebedev grid with no pruning, MurrayHandyLeming radial quadrature, and Becke weights. CQ and GauXC set to 1e-10 RMSDP convergence
CQ: SCF Completed: E(R-) = -114.4472478253 Eh after 192 SCF Iterations GauXC: SCF Completed: E(R-) = -114.4472478253 Eh after 192 SCF Iterations -
Device code NYI
Note that epc17 and epc18 are available in libxc master
NEO DFT PR is ready for review (in-house epc is used right now. API for libxc via exchcxx will come later).
MPI tests are failing at the moment. However, if protonic screening is turned off, then MPI can recover the same energy as single node