wavefunction91 / IntegratorXX

Reusable DFT Grids for the Masses
BSD 3-Clause "New" or "Revised" License
13 stars 9 forks source link

Include tabulated Hartree-Fock wave functions for atoms #71

Open susilehtola opened 1 year ago

susilehtola commented 1 year ago

Description

Atomic densities are necessary for certain algorithms.

One possibility, used in some codes is to use Slater atomic densities, which are empirical exponential fits of the observed electron density. However, I have not found up-to-date data for such an implementation, but it can be added later.

A perhaps better alternative is to use Slater-type orbital wave functions from the literature, which should be relatively accurate. This PR is meant to include these tabulations in a reasonable fashion.

wavefunction91 commented 1 year ago

Required for #60

susilehtola commented 1 year ago

The code is now in .cpp files. Should these be headers as well?

wavefunction91 commented 11 months ago

@susilehtola Refresh my memory - what's left here? Decisions on source organization? Functionality? My only concern about checking in what's here is that, by itself, it's not terribly interesting, but when its combined with e.g. a weight partitioning scheme, then its in scope. Might need to be merged with #70 or at least held off until that's checked in and added when we add an atomic partitioning that needs it.

susilehtola commented 11 months ago

In addition to use in the Delley partitioning, #60, atomic densities are also needed for the adaptive Molpro grid, https://github.com/wavefunction91/GauXC/issues/51.

Atomic densities could also be useful for the adaptive determination of atomic radial grids, since the quadrature error is atom and functional dependent, and the quadrature errors are similar for HF and SCF wave functions; one would then only have to define an energy threshold. It could also be useful to port the code I currently have in https://github.com/JFurness1/AtomicOrbitals to C++ because running the total energy convergence plots we introduced in J. Chem. Phys. 157, 174114 (2022) takes a while in Python... These features would just require writing a Libxc interface, which could be compiled as an optional binary. What do you think?

wavefunction91 commented 11 months ago

@susilehtola Do you mean to move this kind of database / evaluator functionality to the AtomicOrbitals repo? Or to add that C++ implementation here? I think that the former could be much cleaner - if that can be coupled with a proper CMake harness, it could just be pulled in to IntegratorXX as a dependency.

susilehtola commented 11 months ago

AtomicOrbitals is a pure Python package. I was thinking of including the evaluator here as an optional binary, but that code can of course live somewhere else like a new project. However, the atomic wave functions should be in IntegratorXX since we need them for several planned features!

susilehtola commented 11 months ago

OK, now the code should be working. I get the same energies with the C++ implementation as with AtomicOrbitals.

Now the question is how do you want to interface this into the atomic partitioning generation. Also, I guess some tests should be added.