Supported Configurations
Honest status of what works, what is limited, and what is not ready for production use in the current release. Three tiers:
Green – tested and fully working.
Yellow – works in limited cases; convergence may be finicky.
Red – needs testing or has a known limitation.
The user-facing list of changes is in CHANGELOG.md.
Headline feature: non-orthogonal contact handling
The big change in this release is proper treatment of non-orthogonal
device-contact coupling in the NEGF Green’s function integrals. The
derivation is in
docs/superpowers/specs/2026-03-18-cross-term-corrections-derivation.md
in the source repository; it touches every contact implementation and both
the density and DOS integrals.
The problem
When the device-contact overlap stau is non-zero, the contact
self-energy
carries terms linear and quadratic in \(E\). The previous code dropped the cross-terms generated when this expression is plugged into the device Green’s function integrals, silently treating non-orthogonal contacts as orthogonal.
What is correct now
crossTermQ and crossTermQTot methods on every surfG implementation
return the energy-dependent cross-term correction. The density and DOS
integrals (GrInt -> GrIntCross, densityComplex,
damleLowerDensity) accept and propagate the correction through the
contour. Result: correct charge / DOS / transmission on any
non-orthogonal contact setup. The bias-window (non-equilibrium) integral
carries the cross term as well, so the electron count stays complete
under bias.
Supporting work shipped at the same time
Damle analytic lower contour – one eigendecomposition plus an analytic cross-term \(\delta N\) replaces the prior deep-tail
densityComplexcall. Roughly 30-450x faster than the adaptive contour;damle_dN_warnflags cases where the lower contour holds non-trivial weight.2-probe asymptotic Sigma fit – places the deep \(\Sigma_0\) probes relative to the integration window instead of hardcoded
(-1e3, -1e4, -1e5).eigh(X @ F @ X) correctness fix –
eigh(inv(S) @ F)was silently using the upper triangle of a non-Hermitian matrix and returning wrong eigenvalues wheneverSwas non-trivial. Replaced everywhere.Selectable Fermi-search electron count – the
fermiCountargument ofsetContact1D(default'contact': contact atoms plus cross term) andsetContactBethe(default'device_bare': whole device without cross term;'device'is rejected for Bethe contacts) chooses which electrons the Fermi search makes neutral.Exact spin-resolved total transmission – for
spin='u'/'ro'/'g'the total transmission (and current) is the exact trace \(\mathrm{Tr}[\Gamma_1 G^r \Gamma_2 G^a]\). The four spin channels are kept; for spin-mixing leads (e.g.AuSOC) the total differs from their sum.Finite-temperature equilibrium contour – the arc and Fermi-window pieces are combined with consistent orientation; finite-T results computed with earlier versions should be recomputed.
Docstring cleanup – trimmed inaccurate and verbose docstrings and dead code across
gauNEGF/.
Green: tested and fully working
- Energy-independent NEGF
gauNEGF.scf.NEGFbase class withgauNEGF.scf.NEGF.setSigma()– constant complex self-energy plus Pulay DIIS SCF. Base SCF I/O, voltage bias, all spin treatments (restricted, unrestricted, generalized).- Energy-dependent Bethe contacts
gauNEGF.scfE.NEGFE.setContactBethe()– full Bethe lattice with the new non-orthogonal cross-term correction. Fermi search countsfermiCount='device_bare'by default.- Energy-dependent 1D contacts on minimal basis
gauNEGF.scfE.NEGFE.setContact1D()with contact blocks auto-extracted from the device Fock (contact atoms only, no explicitalphas) – C2-STO3G and Au3-CRENBS converge end-to-end through the lower contour, asymptotic Sigma fit, and cross-term path. Fermi search countsfermiCount='contact'by default.- SOC for Bethe contacts
Slater-Koster spin-orbit terms are supported and tested.
- Transport
gauNEGF.transport.calculate_transmission(),gauNEGF.transport.calculate_dos(),gauNEGF.transport.calculate_current(). DOS with cross-term Q correction. Transport checkpointing. Spin-resolved totals are the exact trace (total != sum of the four channels for spin-mixing leads).- Atomic 3D Bethe contacts
gauNEGF.surfG3D.surfGAt3D– per-atom 3D builder is fully tested.- Numerical infrastructure
inv_sqrt_general,fractional_matrix_power, JIT-compiled integrals, adaptive complex contour, Fermi search (Muller / secant / poly / bisect / predict).
Yellow: works in limited cases
- setContact1D with external alpha/beta matrices on minimal basis
Works, but convergence is finicky depending on system. Smaller test coverage than the auto-extracted path.
Red: needs testing or has known limitations
- surfG3 (full 3D-periodic contact wrapper)
The math works independently – DOS makes sense, band diagrams plot correctly – but contact generation needs work and end-to-end testing. Do not assume converged transport results yet.
- Non-minimal basis on 1D contacts
LANL2DZ-class (double-zeta, diffuse, ECP-with-valence) breaks the S-PSD precondition of the asymptotic Sigma framework. The corresponding integration tests are deliberately skipped with this reason. Fix is k-resolved overlap regularization at the surfG construction step (planned for the next release).
TODO for the next release
End-to-end validation of
surfG3(3D-periodic contact transport on a real device, comparison to reference).K-resolved overlap regularization to lift the minimal-basis precondition on 1D contacts.