[WIP] Add cusp correction based on atomic orbitals #4901
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This implements the cusp correction scheme of Manten and Lüchow ( J. Chem. Phys. 115, 5362–5366 (2001) https://doi.org/10.1063/1.1394757 ).
The existing cusp correction scheme in QMCPACK is based on correcting molecular orbitals. This does not interact well with orbital rotation (one would need to recompute the correction after every rotation). Correcting individual atomic basis functions would be a better fit with orbital rotation.
This PR uses a script ("compute_cusp_correction.py") to compute the parameters and write them to an HDF file. The QMCPACK code reads those parameters and evaluates corrected orbitals.
This is a minimal implementation to prototype the idea.
The design should be improved for actual use. The GaussianCombo class should not be modified. Most likely a wrapper class (GaussianComboWithCusp?) should be created that evaluates the cusp function for r < r_c, and calls GaussianCombo otherwise. The one tricky part is that not all the orbitals needs to modified - only the 1s- and 2s-type orbitals. The storage of cusp parameters in the HDF file may need to change to reflect the design.
It has been tested with C_2 and cc-pv{d,t,q,5}z basis sets, and works with orbital rotation.
Testing with H2O yielded some problems:
What type(s) of changes does this code introduce?
Delete the items that do not apply
Does this introduce a breaking change?
What systems has this change been tested on?
desktop
Checklist
Update the following with a yes where the items apply. If you're unsure about any of them, don't hesitate to ask. This is
simply a reminder of what we are going to look for before merging your code.