[general]
name=SOLWEIG
qgisMinimumVersion=4.0
description=Calculate Mean Radiant Temperature & UTCI thermal comfort using the SOLWEIG model.
version=0.1.0-beta54
author=SOLWEIG Development Team
email=gareth.simons@ucl.ac.uk

about=SOLWEIG (Solar and Longwave Environmental Irradiance Geometry) is a high-performance urban microclimate model for calculating Mean Radiant Temperature and thermal comfort indices.

    Features:
    - Single timestep and timeseries Tmrt calculations
    - UTCI (Universal Thermal Climate Index) computation
    - PET (Physiological Equivalent Temperature) computation
    - Sky View Factor (SVF) preprocessing
    - EPW & SUEWS weather file import
    - Support for large rasters via tiled processing and GPU

    Requirements:
    - The SOLWEIG Python library must be installed separately.
    - The plugin will offer to install it automatically on first use.
    - To install manually, run this in the QGIS Python Console:
      import pip; pip.main(["install", "solweig"])

    Documentation: https://umep-dev.github.io/solweig/

    This plugin provides QGIS Processing algorithms that wrap the SOLWEIG Python library. This version of Solweig is currently in testing as a proof of concept for Rust + GPU + tiled processing to handle large rasters.

    Adapted from UMEP (Urban Multi-scale Environmental Predictor) by Fredrik Lindberg, Sue Grimmond, and contributors. If you use this plugin in research, please cite:

    Lindberg F, Grimmond CSB, Gabey A, Huang B, Kent CW, Sun T, Theeuwes N, Järvi L, Ward H, Capel-Timms I, Chang YY, Jonsson P, Krave N, Liu D, Meyer D, Olofson F, Tan JG, Wästberg D, Xue L, Zhang Z (2018) Urban Multi-scale Environmental Predictor (UMEP) - An integrated tool for city-based climate services. Environmental Modelling and Software 99, 70-87 https://doi.org/10.1016/j.envsoft.2017.09.020

tracker=https://github.com/UMEP-dev/solweig/issues
repository=https://github.com/UMEP-dev/solweig
homepage=https://umep-dev.github.io/solweig/

hasProcessingProvider=yes
tags=urban climate, thermal comfort, mean radiant temperature, UTCI, PET, microclimate, heat stress, urban planning

category=Analysis
icon=icon.png

experimental=True
deprecated=False
supportsQt6=True

changelog=
    0.1.0-beta54
    - Fix docs consistency tests; fix CI GDAL build for QGIS compat
    0.1.0-beta53
    - Enforce output directory for timeseries outputs
    0.1.0-beta52
    - Array vs. GeoTIFF API consistency
    0.1.0-beta51
    - Linting
    0.1.0-beta50
    - Cleanup
    0.1.0-beta49
    - Calculate API change and specs cleanup
    0.1.0-beta48
    - Add MkDocs site with API reference, I/O docs, and QGIS plugin guide
    0.1.0-beta46
    - Support QGIS 4 (Qt6); raise minimum to QGIS 4.0, Python 3.11
    0.1.0-beta45
    - Fix mountain shadow reach; simplify QGIS tiling options; minor bug fixes
    0.1.0-beta44
    - Expose day/night UTCI heat-stress thresholds; optional per-timestep Tmrt output; log TimeseriesSummary report
    0.1.0-beta43
    - TimeseriesSummary with aggregated grids and inline UTCI/PET; remove batch postprocess
    0.1.0-beta42
    - Remove percent symbol from changelog (fixes ini-style metadata parsing)
    0.1.0-beta41
    - Configurable land cover materials table in Surface Preparation with UMEP defaults
    - Save/load UMEP-compatible parametersforsolweig.json from surface directory
    0.1.0-beta40
    - Tighten golden test tolerances (SVF, wall temp, Tmrt, PET, ground temp)
    0.1.0-beta39
    - Fix nighttime Tmrt: full longwave radiation balance via Rust pipeline
    - Remove deprecated Python physics; all paths use fused Rust pipeline
    0.1.0-beta38
    - SVF must be prepared before calculate(); fix shadow spec convention
    - Documentation and quick-start improvements
    0.1.0-beta37
    - Fix integer raster crash on NaN assignment; rename coerce_f64_to_f32 to ensure_float32
    0.1.0-beta36
    - GPU shadow-to-bitpack shader; anisotropic sky GPU cleanup
    - SVF core API tests; Python 3.9 fix; surface model type-safety fixes
    0.1.0-beta35
    - Fall back to Python logging/tqdm when QGIS is importable but inactive
    0.1.0-beta34
    - Use local relief for max_height; harden NaN handling; fix SVF tile-size context
    0.1.0-beta33
    - GPU and processing performance improvements; multi-resolution SVF/wall cache
    0.1.0-beta32 - Bump
    0.1.0-beta31 - Bump
    0.1.0-beta30
    - Reuse precomputed SVF and shadow matrices in tiled timeseries
    0.1.0-beta29
    - Configurable tile orchestration (workers, queue depth, prefetch)
    - Backpressure-controlled dispatch; memory-aware prefetch; adaptive worker count
    0.1.0-beta28
    - Optimized tiled timeseries; parallel tile execution via ThreadPoolExecutor
    0.1.0-beta27
    - Fix 4 tiling bugs (pipelining split, tile-size semantics, anisotropic sky, overlap buffer)
    - Free result arrays after writing to disk in timeseries mode
    0.1.0-beta26
    - Vegetation transmissivity for diffuse SVF; configurable leaf-off transmissivity
    - Expose vegetation parameters in QGIS (transmissivity, seasonal leaf dates)
    0.1.0-beta25
    - Fix multiple bugs: GVF shadow inversion, CDSM/TDSM clamping, thermal delay state mutation, nighttime NaN propagation, diffuse fraction division by zero, clearness index log(0), TMY date filter, polar winter altmax, missing conifer params
    0.1.0-beta24
    - Skip tiling for nighttime timesteps (single-pass full grid)
    0.1.0-beta23
    - Fix EPW hour-24 timestamp bug; fix hardcoded Gothenburg lat/lon defaults
    0.1.0-beta22
    - GPU pipelining for sustained utilisation; opt-in timing instrumentation
    0.1.0-beta21
    - Height-aware tile buffer (reduces tile count for short buildings)
    0.1.0-beta20
    - QGIS progress monitor for timeseries; auto-tile large rasters
    - Resource-aware tile sizing from real GPU/RAM limits
    0.1.0-beta19
    - Fix import sorting (ruff formatting)
    0.1.0-beta18
    - Enable anisotropic sky by default; port Perez model to Rust
    - Fix bitpacked shadow extraction; fix veg shadow init; release GIL
    0.1.0-beta17
    - Install solweig with --no-deps in QGIS (fixes gdal_array ABI crash)
    0.1.0-beta16
    - Catch all exceptions on import so upgrade prompt still appears
    0.1.0-beta15
    - Force GDAL backend via env var (fixes rasterio detection in QGIS)
    0.1.0-beta14
    - Gate plugin build on passing tests; fix CI test reload failure
    0.1.0-beta13
    - Add Location.from_epw(); enable anisotropic sky in tiled mode
    - Fix SVF cache reuse and validation; enforce release-mode Rust builds
    0.1.0-beta12
    - CI: create GitHub Release with wheels on tag push
    0.1.0-beta11
    - Fix PyPI upload: include LICENSE in sdist
    0.1.0-beta10
    - Auto-fill NaN with DEM ground reference; clamp near-ground noise
    0.1.0-beta9
    - Fix numpy dtype crash in QGIS; consolidate backend detection
    0.1.0-beta8
    - Fix plugin not appearing in Processing Toolbox; defer install prompt
    0.1.0-beta7
    - Publish workflow gates on passing tests
    0.1.0-beta6
    - Auto-detect outdated library and prompt to upgrade
    0.1.0-beta5
    - CI fixes: simplified build workflow; tags no longer trigger redundant workflows
    0.1.0-beta4
    - Library installed via pip (auto-prompted); EPW proxy support; remove bundled binaries
    0.1.0-beta1 - First public beta
    - Tmrt and thermal comfort; SVF preprocessing; anisotropic sky; GPU shadows
    0.1.0-alpha1 - Internal alpha
    - Single timestep and timeseries Tmrt; SVF; UTCI/PET; EPW import; tiled processing
