Skip to content

URBADAPT/URBADAPT-HEAT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

212 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

URBADAPT-HEAT

A scalable geospatial framework for city-level urban heat risk assessment
and public–private adaptation cost-benefit analysis

License: CC0 1.0 Python 3.10 CLIMADA 6.1.0 Platform

πŸ“– Wiki Β· βš™οΈ Installation Β· πŸš€ Quick start Β· πŸ“„ Citation


Overview

URBADAPT-HEAT v1.0 is the heat-specific implementation of the URBADAPT modular framework for urban climate risk assessment and adaptation planning. Built on the CLIMADA probabilistic risk engine (v6.1.0), it provides a fully reproducible, city-agnostic pipeline that:

  • Maps urban heat hazard at ~100 m resolution from the UrbClim high-resolution urban climate dataset, for a 2020 synthetic baseline and climate projections to 2050 under four CMIP6 scenarios.
  • Quantifies heat-attributable mortality using age-stratified population exposure (WorldPop + Wittgenstein Centre demographics) and epidemiologically calibrated impact functions (Burke et al. 2025).
  • Evaluates three adaptation pathways β€” air conditioning (AC), urban street trees, and early warning systems (EWS) β€” through their physical mechanisms (hazard modification, impact-function attenuation, event-specific mortality reduction), explicitly representing cross-pathway interactions.
  • Integrates a 25-year discounted cost-benefit analysis including externalities (AC waste heat), co-benefits (vegetation β†’ reduced AC electricity demand), and distributional outcomes stratified by a composite Social Vulnerability Index.
  • Identifies cost-effective adaptation portfolios via Pareto-frontier budget optimisation.

Configuration is fully externalised to city-specific YAML files β€” the same analytical code runs unchanged across all cities.

URBADAPT-HEAT workflow diagram

Repository structure

URBADAPT-HEAT/
β”œβ”€β”€ logo_urbadapt.png
β”œβ”€β”€ LICENSE                          # CC0 1.0
└── urban-heat/
    β”œβ”€β”€ environment.yml              # Conda environment (Python 3.10, conda-forge)
    β”œβ”€β”€ pyproject.toml               # cityheat package metadata
    β”œβ”€β”€ launch_windows.bat           # One-click Windows launcher
    β”œβ”€β”€ cityheat/                    # Python helper package
    β”‚   β”œβ”€β”€ config.py                # YAML config loader/validator
    β”‚   β”œβ”€β”€ data_io.py               # Raster, NetCDF, geodata I/O
    β”‚   β”œβ”€β”€ grids.py                 # Reference grid, reprojection, FUA mask
    β”‚   β”œβ”€β”€ hazards.py               # UrbClim T2M processing, tree-cooling scaling
    β”‚   β”œβ”€β”€ impacts.py               # Age-varying impact functions, deaths with AC
    β”‚   β”œβ”€β”€ benefits.py              # Event-to-annual interpolation, discounting, PV
    β”‚   β”œβ”€β”€ costs.py                 # AC CAPEX/maintenance/electricity PV calculators
    β”‚   β”œβ”€β”€ ac_downscale.py          # Logistic income-rank AC coverage downscaling
    β”‚   β”œβ”€β”€ trees.py                 # Ξ”GVI β†’ cost mapping, ramp years, O&M/CAPEX split
    β”‚   β”œβ”€β”€ mix.py                   # Budget grid-search, Pareto-optimal policy mixes
    β”‚   β”œβ”€β”€ vulnerability_layer.py   # Static and dynamic SVI construction
    β”‚   β”œβ”€β”€ nb09_improved.py         # Monte Carlo uncertainty quantification (PAWN)
    β”‚   β”œβ”€β”€ nb10_summary.py          # Summary statistics and reporting
    β”‚   β”œβ”€β”€ plotting.py              # Standard maps and result figures
    β”‚   └── run_city.py              # Full-city pipeline orchestrator
    β”œβ”€β”€ configs/                     # City-specific YAML configuration files
    β”‚   β”œβ”€β”€ rome.yml
    β”‚   β”œβ”€β”€ athens.yml
    β”‚   β”œβ”€β”€ lisbon.yml
    β”‚   β”œβ”€β”€ copenhagen.yml
    β”‚   β”œβ”€β”€ genova.yml
    β”‚   └── barcelona.yml
    β”œβ”€β”€ data_manifests/              # Google Drive sync manifests (per city)
    β”œβ”€β”€ scripts/                     # Standalone preprocessing scripts
    β”‚   β”œβ”€β”€ build_delta_bands.py     # Build CMIP6 climate-uncertainty delta CSV
    β”‚   β”œβ”€β”€ build_dynamic_exposures.py
    β”‚   β”œβ”€β”€ build_projected_vulnerability.py
    β”‚   β”œβ”€β”€ download_drmkc_vulnerability.py
    β”‚   └── prepare_gvi_projections.py
    β”œβ”€β”€ notebooks/
    β”‚   β”œβ”€β”€ 00_run_city.ipynb        # Driver notebook (calls run_city.py)
    β”‚   └── city_agnostic/
    β”‚       └── January2026/         # Canonical city-agnostic pipeline
    β”‚           β”œβ”€β”€ 01_setup_0126.ipynb
    β”‚           β”œβ”€β”€ 02_grids_0126.ipynb
    β”‚           β”œβ”€β”€ 03_hazard_exposure_0126.ipynb
    β”‚           β”œβ”€β”€ 04_impact_functions_0126.ipynb
    β”‚           β”œβ”€β”€ 05_AC_0126.ipynb
    β”‚           β”œβ”€β”€ 06_EWS_0126.ipynb
    β”‚           β”œβ”€β”€ 07_vegetation_0126.ipynb
    β”‚           └── 08_CBA_0126.ipynb
    β”‚       └── <City>/March2026/    # City-specific runs with uncertainty (NB09, NB10)
    β”œβ”€β”€ data/                        # Input data (gitignored; synced from Drive)
    └── outputs/                     # Model outputs (gitignored)

Installation

Prerequisites

Step-by-step

1. Clone the repository

git clone https://github.com/URBADAPT/URBADAPT-HEAT.git
cd URBADAPT-HEAT

2. Create and activate the conda environment

conda env create -f urban-heat/environment.yml
conda activate urbanheat

All packages install from the conda-forge channel. Key pinned dependencies: Python 3.10 Β· CLIMADA 6.1.0 Β· rasterio 1.4.3 Β· geopandas 1.1.1 Β· xarray 2025.6.1.

3. Install the cityheat helper package

cd urban-heat
pip install -e .

4. Register the Jupyter kernel

python -m ipykernel install --user --name urbanheat --display-name "Python (urbanheat)"

5. Launch JupyterLab

jupyter-lab

Windows shortcut: edit PROJECT_DIR in urban-heat/launch_windows.bat and double-click. It handles conda activation, environment creation, kernel registration, and JupyterLab launch automatically.


Data access

Input data are not included in the repository (size). They live in three places:

  1. Google Drive β€” most static inputs (FUA, LCZ, vulnerability rasters, AC tables, T2M climate deltas, emulator bundle, etc.) are stored on Drive and synced by urban-heat/notebooks/.../01_setup_*.ipynb via city-specific manifests in urban-heat/data_manifests/ using gdown. Each manifest entry has an optional base_kind field: "data" (default) writes under urban-heat/data/<city>/; "outputs" writes under urban-heat/outputs/<city>/ (or urban-heat/outputs_variants/<variant>/<city>/ when an output variant is active) β€” used for the city-agnostic emulator bundle which NB07 expects under OUT.
  2. PROVIDE/VITO API β€” UrbClim daily-mean T2M NetCDFs are fetched directly during 01_setup_*.ipynb. Endpoints and city identifiers are specified per city in urban-heat/configs/<city>.yml under climate.urbclim_api.
  3. WorldPop R2025A age-structures API β€” 100 m age-stratified population rasters are fetched directly from the WorldPop hub REST API during NB02, using the WP_ISO3 country code and WP_YEARS declared in the city's YAML config. NB02 lands the files under urban-heat/data/<city>/worldpop/<ISO3>/<year>/ and re-uses them on subsequent runs. No manual download is required.

Reproducibility of generated inputs

Three input tables are produced by helper scripts in urban-heat/scripts/. The script outputs are mirrored to Drive for convenience (so a fresh clone + Drive sync gives a working pipeline out of the box), but the scripts themselves remain the source of truth for refreshing them:

1. scripts/build_delta_bands.py β€” produces T2MmeanDeltas/climate_change_provide_markups_bands.csv and ..._gcm.csv from the PROVIDE per-GCM delta files (the input root defaults to a sibling project directory; override with --deltas-root):

python scripts/build_delta_bands.py \
    --cities Rome Athens Lisbon Copenhagen \
    --scenarios CurPol GS SP ssp585 \
    --gcm-low-pct 25 --gcm-high-pct 75

2. scripts/download_drmkc_vulnerability.py β€” produces vulnerability/drmkc_vulnerability_projection.csv from the JRC Risk Data Hub API. Requires a personal JWT token obtained manually from the Risk Data Hub user info page:

export RDH_API_TOKEN='your-jwt-token-here'
python scripts/download_drmkc_vulnerability.py \
    --country-code IT --country-code GR --country-code PT --country-code DK \
    --output-dir urban-heat/data/Rome/vulnerability/

3. scripts/prepare_gvi_projections.py β€” produces vulnerability/gvi_projections.csv from the Huisman et al. (2025) SSP-GVI source CSV (download separately from the Huisman et al. Scientific Data paper):

python scripts/prepare_gvi_projections.py \
    --input /path/to/huisman_2025_ssp_gvi.csv \
    --iso3 ITA --iso3 GRC --iso3 PRT --iso3 DNK \
    --output urban-heat/data/Rome/vulnerability/gvi_projections.csv

A new user cloning the repo does not need to run these three scripts β€” NB01's Drive sync covers the standard 4-city pilot. Run them only when refreshing the underlying data sources (new GCM run, updated RDH snapshot, newer SSP-GVI release) or when adding a new city outside the pilot four.


Quick start

Once the environment is set up and data are in place, open the notebooks in order and point each to your city YAML at the top of the cell:

# Notebook What it does
01 01_setup_0126.ipynb Load config, resolve paths, sync data
02 02_grids_0126.ipynb Build reference grid and FUA mask
03 03_hazard_exposure_0126.ipynb Build daily T2M hazard; map population exposure
04 04_impact_functions_0126.ipynb Age-specific heat-mortality impact functions; baseline deaths
05 05_AC_0126.ipynb AC penetration downscaling; policy scenarios; waste-heat feedback
06 06_EWS_0126.ipynb Early warning system; warning days; avoided deaths and costs
07 07_vegetation_0126.ipynb GVI β†’ LST β†’ T2M cooling; tree-planting allocation and costs
08 08_CBA_0126.ipynb 25-year CBA; Pareto optimisation; equity stratification
09 09_uncertainty_*.ipynb Monte Carlo uncertainty; PAWN global sensitivity
10 10_summary_*.ipynb Aggregated results tables and figures

All city-specific parameters (NUTS3 identifiers, AC penetration rates, vulnerability projection parameters, tree costs, EWS thresholds, etc.) are controlled by the YAML config in urban-heat/configs/. See the City Configuration wiki page for the full parameter reference.


Documentation

Full documentation is available on the project wiki:

Page Description
Installation & Usage Detailed setup, data access, pipeline walkthrough
Framework Overview Architecture, design principles, module map
Hazard UrbClim T2M, synthetic baseline, CMIP6 delta scaling
Exposure Age-stratified population, WorldPop, Wittgenstein Centre
Vulnerability Composite SVI, dynamic projection, city parameters
Impact Functions Burke (2025) calibration, dose-response equations
Adaptation Pathways AC, street trees, EWS, cross-pathway interactions
Cost-Benefit Analysis 25-year CBA, budget optimisation, equity outputs
Uncertainty Analysis Structural, climate, parametric sensitivity (PAWN)
City Configuration YAML reference, adding a new city
Case Studies Rome Β· Athens Β· Lisbon Β· Copenhagen results

Citation

If you use URBADAPT-HEAT in your research, please cite:

Aboudrar-MΓ©da, A. & Falchetta, G. (2026). URBADAPT-HEAT v1.0: a scalable geospatial framework for city-level public-private adaptation infrastructure cost-benefit analysis and its urban heat risk implementation. In preparation.

@article{aboudrar_falchetta_2025_urbadaptheat,
  author  = {Aboudrar-M{\'e}da, Armande and Falchetta, Giacomo},
  title   = {{URBADAPT-HEAT} v1.0: a scalable geospatial framework for city-level
             public-private adaptation infrastructure cost-benefit analysis
             and its urban heat risk implementation},
  journal = {In preparation},
  year    = {2026}
}

License

This repository is released under the Creative Commons Zero v1.0 Universal (CC0 1.0) public domain dedication. See LICENSE for details.


Authors and contact

Name Affiliation Contact
Armande Aboudrar-MΓ©da CMCC armande.aboudrar-meda@cmcc.it
Giacomo Falchetta CMCC, IIASA giacomo.falchetta@cmcc.it

About

URBADAPT-HEAT v1.0: a scalable geospatial framework for city-level public-private adaptation infrastructure cost-benefit analysis and its urban heat risk implementation

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages