dftlibs / numgrid

Numerical integration grid for molecules.
Mozilla Public License 2.0
47 stars 14 forks source link

Support for more quadratures? #43

Open susilehtola opened 3 years ago

susilehtola commented 3 years ago

numgrid sounds like a promising project, but is handicapped by the limitation to a single angular grid aimed for Gaussian basis sets, and the single Becke partitioning. It would be significantly more useful, if it had all the standard radial quadratures, as well as more modern partitionings.

Are there any plans to expand the project in this direction? API changes will become necessary to allow the user choosing the grid.

bast commented 3 years ago

I am almost ready with a full rewrite to Rust (keeping Python interfaces) so this may also be a good moment to add some API changes.

I would very much like to extend the code for more quadrature schemes and partitioning schemes. Which ones would be the most important to start with in your opinion? If there is some open source reference data when implementing, that would help a lot also.

susilehtola commented 3 years ago

Schemes in a rough order of importance / ease of implementation.

Angular schemes:

  1. Lebedev (you have these; only the biggest rules - which are never used - are from the Lebedev-Laikov paper)
  2. Lobatto, see section II.E of https://doi.org/10.1063/1.469408

Radial schemes:

  1. Lindh-Malmqvist-Gagliardi, you have this already
  2. Krack-Köster, see https://doi.org/10.1063/1.475719 (I like this since it's easy to compute and parameter-free)
  3. MultiExp, see https://doi.org/10.1002/jcc.10211.The paper also presents other grids that may be of interest.
  4. Treutler-Ahlrichs, see https://doi.org/10.1063/1.469408
  5. Mura-Knowles, see https://doi.org/10.1063/1.471749

Partitionings:

  1. Becke (you have this)
  2. Stratmann-Scuseria-Frisch, https://doi.org/10.1016/0009-2614(96)00600-8 (standard in most packages)
  3. Laqua-Kussmann-Ochsenfeld, section III.C of https://doi.org/10.1063/1.5049435

In addition to these, one should also include support for pruned grids, since they may lead to noticeable increases in performance. Support for the SG-0, SG-1, SG-2, and SG-3 standard grids would also be nice.

For several of these, especially the pruning, you can look into the code in Psi4 and PySCF.

susilehtola commented 3 years ago

I am almost ready with a full rewrite to Rust (keeping Python interfaces) so this may also be a good moment to add some API changes.

Btw what do you see as the benefits of Rust? NumGrid is a pretty compact project

bast commented 3 years ago

Thanks for the references! Rust: more speed and fewer bugs :-) See also https://www.nature.com/articles/d41586-020-03382-2.

bast commented 3 years ago

Now after the library rewrite I will soon start extending it to more quadratures. For me first goal is to speed up the space partitioning for larger molecules. Then more radial options.

bast commented 3 years ago

I will soon have the LKO and SSF partitioning schemes in place. Just need to do a bit more testing.