Literature review, periodic GDF for vibe-qc¶
Authoritative reference for the native-GDF feature work. Commissioned
2026-05-09 from a separate Claude chat; the transient commissioning
brief was retired in the 2026-05-17 archive sweep. Current implementation
status lives in handovers/HANDOVER_GDF_OUTSTANDING.md.
The results below resolve the open algorithmic question that blocked
slice 3c at the end of the previous session.
Headline findings (read this if nothing else)¶
PySCF’s default for pure-GDF runs is now RSGDF (Ye & Berkelbach 2021), not the CCDF algorithm of Sun et al. 2017. RSGDF is also strictly easier to implement than CCDF, no compcell, no AO-pair multipoles, no inclusion-exclusion bookkeeping. vibe-qc should implement RSGDF as the canonical periodic-GDF path.
Switch the Lpq fit from Cholesky to eigendecomposition + threshold (Sun 2017 §III.B). Cholesky fails on larger aux bases even with a correct metric; truncating tiny eigenvalues (
linear_dep_threshold = 1e-9) is the principled handling.DOI corrections to apply across the codebase docs:
Sun et al. 2017 (Gaussian and plane-wave mixed density fitting):
10.1063/1.4998644(NOT 1.5005184).Ye & Berkelbach 2021 (RSGDF):
10.1063/5.0046617in JCP 154, 131104 (NOT JCTC 17, 4189).
RSGDF algorithm (the new implementation target)¶
Range-separate the Coulomb kernel itself, not the densities:
SR part: decays as \(\exp(-\omega^2 r^2)\) at large \(r\). The lattice sum \(\sum_T (P_0\,|\,\mathrm{erfc}(\omega \cdot)/|\cdot|\,|\,Q_T)\) converges absolutely with no compensation needed. libint exposes this as
Operator::erfc_coulomb, already used by vibe-qc incompute_nuclear_erfc_lattice(cpp/src/lattice_integrals.cpp:144).LR part: \(\widehat{\mathrm{erf}(\omega r)/r}(G) = (4\pi/G^2) \exp(-G^2/(4\omega^2))\). Decays as \(\exp(-G^2/(4\omega^2))\) in reciprocal space → small G-mesh suffices. Computed analytically via Gaussian Fourier transforms.
Parameter \(\omega\): typical 0.1-0.4 bohr⁻¹. Recommended choice \(\omega \approx \min(0.4, 0.5/r_{\rm cut})\) where \(r_{\rm cut}\) is smallest nearest-neighbour distance (Ye 2021).
G = 0 handling: omitted (charge-neutral assumption); divergent monopole-monopole piece cancels against the nuclear background. For 2D/1D systems the treatment changes, defer to PySCF’s
pyscf/pbc/df/aft.pyfor the truncated-Coulomb low-dim version.
Why RSGDF over CCDF for vibe-qc¶
One unified kernel split applies to both 2c metric AND 3c tensor. No separate compcell construction, no per-AO-pair multipole bookkeeping.
libint operators already exposed (
erfc_coulombavailable).Analytical Gaussian FTs are simple (closed form, no iterative schemes).
Default in PySCF means our parity reference uses the same algorithm.
Reported speedup: ~10× over CCDF for typical 3D solids (Ye 2021, Table II).
Trade-off: one new parameter \(\omega\) to tune; documented heuristic works for typical solids.
CCDF remains a fallback if \(\omega\) choice is awkward (very large lattice constants, low-dimensional systems). vibe-qc should ship RSGDF as the v0.7.4+ default and treat CCDF as a research project.
Final fit¶
After SR + LR assembly:
\(J(\mathbf k) = U \Lambda U^\dagger\), drop modes with \(\lambda <\)
linear_dep_threshold (default \(10^{-9}\) per Sun 2017 Fig. 2; the
choice matters, \(10^{-12}\) reintroduces noise, \(10^{-7}\)
over-truncates), then form
This is the CDERI tensor consumed by the SCF driver.
Validation oracle plan¶
The full lit-sweep §6 lays out three published reference suites beyond PySCF for cross-validation:
System |
Method / basis |
Source |
DOI |
|---|---|---|---|
MgO, NaCl, LiH (rock-salt) |
HF / Gaussian, CRYSTAL |
Doll 2002 |
10.1016/S0010-4655(01)00172-2 |
LiH, LiF, MgO |
HF + MP2 / multiple bases, CRYSCOR |
Usvyat 2007 |
10.1063/1.2768359 |
Diamond, LiF, MgO, BN |
HF + MP2 / cc-pVnZ-solids, PySCF RSGDF |
Ye & Berkelbach 2022 |
10.1021/acs.jctc.1c01245 |
Diamond |
HF, MP2, CCSD / plane-wave, VASP |
Booth 2013 |
10.1038/nature11770 |
Concrete test plan: MgO HF/sto-3g vs PySCF (already have); MgO HF/pob-tzvp vs Doll 2002 + Usvyat 2007 (independent oracles, real basis); LiF HF/cc-pVDZ-solids vs Ye & Berkelbach 2022. If all three agree to \(10^{-4}\) Ha/cell, implementation is validated.
Reference list with corrected DOIs¶
Primary, required for the implementation¶
Sun et al. 2017 (CCDF + MDF). J. Chem. Phys. 147, 164119. DOI: 10.1063/1.4998644. §II.A-§II.C derive the SR/LR split, compensating-charge construction, recovery formulas. §III.B + Fig. 2: linear-dependence calibration.
Ye & Berkelbach 2021 (RSGDF). J. Chem. Phys. 154, 131104. DOI: 10.1063/5.0046617. The actual implementation target. Read first.
Ye, Berkelbach et al. 2021 (screening estimators companion). J. Chem. Phys. 155, 124106. DOI: 10.1063/5.0064151. Tight distance-dependent estimators for SR integrals, read second.
Ye, Berkelbach et al. 2023 (PySCF production defaults). arXiv:2302.11307. Documents
cell.precision-based threshold selection and k-point screening choices that the journal papers don’t cover.
Foundational, cite in code comments / docs¶
Whitten 1973 (original Coulomb-metric DF). J. Chem. Phys. 58, 4496. DOI: 10.1063/1.1679103.
Dunlap, Connolly, Sabin 1979 (variational DF formulation; quadratic error property). Int. J. Quantum Chem. 16, 81. DOI: 10.1002/qua.560160202.
Eichkorn, Treutler, Öhm, Häser, Ahlrichs 1995 (modern atom-centred RI-J). Chem. Phys. Lett. 240, 283. DOI: 10.1016/0009-2614(95)00621-A.
Weigend 2008 (def2-universal-jkfit; what vibe-qc bundles). J. Comput. Chem. 29, 167. DOI: 10.1002/jcc.20702.
Foundational, periodic Coulomb structure¶
Saunders, Freyria-Fava, Dovesi, Salasco, Roetti 1992 (multipole decomposition + lattice-sum convergence). Mol. Phys. 77, 629. DOI: 10.1080/00268979200102671.
Harris 1975 (zero-monopole decomposition for Gaussians). Chapter in Theoretical Chemistry: Advances and Perspectives vol. 1 (Academic Press). Hard to fetch online.
Ewald 1921 (the original lattice-sum split). Ann. Phys. 369, 253. DOI: 10.1002/andp.19213690304. In German; modern restatement in Allen & Tildesley App. F.
Alternative algorithms (for context)¶
VandeVondele et al. 2005 (GPW; CP2K’s Quickstep). Comput. Phys. Commun. 167, 103. DOI: 10.1016/j.cpc.2004.12.014. Plane-wave-grid Coulomb instead of Gaussian aux. Different paradigm.
Burow, Sierka, Mohamed 2009 (Turbomole CFMM periodic). J. Chem. Phys. 131, 214101. DOI: 10.1063/1.3267858. Continuous fast-multipole on Gaussian aux. Reference for the third independent algorithm.
Aux basis design (pob-aux follow-up)¶
Stoychev, Auer, Neese 2017 (AutoAux). J. Chem. Theory Comput. 13, 554. DOI: 10.1021/acs.jctc.6b01041. Generates aux from any orbital basis automatically.
Lehtola 2021 (AutoAux contraction via SVD). J. Chem. Theory Comput. 17, 6886. DOI: 10.1021/acs.jctc.1c00607. Reduces AutoAux output size while preserving accuracy.
Hellweg, Rappoport 2015 (def2 aux design philosophy). Phys. Chem. Chem. Phys. 17, 1010. DOI: 10.1039/c4cp04286g.
Ye & Berkelbach 2022 (cc-pVnZ-style solids bases + matched aux, pseudopotential). J. Chem. Theory Comput. 18, 1595. DOI: 10.1021/acs.jctc.1c01245.
Peintinger, Vilela Oliveira, Bredow 2013 (pob-tzvp orbital basis). J. Comput. Chem. 34, 451. DOI: 10.1002/jcc.23153. No matching pob-aux exists; AutoAux + linear-dependence pruning is the recommended path for v0.7.x+. Hand-tuning a pob-aux remains paper-worthy follow-up.
Validation oracles (HF energies on solids)¶
See “Validation oracle plan” table above for DOIs. Doll 2002, Usvyat 2007, Ye & Berkelbach 2022, Booth 2013.
Loose ends, where the literature defers to source code¶
Exact
drop_eta/linear_dep_thresholddefaults: PySCF computes fromcell.precisionrather than the values in the paper. Readpyscf/pbc/df/df.py:make_modrho_basisfor current defaults.2D/1D treatment of the \(G=0\) Coulomb pole: see Sundararaman & Arias PRB 87, 165122 (2013), DOI: 10.1103/PhysRevB.87.165122.
k-point-dependent screening cutoffs: not in the journal papers; see arXiv:2302.11307.