Repository navigation
Add diffuse basis sets (6-31+G*, 6-31++G**, aug-cc-pVDZ, def2-SVPD) - #148
Merged
Merged
Conversation
Anions and radical anions need diffuse functions; the menu had none. Each new set sits next to the set it extends. PySCF accepts all four names and the 6-31+G(d) / 6-31++G(d,p) spellings. - config: SUPPORTED_BASIS_SETS gains the four; DIFFUSE_BASIS_SETS and is_diffuse_basis() (both Pople notations). - PyFock's basis subset is unchanged, so its menu is unaffected. - Basis card adds a one-line "Diffuse" marker; educational notes explain diffuse functions and nudge an anion on a non-diffuse basis. - Help topic: "Anions need diffuse functions" paragraph, 6-31+G(d) row, def2 "D" suffix. - SLURM BASIS_FACTORS (and so the quantui-batch site constants) and the calc_log basis-function table cover the new sets (counts from PySCF). - Docs: methods.md, features.md, README, apptainer README, copilot-instructions. CHANGELOG entry. - tests/test_diffuse_basis.py; the H == He table check exempts 6-31++G** (PySCF puts no diffuse s on He). Contributions: - Claude (Opus 5.5): code edits, review, and conceptual discussion - Jonathan Schultz: overall vision, planning, review, and orchestration Co-authored-by: Jonathan Schultz <nccu-schultz-lab@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The hand-typed _BASIS_FUNCTIONS table disagreed with PySCF's Mole.nao for 75 element/basis entries: all of def2-TZVP (H 14 vs 6, C 30 vs 31), Li/Be and Na-Ar in 6-31G*, 6-31G**, cc-pVDZ, cc-pVTZ and def2-SVP, and Al-Ar in 3-21G and 6-31G. count_basis_functions feeds n_basis into the time estimator, so these skewed the n_basis-scaled estimates. Every entry is now PySCF's spherical AO count (QuantUI never sets mol.cart). test_basis_function_table_matches_pyscf checks the whole table against PySCF; the diffuse-set-only version of that check moves into it. Old perf-log records keep the n_basis they were logged with; noted in the CHANGELOG. Contributions: - Claude (Opus 5.5): code edits, review, and conceptual discussion - Jonathan Schultz: overall vision, planning, review, and orchestration Co-authored-by: Jonathan Schultz <nccu-schultz-lab@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Adds four diffuse basis sets to QuantUI for anion and radical-anion calculations, where diffuse functions are essential for accurately describing loosely held extra electrons. Each set is positioned next to its parent basis in the menu and is available with PySCF (PyFock's menu is unchanged).
Key Changes
Configuration & Discovery
6-31+G*,6-31++G**,aug-cc-pVDZ, anddef2-SVPDtoconfig.SUPPORTED_BASIS_SETSconfig.DIFFUSE_BASIS_SETSfrozenset andconfig.is_diffuse_basis()function to identify diffuse sets (including Pople parenthesis aliases like6-31+G(d))pople_notation_alias()to handle new Pople diffuse setsUser Guidance
Computational Resources
calc_log._BASIS_FUNCTIONS(verified against PySCF 2.14)BASIS_FACTORSinslurm_utils.pyfor memory scaling:6-31+G*(2.5),6-31++G**(3.0),aug-cc-pVDZ(4.0),def2-SVPD(3.5)test_basis_function_table_matches_pyscf()guards against future driftEngine Support
Testing
tests/test_diffuse_basis.py, 242 lines) covering:Implementation Notes
6-31+G*/6-31+G(d)and6-31++G**/6-31++G(d,p)are treated as equivalent6-31++G**is the only basis where H and He differ in function count (H 6, He 5 due to the second+adding diffuse s on H only)Mole.naoand validated by CI