Releases: UMEP-dev/SUEWS
SUEWS v2026.4.3: Rust FFI Backend, RSL Dynamics & T2 Attribution
Installation
pip install --upgrade supyWhat's New
Version 2026.4.3 (released on 3 April 2026)
This release delivers a major backend migration to Rust FFI, RSL physics refinements, a new temperature attribution module, DTS enhancements, seasonal albedo adjustments, comprehensive validation improvements, and extensive bug fixes.
Highlights
Rust FFI Bridge
- Replaced f90wrap with a Rust FFI bridge as the sole simulation backend (#1209)
- Unified CLI interface with automatic PATH installation (#1215)
- Validated Rust output layout against Fortran metadata (#1226)
RSL Physics
- Dynamic computation of c2m/c2h from Harman & Finnigan (2007, 2008) RSL theory (#1116)
- Refined parameterisation with explicit R = beta * hd / elm (#1232)
- Fixed interpolation bounds and division-by-zero pitfalls in RSL profiles (#1228, #1229)
T2 Attribution Module
- Diagnose near-surface temperature, humidity, and wind speed changes by physical process contributions, with diurnal cycle and heatmap visualisation (#918)
Seasonal Albedo
- Seasonal adjustment of surface albedo (
alb_id) for vegetated surfaces (#1211) - Auto-initialise vegetation albedo from phenology state (#1133)
DTS Enhancements
chunk_dayparameter for long simulations (#1172)run_dts_multifor multi-grid simulation support (#1173)- Hardened parallel multi-grid execution (#1176)
- Fixed Pydantic model serialisation across multiprocessing spawn boundaries (#1197)
Validation
- Draft rules registry for structured validator rule management (#1246)
- Conditional validation via Pydantic v2
model_fields_set(#1247) - Upper limit on
nlayerto prevent run crashes (#1206) SUEWSOutputindex property (#1178)
Bug Fixes
- Guarded SPARTACUS LW solver against NaN from matrix singularity (#1212)
- Fixed SUEWS output packing overflow with fail-fast behaviour (#1198)
- Fixed Pydantic dict format handling in YAML numeric parser (#1236)
- Pinned pydantic>=2.12 to prevent OSGeo4W version conflict (#1213)
- Fixed STEBBS WWR extreme cases (WWR = 0 or 1) (#1261)
- Fixed biogenic CO2 to use local climate instead of global average (#1117)
- Fixed missing STEBBS parameters in sample_config.yml (#1111)
- Auto-repair stale refs in fetch_origin conductor (#1239)
CI and Security
- Hardened dependency supply chain after LiteLLM incident with startup hook auditing (#1264)
- Rust change detection and Cargo build caching across all platforms (#1217, #1219)
- Gated tag-triggered deployments on master ancestry (#1162)
- Pre-built documentation served from
rtdbranch (#1167) - Deprecated
env.ymland conda/mamba build pathway (#1163)
Other Improvements
- Discourse-to-GitHub issue bridge with webhook sync (#1138)
- Status tags for changelog entries (governance) (#1181)
- Revised README as science-first landing page (#1265)
- Anthropogenic emission defaults and parameter guidance (#1231)
- User workflow guide for getting started (#1014)
- Executable documentation examples using sphinx-gallery (#1057)
Breaking Changes
- f90wrap is no longer supported; the Rust FFI bridge is the sole backend (#1209)
- Deprecated
env.ymland conda/mamba build pathway (#1163)
Full Changelog
For complete details, see the CHANGELOG.
Citation
This release is archived on Zenodo with a DOI for academic citation. The DOI appears automatically once Zenodo processing completes (usually within minutes).
Documentation
SUEWS v2026.1.28: QGIS Stability Improvements
Installation
pip install --upgrade supyWhat's New
Version 2026.1.28 (released on 28 January 2026)
This release focuses on stability improvements for QGIS/UMEP users, physics corrections, and executable documentation.
Notable Changes
QGIS Crash Fix
- Resolved crash issue where SUEWS caused QGIS to fail mid-run
- Removed stdout writes (
PRINT *,WRITE(*,*)) that conflicted with QGIS output handling - Replaced problematic code with structured warnings
- Improved thread safety for parallel simulations
- Related PRs: #1086, #1083
QGIS/UMEP Test Suite
- Added comprehensive compatibility tests to catch QGIS integration issues before release (#905)
Executable Documentation
- Tutorial examples now run during documentation builds via sphinx-gallery
- Ensures code examples remain current (#1057)
Physics Fixes
-
Biogenic CO2: Fixed FcRespi calculation to use local climate instead of global average temperature (#1117)
-
NumCapita Initialisation: Fixed uninitialised NumCapita causing NaN values in CO2 flux calculations (#1053)
-
Error Flag Management: Reset error flag before kernel calls to prevent stale errors across runs (#1109)
Other Improvements
- Pandas 3.0 forward compatibility (#1106)
- Improved validation ranges for albedo and emissivity (#978, #979)
- Structured error handling with detailed validation reports (#1070)
- Vendored f90wrap runtime to eliminate pip dependency conflicts (#963)
Breaking Changes
None. Full backward compatibility maintained with version 2025.11.20.
Full Changelog
For complete details, see the CHANGELOG.
Citation
This release is archived on Zenodo with a DOI for academic citation. The DOI appears automatically once Zenodo processing completes (usually within minutes).
Documentation
SUEWS v2025.11.20: Enhanced Validation & Legacy Data Support
This release focuses on enhanced validation capabilities, modern OOP interface improvements, and comprehensive support for legacy data formats.
Major Features
- Modern OOP Interface: New
SUEWSSimulation.from_sample_data()factory method with method chaining, state properties, and validation helpers - Enhanced Validation Framework:
- Physics-specific forcing data validation
- Irrigation parameter validation with hemisphere awareness
- Daylight saving time validation
- STEBBS building model parameter constraints (50+ parameters)
- Human activity parameter validation
- Legacy Data Support: Comprehensive fixes for YAML converter handling 2017 URBANFLUXES data formats
- ERA5 Download Simplification: Streamlined implementation with reduced dependencies (removed earthkit.data, made xarray optional)
- Documentation Modernisation: All tutorials updated to showcase OOP interface exclusively
Changelog
20 Nov 2025
- [doc] Updated tutorials and API documentation to use modern OOP interface (#881)
- Updated impact-studies.ipynb, quick-start.ipynb, setup-own-site.ipynb to use
SUEWSSimulation.from_sample_data() - Updated data-structures.rst code examples
- Completed modernisation started in #779
- Updated impact-studies.ipynb, quick-start.ipynb, setup-own-site.ipynb to use
19 Nov 2025
- [bugfix] Fixed last layer of validation for DLS startdls and endls parameters (#877)
- Instead of hemisphere pattern check (NH/SH typical ranges), now phase C provide NO ACTION NEEDED info to user with calculated DLS startdls and endls (to compare against user values)
- Useful when Phase C runs standalone or via
SUEWSConfig.from_yaml()(Phase B auto-corrects values in full pipeline)
18 Nov 2025
- [change] BREAKING: Simplified ERA5 download implementation and renamed
data_sourceparameter values (#874)- Removed earthkit.data dependency - both download methods now use cdsapi directly
data_sourceparameter values renamed for clarity:"timeseries"(new default, was "earthkit"): Fast ERA5 timeseries dataset for point locations"gridded"(was "cdsapi"): Traditional gridded ERA5 with model levels and spatial grids
- Timeseries downloads CSV directly and loads in-memory (zero extra dependencies)
- Gridded path requires optional h5netcdf for netCDF4 reading (install separately:
pip install h5netcdf) - Same fast performance for timeseries (~26s for 30 years) with minimal dependencies
- [change] Made xarray optional dependency (only needed for gridded ERA5) (#874)
- CSV timeseries path now uses pure pandas (no xarray conversion)
- Significantly faster for timeseries: 1.2s vs 10-15s for test case
- ~10x speed improvement by eliminating pandas → xarray → pandas round-trip
- [change] Removed dask dependency (was redundant with multiprocess) (#874)
- CLI now uses
multiprocess.pool.ThreadPoolfor parallel batch simulations - Same functionality, lighter dependencies
- CLI now uses
14 Nov 2025
- [feature] Added
SUEWSSimulation.from_sample_data()factory method and comprehensive OOP enhancements (#779)- New factory method for cleaner OOP workflow:
sim = SUEWSSimulation.from_sample_data() - Added visual feedback with
__repr__()showing simulation status (Not configured, Ready, Complete) - Added state access properties:
state_initandstate_final - Added validation methods:
is_ready()andis_complete() - Enabled method chaining for fluent interface (
update_config(),update_forcing(),reset()return self) - Added
get_variable()helper for extracting specific variables from MultiIndex results - Implemented deprecation infrastructure for functional API (maintains backward compatibility)
- New factory method for cleaner OOP workflow:
- [feature] Added Phase C validation for daylight saving time parameters (#857)
- Four validation layers: (1) basic range [1, 366], (2) consistency (both set or both None), (3) leap year (DOY 366 only in leap years), (4) hemisphere pattern check (NH/SH typical ranges)
- First three layers raise ERROR; hemisphere check adds INFO to report "NO ACTION NEEDED" section
12 Nov 2025
- [feature] Added irrigation year-wrapping pattern detection (#843)
- Warns for unusual patterns (NH: ie_start > ie_end; SH: ie_start < ie_end)
- Integrated into Phase B scientific validation pipeline
11 Nov 2025
- [feature] Added irrigation parameter validation (#843)
- Validates
ie_startandie_endfor DOY range, consistency, and hemisphere-aware seasonal appropriateness - NH (lat ≥ 23.5°): warm season DOY 121-273; SH (lat ≤ -23.5°): DOY 305-90; Tropics (|lat| < 23.5°): year-round
- Validates
- [bugfix] Fixed YAML converter errors with legacy data (#846)
- Fixed logging errors when sys.stdout is None (e.g., in QGIS)
- Fixed missing NML file handling (SPARTACUS, ESTM) to return empty containers
- Added graceful handling of legacy profile file formats (2017 data)
- Added automatic placeholder generation for missing lookup codes
- Fixed column count mismatches in legacy table files
- Preserved
BaseT_HCduring 2021a→2023a table conversion - Added comprehensive tests with real URBANFLUXES 2017 data
05 Nov 2025
- [feature] Added physics-specific forcing data validation (#824)
check_forcing()validates required forcing columns (qn, qf, qs, ldown, fcld, xsmd) based on physics configuration- Integrated with Phase A validation pipeline; backwards compatible
- Added helpful error messages with documentation links
4 Nov 2025
- [bugfix] Fixed land cover fraction validation to use floating-point tolerance (#820)
- Changed from exact equality check to tolerance-based check (
abs(total_fraction - 1.0) > 1e-6) - Uses same tolerance (1e-6) as Phase B fraction normalisation
- Changed from exact equality check to tolerance-based check (
31 Oct 2025
- [bugfix] Fixed Phase B validator to not nullify
lai_idwhen surface fraction is zero (#815)- Preserves user-provided initial state values even when surface is not active
- Prevents crashes when users later change surface fraction from 0 to non-zero values
- [bugfix] Added
rcmethodto required physics options in validation system (#814)- Updated validation pipelines: Phase A, Phase B, and orchestrator
- Controls method for splitting building envelope heat capacity in STEBBS
29 Oct 2025
- [feature] Added validation constraints for human activity parameters (#798)
faut: Fraction of irrigated area using automatic systems [0.0, 1.0]frfossilfuel_heat,frfossilfuel_nonheat: Fossil fuel fractions [0.0, 1.0]popdensnighttime: Population density must be ≥ 0.0 (persons/ha)
- [bugfix] Fixed irrigation parameter units:
ie_startandie_endnow correctly identified as Day of Year (DOY) instead of hours (#843) - [feature] Phase B validator now automatically populates
OutdoorAirAnnualTemperaturefrom CRU dataset (#808)- Uses CRU TS4.06 1991-2020 climate normals
24 Oct 2025
- [feature] Added physical range validation for 50+ STEBBS building model parameters (#746)
- Dimensionless parameters (emissivity, transmissivity, absorptivity, reflectivity, ratios) constrained to [0.0, 1.0]
- Physical properties (thickness, conductivity, density, heat capacity) constrained to positive values
- [doc] Added comprehensive documentation for forcing data validation functions (#773)
22 Oct 2025
- [feature] Forcing data validation integrated into Phase A validator (#767)
- Added automatic validation of meteorological forcing data in Phase A pipeline
- Validates all forcing files when multiple files are provided
- Line numbers in error messages match actual file line numbers for easy debugging
21 Oct 2025
- [feature] Added
get_mean_annual_air_temperature()for stable parameter initialisation using CRU TS4.06 climate normals (#762) - [bugfix] Fixed Phase B validation to update roofs/walls temperature fields from CRU climate data (#736)
20 Oct 2025
- [bugfix] Fixed recursive nested config updates in SUEWSSimulation (#756)
- Resolved issue where updating nested configuration settings converted parameters to dictionaries
- Ensures df_state_init can be generated correctly after nested updates
17 Oct 2025
- [bugfix] Fixed nlayer nested structures detection in validation system (#731)
- Enhanced validation for complex nested arrays in vertical layers configuration
16 Oct 2025
- [bugfix] Fixed Sphinx configuration errors preventing ReadTheDocs builds
Installation
Standard (NumPy 2.x):
pip install --upgrade supyUMEP/QGIS Compatible (NumPy 1.x):
pip install supy==2025.11.20rc1Citation
This release is automatically archived on Zenodo and assigned a DOI for academic citation. The DOI will appear here once Zenodo processing is complete (usually within a few minutes).
Documentation
SUEWS v2025.10.15: YAML Configuration System Release
This release introduces a modern YAML-based configuration system with comprehensive validation, marking a significant infrastructure upgrade for SUEWS.
Major Features
- YAML Configuration System: Modern, human-readable configuration format with 697 documented parameters
- Schema Versioning: Independent schema versions (1.0, 1.1, etc.) separate from model versions for cleaner configuration evolution
- Three-Phase Validation Framework:
- Structure validation: YAML syntax and schema compliance
- Physics validation: Scientific parameter constraints with CRU TS4.06 climatological data
- Model validation: SPARTACUS multi-layer configurations, STEBBS constraints
- JSON Schema Support: IDE integration enabling autocomplete and inline validation in VS Code, PyCharm, Vim and other editors
- CLI Tools:
suews-schema: Schema management (info, validate, migrate, export)suews-convert: Legacy table-to-YAML conversionsuews-validate: Configuration validation
- Build System Improvements: Automatic UMEP/QGIS compatible builds (rc1 variants) with NumPy 1.x for QGIS 3.40 LTR compatibility
- Cross-Platform Enhancements: Python 3.13 support, Linux manylinux2014 compatibility, Windows Unicode fixes
Changelog
15 Oct 2025
- [feature] Enhanced UMEP/QGIS build system with nightly builds and improved version handling (cdb4273, 8f540b9, 636c1b9, 35510bb, 4a972c7)
- Enabled UMEP nightly builds with
.dev1versioning strategy for continuous testing - Explicitly excluded nightly builds from UMEP workflow to prevent conflicts
- Added UMEP builds to master/manual workflow runs
- Aligned UMEP builds with QGIS Python 3.12 requirements
- Enabled UMEP nightly builds with
- [bugfix] Fixed sample output validation test to skip for NumPy 1.x builds (a4017cc)
- [bugfix] Removed path filter from tag triggers to ensure all tagged builds are processed (1eb6667)
- [maintenance] Performance improvement in Conductor setup by removing unnecessary build steps (ddedf96)
Installation
Standard (NumPy 2.x):
pip install suews==2025.10.15UMEP/QGIS Compatible (NumPy 1.x):
pip install suews==2025.10.15rc1Documentation
CITATION-added
This release adds a CITATION file for proper citation of this repo.
Functionality-wise, the SUEWS model stays the same as last supy release (v2024.3.25.dev).
2020a Release
Improvement
- A ponding water scheme is added in the automatic irrigation calculation; useful when a certain depth of ponding water to maintain in irrigation (e.g., flooding irrigation in rice
crop-field). - Irrigation fraction can be specified for all surfaces (previously only available for vegetated surfaces)
- A U-shape approach for calculating HDD/CDD is introduced to account for a wide comfort zone between heating and cooling critical temperatures.
Changes
- A new
RoughLenHeatMethodoption5: adaptively choose option1for fully pervious surface or2otherwise (if any impervious surface exists). - A new column
H_maintainis added inSUEWS_Irrigation.txtto set ponding water depth. - New columns to specify irrigation fractions for non-vegetated surfaces in
SUEWS_SiteSelect.txt. - A new scheme option
BaseTMethodinRunControl.nmlto set calculation scheme for HDD/CDD.
Fix
NONE.
Known issues
Wind direction is not currently downscaled so non -999 values
will cause an error.