GauXC icon indicating copy to clipboard operation
GauXC copied to clipboard

Evaluation of atomic overlap matrices

Open susilehtola opened this issue 2 years ago • 4 comments

This might already be implemented, however... many applications require the evaluation of atomic overlap matrices

$$ S_{\mu \nu}^{A} = \int w_A({\bf r}) \chi_\mu ({\bf r}) \chi_\nu({\bf r}) {\rm d}^3 r $$

where $A$ is the atom and $\mu$ and $\nu$ are basis function indices.

An example use case is our generalized Pipek-Mezey orbital localization method, which replaces the original ill-defined Mulliken (or Löwdin) charges with a variety of mathematically well-defined partial charge estimates. It turns out that the localized orbitals are remarkably insensitive to the partial charge method, which can thereby be chosen by computational convenience, such as the Becke charges defined by the above overlap matrices

$$Q_{ij}^{A} = C_{\mu i} S_{\mu \nu} C_{\nu j}$$

We have also extended this method to forming generalized Pipek-Mezey Wannier functions

susilehtola avatar Jul 03 '23 10:07 susilehtola

@susilehtola would an API to return a specific atomic overlap (as opposed to all or a batch of them) suit the needs here (at least to start)? Would it also be desirable to have an API that returns $Q_{ij}^A$ directly given MO coefficients (might make sense to spin that off onto another Issue if desired)?

wavefunction91 avatar Oct 25 '23 19:10 wavefunction91

Also, do you have a reference code for this? Code is written, but need something to verify against

wavefunction91 avatar Oct 25 '23 22:10 wavefunction91

Batching over atoms is fine, as long as you get the matrices separately. I don't think the MO transformation is within the scope of this feature, since it is trivial to achieve with a matrix multiply.

susilehtola avatar Oct 26 '23 12:10 susilehtola

There are implementations in PySCF and ERKALE. As a simple check, you can just check that the sum equals the overlap matrix?

susilehtola avatar Oct 26 '23 12:10 susilehtola