[ANN] Lints.jl - easy, high performance integrals for quantum chemistry


I am pleased to announce the first* release of Lints.jl, a wrapper around the Libint2 Gaussian molecular integral library.

*first meant for use by anyone else is v0.2.0

Molecular integrals are required in quantum chemistry, where they are used to compute energies of reactions, spectra of molecules, and a wide range of other properties. This package makes one of the most complete integral libraries, Libint2, easily available from Julia!

Features include:

  • Overlap, kinetic energy, nuclear attraction, electron repulsion, and dipole moment integrals are all exposed and ready to use. Density fitting is also available!
  • High performance: the Libint2 library, and its predecessor, are used in some of the fastest quantum chemistry codes out there. This package aims to provide that functionality in Julia with as little overhead as possible.
  • Easy to install: The latest “standard” Libint2 library has been cross-compiled with BinaryBuilder.jl, so getting started with Lints.jl is slick. There is one (automatic) build step for the interface code, but the bulky library is pre-compiled and should Just Work :tm: .
  • Cross platform: Works on ARM and x86, AMD and Intel, Linux and macOS. Out of the box. No Windows, sorry. This is not true of all molecular integral libraries, notably SIMINT which has also been interfaced to Julia.
  • More basis sets than you will ever need: Lints.jl comes with a recent download of the Basis Set Exchange https://www.basissetexchange.org/ giving you access to an enormous number of basis sets to play with. With a static download of the database, your code is independent of the uptime of the Basis Set Exchange, and can work without an internet connection. On the other hand, basis sets change and new ones come out, so our cache is likely to get out of date. So, a fresh download will be included in every minor release (0.3, 0.4, etc).

Please feel free to contact me via response to this message, DM, or Github issue if you have any questions or comments.

PR’s welcome! (but it would be good to check first that you are not duplicating work going on elsewhere)

Finally, I will tease a new quantum chemistry program, Fermi.jl https://github.com/FermiQC/Fermi.jl , that is built upon this package. The first release of that package should be in the next week or so.

Special thanks to @vonDonnerstein for unwittingly inspiring this interface with his work in QuantumLab.jl, which also contains a Libint2 interface. Our package is designed to orthogonalize the computation of molecular integrals from a specific implementation of quantum chemistry methods, such as the Hartree-Fock method implemented in QuantumLab.jl.


Really cool! It’s nice to see more quantum chemistry in Julia!

I’m curious why you chose the name Lints.jl instead of Libint2.jl, which it sounds like you are wrapping? I imagine this could lead to some confusion for some people (I actually checked it out because I was 90% sure this was a linter, and didn’t read the full title :smile:).

Haha, good question. I actually thought about it a lot, and decided to go with a different name because there is a substantial amount of code and functionality that is not part of Libint2. Also, I don’t own that project and wanted to keep the name clear for a potential port from C++ to Julia ( hey I can dream!).