Open susilehtola opened 1 year ago
@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)?
Also, do you have a reference code for this? Code is written, but need something to verify against
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.
There are implementations in PySCF and ERKALE. As a simple check, you can just check that the sum equals the overlap matrix?
This might already be implemented, however... many applications require the evaluation of atomic overlap matrices
$$ S_{\mu \nu}^{A} = \int wA({\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