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

Support different types of normalization of the primitives in iodata.basis #261

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

Comments

@tovrstra
Copy link
Member

tovrstra commented Apr 3, 2021

(This was originally discussed in #146.)

At the moment we only have L2 normalization, while many file formats use different conventions. One other common convention is to use unnormalized primitives, e.g. in the WFN and WFX formats. There are also a few variants of L2 normalization, which mostly originate from (incompatible) conventions used internally by other QC codes. At the moment, the conventions are handled by add hoc conversion code in the format modules (see e.g. cp2klog, molden, wfn and wfx). For density basis sets, also other conventions are used, and L1 normalization could make sense. We could facilitate these conversions and eliminate somewhat ugly ad hoc code by making the normalization of the primitives configurable in MolecularBasis class. This class already has a primitive_normalization string attribute, but it is not used yet. A string may also be too limited to reflect the zoo of possibilities. It is also not very informative. Instead we could just create a dictionary with conversion factors from normalized primitives for relevant Cartesian and pure functions. Similarly to how convert_conventions now works, this could be used to switch easily from one convention to another.

@PaulWAyers
Copy link
Member

I think the only options I can think (that are in wide use) are L2 and unnormalized. I know L2 can be a little bit tricky depending on the normalization convention within a contraction. I would tend to say that supporting lots of options is fine (but also a lot of work), but I would err on the side of user-friendliness over generality. Perhaps that also suggests the normalization_conventions dictionary, especially if it harmonizes well with convert_conventions.

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