Loading...
Searching...
No Matches
Provenance register

This register makes provenance review measurable. Each row is a module that another computational materials science code also implements, and records three things about it:

  1. Published sources — the papers (and equations, where the code names them) the implementation is written from, as cited in Q3's own source today.
  2. Validation — the gates and tests that check its numbers.
  3. Side-by-side review — who read the implementation next to the code it might derive from, when, against what, and with what result.

The third column is the one no automated check can fill. A wording search finds red-flag phrases; it does not find carried-over structure (PROVENANCE.md § 4.4). The review procedure, and the rule that a review is a research session done by someone who did not write the code, are in PROVENANCE.md § 3.

Register

Paths are relative to the repository root. "Not cited in the source" means the module names its method but cites no paper for it; those gaps are listed under Citation gaps.

Module Code Published sources Validation Reviewer Date Compared against Result
PAW/USPP augmentation and D-matrix src/layer_3_representation/pseudopotential/ultrasoft/, src/layer_3_representation/pseudopotential/paw/compensation_charge.hpp, src/layer_4_computation/paw/one_center/ (d_matrix.hpp, energy.hpp, densities.hpp) Vanderbilt, PRB 41, 7892 (1990), Eqs. (11), (18) and (20) (overlap operator, augmented density, Q_ij(r)); Laasonen, Pasquarello, Car, Lee & Vanderbilt, PRB 47, 10142 (1993), Eqs. (12)–(13) (effective potential and the D-matrix integral), (27)–(28) and (32) (L-resolved Q_ij^L and its radial transform); Blöchl, PRB 50, 17953 (1994), Eqs. (16)–(21) (one-center densities, the E = Ẽ + E¹ − Ẽ¹ split) and (24) (his moments, which include the nuclear charge); Kresse & Joubert, PRB 59, 1758 (1999), Eqs. (5)–(7) and (22)–(27) (one-center densities and energies with a pseudized core, moments, compensation charge), (44)–(47) (D_ij) and (61)–(62) (compensation-function shape, unit moment). The shape's wavenumbers differ from their Eq. (63): see Open questions. tests/unit/layer_4_computation/paw/one_center/test_energy_and_d_matrix.cpp (OneCenterDMatrixTest.IsTheDerivativeOfTheOneCenterEnergy, a finite-difference gate; OneCenterDMatrixTest.GgaDerivativeIdentityHolds); tests/unit/layer_3_representation/pseudopotential/planewave/ultrasoft/internal/test_charge_density_augmentation.cpp; tests/unit/layer_3_representation/pseudopotential/paw/test_compensation_charge.cpp; tests/validation/test_qe_energy_comparison.py (test_qe_energy_comparison, test_qe_paw_energy_comparison, against Quantum ESPRESSO 7.5 + LibXC 7.0.0); tests/validation/test_paw_irreducible_wedge_consistency.py — — — not yet reviewed
Force and stress augmentation terms src/layer_5_properties/forces/planewave/pseudopotential/ultrasoft/internal/augmentation.hpp, src/layer_5_properties/stress_tensor/planewave/pseudopotential/ultrasoft/internal/augmentation.hpp Force: Laasonen, Pasquarello, Car, Lee & Vanderbilt, PRB 47, 10142 (1993), Eq. (43), third term, with Eqs. (38) and (61); the header also derives it from the structure-factor derivative. Stress: the Q_ij(G) expansion it differentiates is the Fourier transform of Eq. (27) of the same paper, with the radial transform of Eq. (32) (the header's earlier credit to Vanderbilt, PRB 41, 7892 (1990) stays); strain derivative in the formalism of Nielsen & Martin, PRB 32, 3780 (1985). tests/validation/test_paw_pressure_and_gamma_forces.py (pressure is −dE/dV of Q3's own energy, origin invariance of the stress, Γ-only forces are −dE/dx); tests/validation/test_paw_forces_and_stress.py (analytic forces against central finite differences on ultrasoft and PAW datasets, full zone and irreducible wedge) — — — not yet reviewed
Symmetry src/layer_1_structure/symmetry/symmetry.hpp, src/layer_1_structure/symmetry/operation.hpp, src/layer_4_computation/paw/one_center/occupation_symmetrization.hpp Space-group detection is delegated to the spglib library, cited as its documentation asks: Togo, Shinohara & Tanaka, Sci. Technol. Adv. Mater.: Methods 4, 2384822 (2024). Q3's own irreducible-wedge reduction and symmetrization cite no paper. tests/unit/layer_1_structure/symmetry/test_symmetry.cpp (ReduceKpointsInternalUsesActualCrystalSymmetryNotBravaisLattice checks Q3's reduction against spglib's; vector symmetrization under reduced symmetry); tests/unit/layer_1_structure/symmetry/test_operation.cpp; tests/validation/test_screw_axis_wedge_consistency.py; tests/validation/test_paw_irreducible_wedge_consistency.py; tests/validation/test_stress_baseline.py (test_low_symmetry_reduction_matches_the_explicit_full_zone) — — — not yet reviewed
k-point grids src/layer_1_structure/reciprocal_space/kpoints_grid.hpp, src/layer_1_structure/reciprocal_space/kpoint_neighbor_shells.hpp Monkhorst & Pack, PRB 13, 5188 (1976) (no equation number cited). Neighbor shells: Marzari & Vanderbilt, PRB 56, 12847 (1997), Eq. (B1) (completeness condition). tests/unit/layer_1_structure/reciprocal_space/test_kpoints_grid.cpp (counts, weights summing to 2, points in the zone); tests/unit/layer_1_structure/reciprocal_space/test_kpoint_neighbor_shells.cpp; tests/unit/layer_1_structure/symmetry/test_symmetry.cpp (ReducedGeneratedGridsPreserveDimensionsShiftsWeightsAndReduction); tests/validation/test_supercell_folding_consistency.py — — — not yet reviewed
Ewald src/layer_4_computation/effective_potential/internal/electrostatic/ewald_summation.hpp, src/layer_5_properties/forces/planewave/internal/ewald.hpp, src/layer_5_properties/stress_tensor/planewave/internal/ewald.hpp P. P. Ewald, Ann. Phys. 369, 253 (1921), in all three headers; the stress header also cites Nielsen & Martin, PRB 32, 3780 (1985). tests/unit/layer_4_computation/effective_potential/internal/electrostatic/test_ewald_summation.cpp (EwaldTest.SiliconEwaldEnergy against a reference value; lattice-image invariance); tests/unit/layer_5_properties/forces/planewave/internal/test_ewald.cpp; tests/unit/layer_5_properties/stress_tensor/planewave/internal/test_ewald.cpp; tests/validation/test_stress_baseline.py (test_ewald_tensor_is_the_gradient_of_the_ewald_energy, test_gamma_ewald_energy_and_stress_are_storage_invariant, test_low_symmetry_stress_and_every_component_match_quantum_espresso) — — — not yet reviewed
Broyden mixing src/layer_4_computation/iterator/internal/mixing/reciprocal_space/broyden.hpp, src/layer_4_computation/iterator/internal/mixing/preconditioner/ D. D. Johnson, PRB 38, 12807 (1988) (modified Broyden); Kerker, PRB 23, 3082 (1981) (preconditioner); Raczkowski, Canning & Wang, PRB 64, 121101(R) (2001) (local Thomas–Fermi preconditioner). No equation numbers cited. Placing the preconditioner before the history is documented in the header as Q3's own choice. tests/unit/layer_4_computation/iterator/internal/mixing/reciprocal_space/test_broyden.cpp (ConvergesTowardFixedPoint, NonUniformMetricWeightsProduceHandVerifiedResult, TwoSpinChannelsConvergeWithMagnetizationMetric); tests/unit/layer_4_computation/iterator/internal/mixing/preconditioner/test_kerker.cpp, test_local_thomas_fermi.cpp; end to end through every SCF case in tests/regression/parity_matrix.yml and tests/validation/test_qe_energy_comparison.py — — — not yet reviewed
Davidson src/layer_4_computation/diagonalizer/planewave/davidson.hpp, src/layer_4_computation/diagonalizer/planewave/internal/subspace_manager/ E. R. Davidson, J. Comput. Phys. 17, 87 (1975), used in block form (all bands expanded together). No dedicated unit test of the iteration (tests/unit/layer_4_computation/diagonalizer/planewave/test_factory.cpp covers construction only). Checked end to end by tests/validation/test_qe_energy_comparison.py, tests/validation/test_band_structure.py, tests/validation/test_gpu_energy_parity.py and tests/validation/test_mpi_band_parallelism.py — — — not yet reviewed

Citation gaps

Found while seeding the register. Each is a module that implemented a published method without citing it; the fix is a citation in the module's header, written in the approved form of PROVENANCE.md § 4.1, after checking the reference against the paper itself. All six were closed on 2026-10-21, each reference checked against the paper's own bibliographic record and, where the row asked for equation numbers, against the paper's text.

Module Missing citation Status
Ewald (energy, force, stress) The Ewald summation Closed 2026-10-21: P. P. Ewald, Ann. Phys. 369, 253 (1921), in all three headers.
k-point grids Monkhorst–Pack meshes Closed 2026-10-21: H. J. Monkhorst & J. D. Pack, PRB 13, 5188 (1976), in kpoints_grid.hpp.
Davidson The block Davidson method Closed 2026-10-21: E. R. Davidson, J. Comput. Phys. 17, 87 (1975), in davidson.hpp.
Stress (augmentation and rest) The Nielsen–Martin stress formalism Closed 2026-10-21: O. H. Nielsen & R. M. Martin, PRB 32, 3780 (1985), in the stress-tensor entry point, the Ewald and augmentation stress headers and the gradient-correction stress headers; the entry point also cites PRB 32, 3792 (1985) for the plane-wave expressions, and the gradient-correction headers cite A. Dal Corso & R. Resta, PRB 50, 4327 (1994), for the gradient-corrected term, which the 1985 papers (written for the local-density approximation) do not contain.
Symmetry spglib Closed 2026-10-21: A. Togo, K. Shinohara & I. Tanaka, Sci. Technol. Adv. Mater.: Methods 4, 2384822 (2024), the reference spglib's README asks users to cite, in symmetry.hpp.
All PAW/USPP rows Equation numbers for each term Closed 2026-10-21: equation numbers from Vanderbilt (1990), Laasonen et al. (1993), Blöchl (1994) and Kresse & Joubert (1999) in each header the two rows name; see the rows above. One question this raised is open, below.

The validation column has one gap of the same kind: the Davidson iteration has no unit test of its own, so a defect in it is found only through end-to-end energies.

Open questions

  • Compensation-function wavenumbers. src/layer_3_representation/pseudopotential/paw/compensation_charge.hpp describes its shape as the Kresse–Joubert construction. The form matches their Eq. (61), a sum of two spherical Bessel functions normalized to unit moment by Eq. (62), but the wavenumbers do not: Q3 takes them from the zeros of j_L and uses the coefficients for the unit moment and a zero slope at the radius, while their Eq. (63) takes them from the zeros of j_L′ and uses the coefficients for the unit moment and g_L = 0 at the radius. Both vanish smoothly at the radius; the functions differ. The header now states the difference. Whether the parity gates the header cites are sensitive to it is a question for a person, not a comment change.

Recording a side-by-side review

A review is a research session (PROVENANCE.md § 3), done by someone who did not write the module. It may read GPL source; it never opens proprietary source. It writes no code: a defect it finds is fixed later, in a separate implementation session.

When the review is done, fill in the row's last four columns in a pull request of its own:

  • Reviewer — the person, or for an AI session the person who ran it and the tool, so that "did not write the code" can be checked against the module's history.
  • Date — the date the review finished, as YYYY-MM-DD.
  • Compared against — the code and version read (for example "Quantum ESPRESSO 7.5"), or "published sources only" when no implementation was read. Name no proprietary engine here; a proprietary engine's source is never read, so it is never what a review compares against.
  • Result — no structural correspondence found, or findings with a link to the issue that tracks them. A finding is fixed by rewriting the code, never by deleting its provenance comment (PROVENANCE.md § 4.3).

A row whose module is later rewritten goes back to not yet reviewed: the review covered the code as it was, not the code as it is.

Adding a module is the same pull request that adds the module, with its review columns at not yet reviewed.