You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add ssor_preconditioner(A, omega=1.0) to trnsolver.iterative. Applies
M^{-1} r via forward triangular solve (D + ωL) t = r, diagonal scaling
v = ω(2-ω) diag(A) ⊙ t, and backward solve (D + ωL^T) z = v. ω=1 is
symmetric Gauss-Seidel; converges faster than Jacobi on coupled matrices
(1D Laplacian, FEM stiffness). BF16/FP16 promoted to FP32 in factory and
closure. SSOR benchmark added to bench_solver.py. Closes SSOR item in #28.
x, iters, res = trnsolver.cg(A, b, M=ssor_precond, tol=1e-8)
61
62
x, iters, res = trnsolver.gmres(A, b, tol=1e-6)
62
63
```
63
64
@@ -76,6 +77,8 @@ Demonstrates the self-consistent-field iteration: build Fock matrix → solve ge
76
77
77
78
## Status
78
79
80
+
**v0.8.0** — `ssor_preconditioner(A, omega=1.0)` (#28). SSOR preconditioner for SPD systems: two triangular solves + diagonal scaling per application. Outperforms scalar Jacobi on coupled matrices (1D Laplacian, FEM stiffness). ω ∈ (0, 2); ω=1 is symmetric Gauss-Seidel.
81
+
79
82
**v0.7.0** — BF16/FP16 dtype support across the full public API (#19). All entry points (`cholesky`, `lu`, `qr`, `solve`, `solve_spd`, `inv_spd`, `pinv`, `inv_sqrt_spd`, `inv_sqrt_spd_ns`, `eigh`, `eigh_generalized`, `cg`, `gmres`, `block_jacobi_preconditioner`) accept BF16/FP16 inputs, upcast to FP32 internally, and restore the original dtype on output.
80
83
81
84
**v0.6.0** — `eigh` subspace rotation refinement: one Rayleigh-Ritz step (V^T A V re-diagonalization) after Householder-QR reduces eigenvector residuals by 1–2 orders of magnitude for n ≥ 64 (#31). `solve_spd` gains `iterative_refinement=True`: mixed-precision FP64 residual + second Cholesky solve for SPD systems with cond up to ~1e7 (#32).
@@ -87,16 +90,17 @@ Demonstrates the self-consistent-field iteration: build Fock matrix → solve ge
0 commit comments