IAO numerical comparisons and reproducible examples¶
This page separates three kinds of evidence: published atomic charges,
analytical bond-index normalization, and independent numerical comparisons.
The definitions and supported inputs are in the IAO analysis guide.
All computed values below use the molecular determinant implementation
introduced in commit 366b20d, including all occupied core electrons.
Published charges: match the reference basis¶
Knizia (2013), Table 1 reports several orbital-basis choices and two different minimal references. Its main rows (footnote a) use MINAO. The cc-pVTZ row with footnote c uses Huzinaga MINI, matching vibe-qc’s reference choice. Compare against that row first:
Molecule / atom |
Paper MINI/cc-pVTZ (e) |
vibe-qc MINI/cc-pVTZ (e) |
Computed minus printed (e) |
|---|---|---|---|
CH4 / C |
-0.49 |
-0.500597 |
-0.010597 |
CH4 / each H |
+0.12 |
+0.125149 |
+0.005149 |
HCN / H |
+0.22 |
+0.217465 |
-0.002535 |
HCN / C |
-0.03 |
-0.026190 |
+0.003810 |
HCN / N |
-0.19 |
-0.191274 |
-0.001274 |
The largest absolute difference is 0.01060 e for CH4 and 0.00381 e for HCN. HCN reproduces the printed two-decimal charges. Methane does not reproduce every printed digit. The paper gives only two decimal places; its rounded methane entries themselves sum to -0.01 e. Computed charges are never adjusted to reproduce such a rounded sum.
This is a comparison with published numbers, not an exact same-input reproduction. The paper’s Appendix E describes optimized geometries and says that coordinates are available on request. The supplied article does not include those coordinates. This calculation uses the fixed geometries listed below. The reference family and orbital basis match footnote c, but geometry and the precise reference contractions used in the original calculation have not been independently matched to the author’s input. Do not assign the entire residual difference to geometry without testing it.
The commonly quoted MINAO rows are useful context, with an additional reference-basis difference:
Orbital basis |
CH4 C, paper MINAO (e) |
CH4 C, vibe-qc MINI (e) |
HCN N, paper MINAO (e) |
HCN N, vibe-qc MINI (e) |
|---|---|---|---|---|
def2-SVP |
-0.49 |
-0.472559 |
-0.20 |
-0.182528 |
def2-TZVPP |
-0.52 |
-0.499520 |
-0.21 |
-0.192610 |
For the two larger orbital bases, vibe-qc’s methane carbon charge changes
by 0.00108 e between def2-TZVPP and cc-pVTZ. This illustrates the observed
basis stability for these inputs; it is not a universal error estimate.
The existing test_iao_ibo.py literature regressions use a 0.03 e window
against MINAO rows to accommodate reference/geometry differences. Passing
that window alone is weaker evidence than a comparison with matched input.
Calculation protocol¶
examples/iao_population_comparison.py is the complete reproducible input.
It runs nine calculations through the public run_job API:
System |
Fixed geometry |
Charge / multiplicity |
Method / orbital bases |
|---|---|---|---|
CH4 |
Tetrahedral, C-H = 1.087 angstrom |
0 / 1 |
RHF; def2-SVP, def2-TZVPP, cc-pVTZ |
HCN |
Linear H-C-N, H-C = 1.0655 angstrom, C-N = 1.153 angstrom |
0 / 1 |
RHF; def2-SVP, def2-TZVPP, cc-pVTZ |
H2 |
H-H = 1.4 bohr |
0 / 1 |
RHF/def2-SVP |
H2+ |
H-H = 2.0 bohr |
+1 / 2 |
UHF/def2-SVP |
OH |
O-H = 1.83 bohr |
0 / 2 |
UHF/def2-SVP |
The script uses 1 angstrom = 1.8897261254578281 bohr, conventional
four-index SCF (density_fit=False), an energy convergence threshold of
1e-10, a gradient threshold of 1e-8, and at most 100 iterations.
Analysis uses Huzinaga MINI, symmetric orthogonalization, and separate
occupied spin spaces for UHF. Localization is disabled for every example.
The MINI data are the bundled Gaussian-format coefficients identified as
Basis Set Exchange MINI version 1, with values from GAMESS.
Run from the checkout with generated files outside it:
IAO_RESULTS=$(mktemp -d)
cp examples/iao_population_comparison.py "$IAO_RESULTS/input.py"
OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=1 VECLIB_MAXIMUM_THREADS=1 \
.venv/bin/python "$IAO_RESULTS/input.py" --output-dir "$IAO_RESULTS" \
> "$IAO_RESULTS/comparison.log" 2>&1
The log prints every atom’s charge, the published target where applicable,
the difference, selected bond orders, spins and conservation residuals.
Each job also produces its ordinary .out, .system, population text/JSON,
structured log and citation files. Add --qvf to exercise the QVF charge
member and full vendor payload. The default run requests neither QVF nor
localization. Keep the copied input with these outputs.
Bond orders and spin populations¶
For the chosen convention, an equal-weight doubly occupied bonding orbital has \(B=1\); a single alpha electron has \(B=0.5\); doubly occupied bonding and antibonding orbitals together give \(B=0\). These are analytical determinant checks, obtained from the Wiberg square and number-covariance identity, not transcribed molecular entries from Knizia’s charge table. The public H2 and H2+ calculations above give 1.00000000 and 0.50000000, respectively.
The following are computed example values, not published targets:
Calculation |
Selected IAO-Wiberg bond |
Computed value |
|---|---|---|
CH4 RHF/cc-pVTZ |
C-H |
0.98187870 |
HCN RHF/cc-pVTZ |
H-C |
0.93368414 |
HCN RHF/cc-pVTZ |
C-N |
2.98070067 |
OH UHF/def2-SVP |
O-H |
0.87893501 |
For OH the charges are [-0.34508291, +0.34508291] e and the spin
populations are [+1.04452837, -0.04452837] alpha-minus-beta electrons,
in O,H order. The negative hydrogen spin population reflects polarization;
the spin sum remains one. Across the nine examples, total-charge residuals
were below 7e-14 e, spin-sum residuals below 1e-14, and occupied-space
reconstruction residuals below 6e-15 in the AO metric.
Wiberg’s 1968 paper defines the original bond-index construction, not these MINI/SCF examples. Likewise, the Molpro IBBA manual distinguishes IAO-Wiberg from an unpublished renormalized index. Its reference and orthogonalization options must be matched before comparing numerical results. No published same-input open-shell spin-population or bond-order table is claimed here. Such a benchmark remains a separate validation task.
Independent numerical checks¶
The optional --pyscf flag reruns each SCF, overlap integral and IAO
construction in PySCF. It reads the same orbital and MINI Gaussian basis
files, uses the same geometry, charge, multiplicity and spherical basis
convention, then symmetrically orthonormalizes PySCF’s raw IAOs. Alpha/beta
occupied spaces are treated separately. The output reports maximum absolute
charge, spin and bond-matrix differences plus the total-energy difference;
full PySCF logs are preserved beside the native outputs.
OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=1 VECLIB_MAXIMUM_THREADS=1 \
.venv/bin/python "$IAO_RESULTS/input.py" --output-dir "$IAO_RESULTS/oracle" \
--pyscf --qvf > "$IAO_RESULTS/oracle.log" 2>&1
PySCF is optional and is used only by the example/test oracle. It is never
called by the runtime implementation. Its SCF thresholds are 1e-12 for
energy and 1e-9 for the orbital gradient. Matching the basis data avoids
confounding PySCF’s default MINAO reference with MINI. Agreement tests code
and numerical consistency; it does not remove the unmatched inputs in the
published comparison above.
The focused regression commands are:
OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=1 VECLIB_MAXIMUM_THREADS=1 \
.venv/bin/python -m pytest tests/test_iao_population.py tests/test_iao_ibo.py -q
They also cover complex coefficients, occupied rotations, atom permutation,
rotations within each atom’s IAO block, an independently enumerated Slater
determinant number covariance, empty spin, diffuse and rank-deficient spaces,
unsupported input, and output/citation compatibility. The matched-overlap
PySCF tests isolate the IAO algebra; the example’s --pyscf comparison also
checks independently computed SCF orbitals and integrals.
For the nine runs above, the largest absolute differences against the full independent PySCF 2.14.0 calculation were:
Quantity |
Maximum difference |
Case |
|---|---|---|
Total energy |
3.411e-13 hartree |
CH4/def2-TZVPP |
Atomic charge |
6.809e-10 e |
HCN/def2-TZVPP |
Atomic spin population |
9.190e-10 electrons |
OH/def2-SVP |
IAO-Wiberg matrix entry |
9.261e-11 |
OH/def2-SVP |
At the matched MINI/cc-pVTZ input specifically, the largest charge differences
were 1.176e-11 e for CH4 and 3.751e-10 e for HCN. Both programs therefore
give essentially the same charges at these inputs, including the difference
from the printed methane row. The cause of that literature difference remains
unresolved until the original geometry and reference contractions are matched.
For all nine QVF-enabled examples, the complete analysis/iao.json payload
was identical to the population sidecar’s iao object.