Solar Radiation & Climate Projection Pipeline

Back to README

This document describes the solar radiation subsystem. Because solar radiation is not part of the native Météo-France SYNOP (Surface Synoptic Observations) feed, it must be sourced externally.

This pipeline details how historical irradiance is collected from satellite and reanalysis databases, how it is attached to the existing SYNOP station coordinates, and how future climate-shifted irradiance is projected using the Delta-Change method. By linking this data to the station coordinates, the radiation metrics seamlessly plug into the multi-barycenter spatial aggregation described in METEO.md.


Nomenclature and Physical Quantities

All radiation columns follow a strict naming convention: radiation_{plane}_{source}_wm2.

The pipeline differentiates between two distinct physical measurements:

  1. POA (Plane-of-Array): The amount of solar radiation hitting a tilted surface (e.g., a solar panel).

  2. GHI (Global Horizontal Irradiance): The total amount of shortwave radiation received from above by a surface horizontal to the ground.

Plane

Source

Raw Column

Aggregated (National, Solar-Weighted)

poa (35° tilt)

pvgis

radiation_poa_pvgis_wm2 (+ _direct, _diffuse)

meteo_radiation_poa_pvgis_wm2_france_solar

ghi (Horizontal)

era5

radiation_ghi_era5_wm2

meteo_radiation_ghi_era5_wm2_france_solar

poa (Projected)

pvgis

radiation_poa_pvgis_proj_wm2

(Stored in synop_radiation_projected)


Part 1: PVGIS (Historical Baseline, Primary Source)

Module: collectors/collect_radiation.py · CLI: energy-collect · Table: raw_meteo.synop_radiation

The primary source for solar data is the Photovoltaic Geographical Information System (PVGIS), utilizing the SARAH-3 satellite database [JRC, 2017].

  • Quantity: Plane-of-array (POA) irradiance. The data assumes a 35° tilt, south-facing orientation, and includes horizon adjustments (using a 90 m Digital Elevation Model, or DEM) to account for terrain shadows. This closely mimics the real-world conditions of fixed photovoltaic panels.

  • Extraction Strategy: The collector iterates over the latitude/longitude of each SYNOP station, querying the PVGIS point API.

  • Units: Watts per square meter (W/m²). The direct (poa_direct), sky-diffuse (poa_sky_diffuse), and ground-diffuse (poa_ground_diffuse) components are summed to calculate the global POA if the poa_global total is absent.

  • Timestamps: UTC, floored to the hour. Night values are deterministic zeros.

  • Security: The PVGIS endpoint often sits behind corporate TLS interception. Verification is securely managed via the OS trust store (truststore) rather than disabling SSL.

Schema: synop_radiation

Column

Type

Description

date

TIMESTAMPTZ

UTC, hourly.

station_id

INTEGER

Foreign key to synop_stations.

radiation_poa_pvgis_wm2

DOUBLE

Global plane-of-array irradiance (W/m²).

radiation_poa_direct_pvgis_wm2

DOUBLE

Direct (beam) component.

radiation_poa_diffuse_pvgis_wm2

DOUBLE

Sky-diffuse component.

Note on coverage: The dataset spans 2012 to the end of 2023 (the current limit of the SARAH-3 dataset), covering ~6.3 million rows across 60 of the 62 stations (excluding two polar stations outside the metropolitan grid).


Part 2: ERA5 (Complementary Reanalysis)

Module: collectors/collect_radiation_era5.py · CLI: energy-collect-radiation-era5 · Table: raw_meteo.synop_radiation_era5

To complement PVGIS and extend coverage to the present day, the pipeline utilizes ERA5, the fifth-generation atmospheric reanalysis provided by the Copernicus Climate Data Store (CDS) [Hersbach et al., 2020].

  • Quantity: Global Horizontal Irradiance (GHI). ERA5 natively provides ssrd (Surface Solar Radiation Downwards) as accumulated Joules per square meter (J/m²). The pipeline converts this to a mean W/m² (by dividing by 3600).

  • Spatial Lookup: The module utilizes xarray to find the nearest grid point for each SYNOP station, avoiding heavy external dependencies like GDAL.

  • Scientific Rationale: Because POA (at a 35° tilt) and GHI are different physical quantities, ERA5 does not overwrite PVGIS. They are stored side-by-side in separate tables to allow for comparative analysis, while PVGIS remains the primary driver for the pipeline.

Schema: synop_radiation_era5

Column

Type

Description

date

TIMESTAMPTZ

UTC, hourly.

station_id

INTEGER

Foreign key to synop_stations.

radiation_ghi_era5_wm2

DOUBLE

Global horizontal irradiance from ERA5 (W/m²).

(Execution requires a Copernicus CDS account with the ERA5 license accepted).


Part 3: Climate Projection (Delta-Change Method)

Package: force/climate/ · CLI: energy-project-radiation · Table: raw_meteo.synop_radiation_projected

To anticipate future solar generation, this module projects irradiance for the horizons 2030, 2050, and 2080. It utilizes climate projections from CMIP6 (Coupled Model Intercomparison Project Phase 6) [Eyring et al., 2016] and the French DRIAS portal.

It evaluates two Shared Socioeconomic Pathways (SSPs):

  • SSP2-4.5: A “middle-of-the-road” moderate emissions scenario.

  • SSP5-8.5: A highly fossil-fuel driven “worst-case” scenario.

The Delta-Change Algorithm

Future irradiance is generated by applying a monthly shifting factor (\(\Delta_{month}\)) to the highly-granular historical PVGIS baseline. This preserves the realistic hourly variance (cloud cover fluctuations, day/night cycles) while shifting the overall monthly mean to match climate model predictions.

\[ \Delta_{month} = \frac{\overline{I}_{future}(month)}{\overline{I}_{baseline}(month)} \]
\[ I_{future}(t) = I_{PVGIS}(t) \times \Delta_{month} \]

(Note: The Delta factor is physically clipped to [0.5, 1.5] to prevent mathematical instability, and night zeros are strictly preserved).

Architecture

  • extractors.py: Provides a pluggable interface for climate sources.

    • CdsCmip6Extractor: Fetches CMIP6 rsds via cdsapi.

    • DriasEdrExtractor: Fetches Météo-France DRIAS data via OGC EDR (Environmental Data Retrieval) position queries.

  • projection.py: Calculates the monthly deltas between the baseline window [2015-2025] and the target future windows (e.g., 2050 utilizes [2040-2060]).


Part 4: Source Comparison and Audit

Script: scripts/audit/gen_pvgis_vs_era5.py

The pipeline includes an automated auditing tool to compare the two radiation sources. It joins the synop_radiation and synop_radiation_era5 tables and generates a comprehensive visual report (Outputs/audit/comparison/pvgis_vs_era5.png).

The audit renders a 4-panel comparison featuring monthly climatology, monthly-mean time series, a POA-vs-GHI scatter plot (correlation, regression, and ratio), and a per-station bias map. Because POA and GHI are physically distinct, the audit focuses on reporting correlation and ratio distributions rather than pure mathematical equality.


Data Coverage and Requirements

Component

Coverage

Output

PVGIS Baseline

2012-2023 across 60 stations

~6.3 M rows. POA mean: 185.6 W/m²

ERA5 Reanalysis

2012-Present across 62 stations

~7.86 M rows. GHI mean: 168 W/m²

CMIP6 Projections

2030, 2050, 2080 (SSP2-4.5 & SSP5-8.5)

~26.5 M rows across 42 stations (coarse grid drops some stations)

Comparison Audit

6.31 M paired hours evaluated

Correlation (\(r=0.71\)), POA/GHI Ratio (\(1.09\))

Execution Guide

Command

Action

energy-collect

Runs PVGIS radiation natively as part of standard data collection.

energy-collect-radiation-era5

Collects ERA5 GHI (Requires .cdsapirc token).

energy-project-radiation --source cmip6 --scenario ssp245 --horizon 2030

Executes Delta-Change projection (Requires .cdsapirc token).


Back to README