v1.0.0 — Space Symmetries in MBPT and SEET
Summary
This is the first stable release of the 1.0 line and the culmination of the v1.0.0-alpha series. The headline change is full symmetry adaptation across the mean-field and post-HF pipeline: space-group representations are now propagated through the k-mesh on the scalar side, and the relativistic (X2C/x2c1e) path carries the matching double-group SU(2) lift so spinor quantities transform correctly across the irreducible Brillouin zone.
The rewritten k-point symmetry engine is not just more correct, it is substantially faster on CPU (up to ~4× on 4x4x4 mesh, with even higher speed-up for denser meshes), and it removes a symmetry-contamination failure mode that could make self-consistent GW diverge. Two long-standing correctness issues (the X2C CPU kernel and black-phosphorus symmetry breaking) are fixed and now verified against a public benchmark suite (see Validation & benchmarks).
Highlights
- Symmetry adaptation. Space-group representations on the scalar path and the double-group SU(2) lift on the X2C/x2c1e path, applied consistently in the HF, GW, and GF2 kernels.
- Faster CPU k-point handling. The rewritten symmetry code cuts CPU wall-clock by ~1.4–4.2× across the benchmark solids, with the gain growing with the number of k-points in the star (Silicon 4×4×4: 4.18× in GW total, 4.25× in GF2 total, at identical energies). Single-k molecular cases show no speedup, as expected.
- X2C CPU kernel fixed. The all-electron full-X2C (spinor) relativistic path was broken on the v0.3.2 CPU kernel; the GPU kernel was already correct. v1.0.0 fixes the CPU path so it matches GPU.
- SEET preprocessing rewrite. kstruct-driven orthogonalization with full Löwdin / symmetric-Löwdin / MO / natural-orbital coverage (Löwdin variants supported for the X2C spinor path), backed by an HF/GW/GF2 orthogonalization basis-invariance regression test.
- Release provenance. All executables now report the build version via
--version, driven byGREEN_RELEASE.txt.
Validation & benchmarks
v1.0.0 was validated against the previous v0.3.2 line on the public green-benchmarks HPC regression suite, on both CPU and GPU. Full write-up and numbers:
SUMMARY.md— hand-written overview.RESULTS.md— per-system observables, all versions.COMPARISON.md— pairwise differences and timing ratios.
Three findings:
-
Same physics, faster. Total energies (
ehf,e1b,ecorr) from v0.3.2 and v1.0.0 agree to the GW/SCF convergence threshold (≲1e-7 Ha) on both CPU and GPU — while v1.0.0's CPU path runs up to ~4× faster on the 4x4x4 mesh. v1.0.0 reproduces v0.3.2 wherever v0.3.2 was correct, so the two fixes below are genuine, not numerical drift. -
Germanium — X2C CPU kernel bug, fixed. On v0.3.2 the CPU X2C (spinor) kernel produced non-physical energies (
gw/ehfoff by ~215 Ha, no band structure); the GPU kernel was already correct. v1.0.0's CPU result now matches GPU. (Scalar-relativisticsfx2c1ewas not affected.) -
Black phosphorus — symmetry contamination resolved. In a self-consistent GW run on black-phosphorous (
Cmce, #64; orthorhombic, non-symmorphic), v0.3.2's Green's function accumulates growing symmetry-breaking error and the total energy diverges (~-52.5 Ha → +20 Ha around iteration 12–14). v1.0.0 stays flat and converges monotonically to ~2e-6 Ha. This is the clearest single demonstration of the release's value.
Bug fixes
- Count the Madelung/Ewald correction once per k-point in the X2C HF kernel.
- Distribute the GW self-energy
tauover the solver object's context. - Optimize X2C HF exchange and fix an
MPI_Bcastnamespace issue; broadcast the self-energy result to all ranks after population on rank 0. - Inchworm impurity solver: don't double-count μ when extracting the self-energy.
- Reset timing statistics after each kernel/solver run so per-iteration timings no longer accumulate (HF, GW, GF2 CPU paths).
What's Changed
- add local integral decomposition by @sdirnboeck in #19
- Seet by @sdirnboeck in #20
- double counting using mbpt by @sdirnboeck in #24
- fix parameter names, remove unused. params by @gauravharsha in #26
- Rebase SEET onto main, and fix critical bug related to number of orbitals in impurity by @gauravharsha in #30
- add extra include for safety by @gauravharsha in #31
- Add k-point shape validation for X_inv_k after IBZ filtering by @yangyu-code with @Copilot in #35
- Fix 4 fatal bugs in inchworm post-processing self-energy update by @yangyu-code in #34
- update energy in seet inchworm loop by @gauravharsha in #36
- add automatic tag creation workflow by @gauravharsha in #41
- Manage version number / branch using GREEN_RELEASE.txt by @gauravharsha in #42
- add owner info to Github App Token by @gauravharsha in #43
- fix gh api command in github green_tag.yaml by @gauravharsha in #44
- Space group symmetries by @gauravharsha in #45
- Seet main merge by @egull in #46
- reducint dependencies of mbpt by @egull in #47
- Fix/context macro conflict by @gauravharsha in #48
- Remove redundant mpi_context parameter from HF solver interface by @gauravharsha in #49
- Apply space-group symmetry transform in X2C GW and HF kernels by @gauravharsha in #50
- Fix C++17 warning: copy structured binding before lambda capture by @egull in #51
- Update GitHub Actions to Node.js 24-compatible versions by @egull in #52
- fix(inchworm): don't double-count mu when extracting self-energy by @gauravharsha in #54
- feat: SEET kstruct migration + orth basis-invariance regression test by @gauravharsha in #53
- fix: reset statistics timings after GW and HF kernels by @gauravharsha in #55
- feat: report GREEN_RELEASE via --version in all executables by @gauravharsha in #56
- Fix MPI-context correctness in the X2C HF and GW CPU kernels by @gauravharsha in #66
New Contributors
- @yangyu-code with @Copilot made their first contribution in #35
- @yangyu-code made their first contribution in #34
- @egull made their first contribution in #46
- @agnieszkajazdzewska performed the end-to-end benchmarking of the code, as reported in https://github.com/Green-Phys/green-benchmarks
Full Changelog: v0.3.1...v1.0.0
