Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

General utility for converting between two basis sets #260

Open
tovrstra opened this issue Apr 3, 2021 · 1 comment
Open

General utility for converting between two basis sets #260

tovrstra opened this issue Apr 3, 2021 · 1 comment

Comments

@tovrstra
Copy link
Member

tovrstra commented Apr 3, 2021

(This was originally mentioned in #146.)

In some cases, it is useful to transform arrays in IOData objects from one basis set to another. A preliminary implementation can be found in #175. A fully general implementation has a few weaknesses, which require some caution:

  • Lack of numerical stability. For two common types of transformations, simple and robust transformations exist, see Decontraction of basis sets #258 and Conversion to Cartesian basis sets #259. One option to reduce the numerical trouble is to make the transformation block diagonal with one atom per block. (This also makes it less general.)
  • When the two basis sets are sufficiently different, the transformation becomes a projection and the orbitals will not remain orthonormal after transformation. An (optional) normalization should be implemeted. Such a renormalization may also clean up some of the numerical artifacts from the previous point but it should not be considered as a safe solution for the numerical issues. Even after cleaning up, there may be data loss due to weak numerics.

This issue depends on #238.

@PaulWAyers
Copy link
Member

@Ali-Tehrani had a very elegant algorithm he found for doing this. His way should be as stable as this can be. So I'd defer this issue to him.

The good news is that it should be possible in a very general way, with options for atom-blocking and renormalization easy possible embellishments. Ill-conditioning should be mainly (always?) associated with large basis sets (near-linear-dependence). In such cases, choosing a sensible (and clearly documented) resolution of the (near) ambiguity does not seem problematic to me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants