Releases: SSCHAcode/tdscha
1.6.1
Release Notes for TDSCHA v1.6.1
Release Date: March 25, 2026
This release introduces major performance optimizations and new computational capabilities, most notably the q-space implementations that dramatically accelerate calculations for periodic systems.
Major New Features
1. QSpaceLanczos: Q-Space Spectral Calculations
A new module implementing the Lanczos algorithm in the Bloch (q-space) basis, exploiting momentum conservation for massive performance gains.
Key Features:
- Momentum Conservation: The 2-phonon sector is block-diagonal with pairs satisfying q₁ + q₂ = q_pert, reducing the ψ-vector size by ~N_cell compared to real-space
- Hermitian Lanczos: Uses complex arithmetic with Hermitian inner products for proper convergence
- Julia Backend: High-performance implementation via
Modules/tdscha_qspace.jl - Bloch-Transformed Ensemble: Direct q-space ensemble averaging without real-space supercell overhead
Performance Impact:
- Memory reduction: O(N_modes²) → O(n_bands²) for the 2-phonon sector
- Speedup scales as ~N_cell for spectral calculations
- Essential for large supercells where real-space Lanczos becomes prohibitive
Usage:
import tdscha.QSpaceLanczos as QL
# Initialize q-space Lanczos solver
qlanc = QL.QSpaceLanczos(ensemble)
qlanc.init(use_symmetries=True)
# Compute spectral function at specific q-point
qlanc.prepare_q(0) # Gamma point
qlanc.run_FT(n_steps=1000)
green = qlanc.get_green_function_continued_fraction(energies)Files Added:
Modules/QSpaceLanczos.py(1,232 lines)Modules/tdscha_qspace.jl(529 lines)tests/test_qspace/test_qspace_lanczos.py(273 lines)
2. QSpaceHessian: Fast Free Energy Hessian
The fastest and most memory-efficient method in the SSCHA ecosystem for computing the full anharmonic free energy Hessian, including fourth-order contributions.
Key Features:
- Block-Diagonal Structure: Translational symmetry makes the Liouvillian block-diagonal in q-space
- Iterative Solver: GMRES with harmonic preconditioner; BiCGSTAB fallback for difficult cases
- Symmetry Exploitation: Point-group symmetries reduce computation to the irreducible q-set
- Hermiticity Enforcement: Explicit symmetrization ensures real eigenvalues
- Anharmonic Control:
ignore_v3andignore_v4flags to exclude cubic/quartic terms
Performance Impact:
| Metric | Direct (get_free_energy_hessian) |
QSpaceHessian |
|---|---|---|
| Memory | O(N_modes⁴) | O(n_bands⁴) |
| Time | O(N_modes⁶) | O(n_bands³ × N_q,irr) |
| Speedup (4×4×4 cell) | 1× | ~65,000× |
For a 4×4×4 supercell (N_cell = 64, N_q,irr ≈ 4), calculations that would require terabytes of RAM are now feasible on a laptop.
Usage:
import tdscha.QSpaceHessian as QH
# Compute full Hessian at all q-points
hess = QH.QSpaceHessian(ensemble)
hess.init()
hessian_dyn = hess.compute_full_hessian(tol=1e-6, max_iters=500)
# Or compute at single q-point
H_gamma = hess.compute_hessian_at_q(iq=0)Advanced Features:
- Dense Fallback: For problematic q-points near phase transitions (
dense_fallback=True) - Acoustic Mode Handling: Proper null-space projection for non-self-conjugate q-points
- Mode Degeneracy Exploitation: Schur's lemma reduces GMRES solves for degenerate modes
Files Added:
Modules/QSpaceHessian.py(701 lines)tests/test_qspace/test_qspace_hessian.py(170 lines)docs/qspace-hessian.md(comprehensive documentation)
3. Gamma-Only Optimization: 8× Speedup for Γ-Point Calculations
Major performance enhancement for Γ-point (q = 0) spectral and response calculations.
Optimizations:
- Reduced Python-Julia Bridge Overhead: Minimized data marshalling for gamma-only mode
- O(n²) Permutations: Replaced O(n³) matrix multiplications with direct index permutations in
apply_L_translations - Symmetry-Aware: Exploits point-group symmetries for additional speedup
Impact:
- 8× speedup for gamma-point IR/Raman response calculations
- Particularly effective for large supercells where the Python-Julia boundary crossing was a bottleneck
- Maintains full accuracy (verified against non-optimized implementation)
Usage:
The optimization is automatic when:
- The perturbation is at the Γ-point (
q_pert = 0) use_symmetries=Trueis set- The Julia backend is active (
MODE_FAST_JULIA)
Files Modified:
Modules/DynamicalLanczos.py(gamma-only detection and optimization)Modules/tdscha_core.jl(translational projection optimization)
Additional Improvements
Documentation Overhaul
- New Documentation Site: Full mkdocs-based documentation at sscha.eu/tdscha
- API Reference: Auto-generated from docstrings
- Theory Guide: Mathematical background on q-space methods
- Examples: SnTe spectral function at X point, IR response calculations
Command-Line Interface
New executable scripts for common workflows:
tdscha-convergence-analysis— Analyze Lanczos convergencetdscha-plot-data— Plot spectral functionstdscha-output2abc— Convert output formatstdscha-hessian-convergence— Monitor Hessian convergence
Testing & Validation
- Q-Space Correctness Tests: Verify q-space vs. real-space Green functions match within 2.4×10⁻⁷ relative error
- Wigner Representation Tests: Compare Wigner vs. non-Wigner spectral functions
- MPI Parallel Tests: CI-validated MPI correctness
- IR Perturbation Tests: Modulus consistency between real-space and q-space Lanczos
Bug Fixes
- Q-Point Mapping: Fixed errors for q-points where
-qdoes not map to itself - Symmetry Construction: Corrected point-group symmetry handling in q-space (Cartesian rotations, atom permutations)
- Acoustic Modes: Proper masking of acoustic modes (ω < 10⁻⁶) in ensemble averages
- Version Synchronization: Aligned version numbers across pyproject.toml, meson.build, and git tags
Breaking Changes
None. This release is fully backward-compatible with v1.5.
Migration Guide
For Existing Users
No code changes required. Existing scripts will continue to work unchanged.
To benefit from new features:
- For faster Hessian calculations: Replace
ensemble.get_free_energy_hessian()withQSpaceHessian - For large-supercell spectra: Use
QSpaceLanczosinstead ofLanczoswhen memory is constrained - For Γ-point response: Ensure
use_symmetries=Trueto activate 8× speedup automatically
Dependencies
No new required dependencies. Optional dependencies:
spglib— For symmetry exploitation (recommended)julia— Required for q-space modules and gamma-only optimizationmpi4py— For MPI parallelization
Contributors
- Lorenzo Monacelli (main development)
- Claude Opus 4.6 (q-space implementation assistance)
References
- R. Bianco, I. Errea, L. Paulatto, M. Calandra, and F. Mauri, Phys. Rev. B 96, 014111 (2017) — Free energy Hessian theory
- L. Monacelli, Phys. Rev. B 112, 014109 (2025) — Static susceptibility formulation
- L. Monacelli and F. Mauri, 2021 — Q-space Liouvillian block-diagonality
Full Changelog
See the git log for all 43 commits since v1.5.
Key Commits:
47ab893c— Gamma-only implementation with tests31263868— 8× speedup via reduced Python-Julia overhead1a65d466— QSpaceLanczos module with Bloch momentum conservationb180a88f— QSpaceHessian for free energy Hessian in q-space7cd005ef— Mode degeneracy exploitation (Schur's lemma)a7ddc302— Hermitian symmetry exploitation in q-pair blocksed693e2c— Raman perturbation methods for QSpaceLanczos
1.5
Release Notes – Version 1.5
Highlights
-
** Wigner TDSCHA **
- Reduces the number of iterations to converge by a factor 2, and enable the calculation of 2ph IR and Raman
-
Meson build system
- Migration to the Meson build system.
- Dropped the deprecated installation via
numpy.distutils. - Full compatibility with Python 3.13 and spglib ≥ 2.2.
New Features
- Acoustic Sum Rule for 1D systems
- Implemented enforcement of the acoustic sum rule for 1D materials.
What's Changed
- Adding the wigner formalism by @mesonepigreco in #6
- Meson build to be compatible with newer python version by @mesonepigreco in #11
Full Changelog: v1.4...v1.5
Version 1.4
#Update TDSCHA to version 1.4
This new version include some bugfixes, especially in the StaticHessian calculation which has was broken in the previous release.
This version allows a seamless integration with julia, no more need to call python-jl, and automatic installation of julia libraries without the user having to care about anything.
Also, the fast julia mode is the default one, if available and not otherwise specified by the user.
We also changed the versioning, jumping from 1.0 to 1.4, to respect the same minor versioning of cellconstructor and python-sscha.
What's Changed
- Lanc efficient symmetries by @mesonepigreco in #1
- Julia exec by @mesonepigreco in #3
Full Changelog: https://github.com/SSCHAcode/tdscha/commits/v1.4