logo

Please note that this repository is used for development and review, so quality assessments should be considered work in progress until they are merged into the main branch

1.1.1. Satellite Surface Radiation Budget intercomparison for climate change monitoring#

Production date: 10-06-2025

Produced by: CNR-ISMAR, Andrea Storto, Vincenzo de Toma

🌍 Use case: Use surface radiation budget to monitor climate change#

❓ Quality assessment question(s)#

  • What is the climatology and temporal variability of SRB and its uncertainty? How consistent are the surface radiation budget products?

The Surface Radiation Budget (SRB) products allow quantifying the surface energy budget, the energy exchanges at the atmospheric lower boundary (with ocean, ice, and land), and their temporal and spatial variability, for use in several climate applications, such as, for instance: i) climate modeling and validation, where SRB data are essential for calibrating and validating general circulation models (GCMs) of the ocean and atmosphere. Accurate SRB measurements help improve model predictions of climate tendencies by ensuring that energy exchanges are correctly represented; ii) energy balance analysis, focusing on understanding the role of SRB on Earth’s energy balance, which influences global temperatures and climate dynamics. Significant variations in the SRB can indicate changes in climate forcings, such as increased greenhouse gases or variations in solar radiation, etc.; iii) surface temperature studies, where SRB data contribute to studying regional amplifications of climate variations; iv) research on other cycles, like for instance the hydrological cycle, for which SRB strongly influences the evaporation rate and, to a lesser extent, precipitation patterns. Their temporal coverage and spatial detail, however, vary significantly between the products. There exist offsets between the products, which tend to be significant for shortwave components, although they tend to cancel out in the net surface shortwave flux. Longwave fluxes are less consistent, in general, at low latitudes. In particular, biases of opposite sign (negative for CLARA products, positive for ESA and C3S products) and documented within the Product Validation and Intercomparison Reports, amplify the cross-product differences.

📢 Quality assessment statement#

These are the key outcomes of this assessment

  • The surface radiation budget (SRB) products capture the spatial and temporal variability of the radiative fluxes at the surface, for use in climate analyses, energy budget studies, and climate model assessment

  • The SRB products have different temporal coverage and spatial resolution, namely their combined use is not straightforward and it is recommended for advanced users only, or within selected periods

  • The consistency among the products concerning spatially averaged values is sufficient to capture the annual cycle of all the variables, both in the tropics and in the Nino 3.4 region. Moreover, there’s more agreement regarding the temporal variability for the net solar radiation across products than for the other variables investigated

  • Climatological maps and zonally averaged values indicate that the products suffer from poor consistency in some areas, e.g. longwave flux components (downwelling and outgoing) at low latitudes, and shortwave at high latitudes.

Using satellite data to estimate the surface radiation budget - comprising shortwave and longwave radiation at the interfaces between atmosphere and ocean, atmosphere and land, and atmosphere and ice - is often discontinuous and poses significant challenges for climate monitoring and model verification. These estimates can be influenced by various atmospheric conditions and instrument limitations, making their use complex and recommended only for expert users ([1]; [2]). Partial temporal (and spatial, to a lesser extent) sampling of the datasets hampers their easy utilization.

../../_images/f5a4c8e0-86fa-49eb-9b70-ebee0c7e3c6f.png

Fig. 1.1.1.1 Monthly Climatological Time Series of fluxes within the Tropical and Nino 3.4 region for all the datasets#

📋 Methodology#

We aim here to inter-compare the following catalogue entries from the Climate Data Store (CDS) by Copernicus:

  1. ESA Cloud Climate Change Initiative (ESA Cloud_cci) data: Cloud_cci ATSR2-AATSR L3C/L3U CLD_PRODUCTS v3.0.

  2. CLARA-A3: CM SAF cLoud, Albedo and surface RAdiation dataset from AVHRR data - Edition 3. Satellite Application Facility on Climate Monitoring (CLARA EUMETSAT A3)

  3. Sentinel 3A and Sentinel 3B, and the combined product from the Rutherford Appleton Laboratory under the Copernicus Climate Change Service (C3S) programme.

In particular, this analysis takes into account the Surface Radiation Budget Essential Climate Variable (ECV), in terms of the following ECV products:

  • Surface Reflected Solar Radiation (SRS);

  • Surface Incoming Solar Radiation (SIS);

  • Surface Downwelling Longwave Radiation (SDL);

  • Surface Net Downward Shortwave Radiation (SNS);

  • Surface Outgoing Longwave Radiation (SOL).

Please note that not all catalogue entries provide the above ECV products. For example, SRS/SOL (Surface Reflected Solar / Surface Outgoing Longwave radiation) is not provided in CLARA EUMETSAT A3, we derived the SRS/SOL by subtracting SIS/SDL (Surface Incoming Solar / Surface Downwelling Longwave radiation) and SNS/SNL (Surface Net Solar / Surface Net Longwave radiation). Please see the Download and transform section for details.

1. Choose the data to use and setup code

2. Download and Transform

3. Plot spatial weighted time series, time weighted means, spatial weighted zonal means

📈 Analysis and results#

Given the multi-panel nature of most of the figure in this assessment, please consider to open them in a separate tab on your browser.

1. Choose the data to use and setup code#

In this section, we import the required packages and set up the dataset names for further use in the following sections. Processing functions are also defined. The choice to use only the latest version of CLARA is intentional: previous versions are on the CDS for backwards compatibility reasons.

Hide code cell source

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from c3s_eqc_automatic_quality_control import diagnostics, download, plot, utils
import os
import seaborn as sns
import matplotlib.gridspec as gridspec
os.environ["CDSAPI_RC"] = os.path.expanduser("~/detoma_vincenzo/.cdsapirc")
plt.style.use("seaborn-v0_8-notebook")

# Variables to analyse
variables = ("srs", "sis", "sdl", "sol", "sns", "snl")

VARIABLES = tuple([var.upper() for var in variables])

collection_id = "satellite-surface-radiation-budget"
chunks = {"year": 1}
request_dict = {
    "CLARA EUMETSAT A3": {
        "start": "1979-01",
        "stop": "2020-12",
        "climate_data_record_type": "thematic_climate_data_record",
        "format": "zip",
        "origin": "eumetsat",
        "product_family": "clara_a3",
        "time_aggregation": "monthly_mean",
        "variable": [
            "surface_downwelling_shortwave_flux",
            "surface_downwelling_longwave_flux",
            "surface_upwelling_shortwave_flux",
            "surface_downwelling_shortwave_flux",
            "surface_net_downward_shortwave_flux",
            "surface_net_downward_longwave_flux",
        ],
        "version": "v2_0",
    },
    "CCI ENVISAT": {
        "start": "2003-01",
        "stop": "2011-12",
        "climate_data_record_type": "thematic_climate_data_record",
        "format": "zip",
        "origin": "esa",
        "product_family": "cci",
        "sensor_on_satellite": "aatsr_on_envisat",
        "time_aggregation": "monthly_mean",
        "variable": "all_variables",
    },
    "CCI ERS": {
        "start": "1997-01",
        "stop": "2002-12",
        "climate_data_record_type": "thematic_climate_data_record",
        "format": "zip",
        "origin": "esa",
        "product_family": "cci",
        "sensor_on_satellite": "atsr2_on_ers2",
        "time_aggregation": "monthly_mean",
        "variable": "all_variables",
    },
    "CCI S3A": {
        "start": "2017-01",
        "stop": "2022-06",
        "climate_data_record_type": "interim_climate_data_record",
        "format": "zip",
        "origin": "c3s",
        "product_family": "cci",
        "sensor_on_satellite": "slstr_on_sentinel_3a",
        "time_aggregation": "monthly_mean",
        "variable": "all_variables",
    },
    "CCI S3B": {
        "start": "2018-10",
        "stop": "2022-06",
        "climate_data_record_type": "interim_climate_data_record",
        "format": "zip",
        "origin": "c3s",
        "product_family": "cci",
        "sensor_on_satellite": "slstr_on_sentinel_3b",
        "time_aggregation": "monthly_mean",
        "variable": "all_variables",
    },
    "CCI S3A-S3B": {
        "start": "2018-10",
        "stop": "2022-06",
        "climate_data_record_type": "interim_climate_data_record",
        "format": "zip",
        "origin": "c3s",
        "product_family": "cci",
        "sensor_on_satellite": "slstr_on_sentinel_3a_3b",
        "time_aggregation": "monthly_mean",
        "variable": "all_variables",
    },
}

# Functions to cache
def preprocess_time(ds):
    if "time" in ds and "units" in ds["time"].attrs:
        # Could not decode
        ds = ds.squeeze("time", drop=True)
    if "time" not in ds:
        time = pd.to_datetime(ds.attrs["time_coverage_start"])
        ds = ds.assign_coords(time=time)
    return ds


def spatial_weighted_mean(ds, lon_slice, lat_slice, W, S):
    ds = utils.regionalise(ds, lon_slice=lon_slice, lat_slice=lat_slice)
    return diagnostics.spatial_weighted_mean(ds, weights=W, skipna=S)

def spatial_count(ds, lon_slice, lat_slice):
    ds = utils.regionalise(ds, lon_slice=lon_slice, lat_slice=lat_slice)
    return ds.count(dim=['latitude', 'longitude'])

def mean_map_period(ds, start, stop, W, S):
    ds = ds.sel(time=slice(start, stop)).assign_coords({'time':('time', np.array(pd.date_range(start, stop, freq='MS'), dtype=np.datetime64), ds.time.attrs)})
    ds_map = diagnostics.time_weighted_mean(ds, weights=W, skipna=S).rename({var: var.lower() for var in ds.data_vars})
    return ds_map

xarray_kwargs = {
    "drop_variables": [
        "time_bounds",
        "time_bnds",
        "lon_bnds",
        "lat_bnds",
        "record_status",
    ],
    "preprocess": preprocess_time,
}
xarray_kwargs_a3 = {
    "drop_variables": [
        "time_bounds",
        "time_bnds",
        "lon_bnds",
        "lat_bnds",
    ],
    "preprocess": preprocess_time,
}

2. Download and Transform#

The code below will download the products.

Hide code cell source

clara_start, clara_end = "1982-01", "2018-12"
esa_ers2_start, esa_ers2_end = "1997-01", "2002-12"
esa_envisat_start, esa_envisat_end = "2003-01", "2011-12" 
sentinel_start, sentinel_end = "2019-01", "2020-12"

Hide code cell source

ds_maps = {}
ds_timeseries = {}
ds_nino3_4 = {}
ds_count_tro = {}
ds_count_nino3_4 = {}
ds_maps_p2 = {}
ds_maps_p3 = {}
ds_maps_p4 = {}
rec_status = {}
weights=True
skipna=True
prod_to_coarsen = ["CLARA EUMETSAT A3"]
p = []
datasets = []
for product, request in request_dict.items():
    start = request.pop("start")
    stop = request.pop("stop")
    requests = download.update_request_date(
        request, start=start, stop=stop, stringify_dates=True
    )
    p.append(product)

    # Maps
    ds = download.download_and_transform(
        collection_id,
        requests,
        #transform_func=diagnostics.time_weighted_mean,
        chunks=chunks,
        #transform_chunks=False,
        **(xarray_kwargs_a3 if product=="CLARA EUMETSAT A3" else xarray_kwargs),
        quiet=True,
    )
    ds.attrs.update({"start": start, "stop": stop})
    if product=='CLARA EUMETSAT A3':
        srs = (ds["SIS"] - ds["SNS"]).rename('SRS')
        srs = srs.where(srs>0)
        ds = ds.assign(srs=srs)
        sol = (ds["SDL"] - ds["SNL"]).rename("SOL")
        ds = ds.assign(sol=sol)
        rec_status[product] = ds['record_status']
        ds = ds.drop_vars(['record_status'])
    else:
        rec_status[product] = rec_status["CLARA EUMETSAT A3"]

    ds = ds.assign_coords({'time':('time', np.array(pd.date_range(start, stop, freq='MS'), dtype=np.datetime64), ds.time.attrs)})
    ds = ds.rename({var: var.upper() for var in ds.data_vars})
    ds['SIS'].attrs['long_name'] = 'surface incoming solar radiation'
    
    if product in prod_to_coarsen:
        ds = ds.coarsen(latitude=2, longitude=2).mean()

    rec_status[product] = rec_status[product].sel(time=slice(ds.time[0], ds.time[-1]))
    ds = ds.where(rec_status[product]==0)
    
    curr_time = pd.date_range(start, stop)
    clara_time = pd.date_range(clara_start, clara_end)
    esa_ers2_time = pd.date_range(esa_ers2_start, esa_ers2_end)
    esa_envisat_time = pd.date_range(esa_envisat_start, esa_envisat_end)
    sentinel_time = pd.date_range(sentinel_start, sentinel_end)
    if esa_ers2_time[0] in curr_time or esa_ers2_time[-1] in curr_time:
        ds_maps_p2[product] = mean_map_period(ds, esa_ers2_start, esa_ers2_end, W=weights, S=skipna)
    if esa_envisat_time[0] in curr_time or esa_envisat_time[-1] in curr_time:
        ds_maps_p3[product] = mean_map_period(ds, esa_envisat_start, esa_envisat_end, W=weights, S=skipna) 
    if sentinel_time[0] in curr_time or sentinel_time[-1] in curr_time:
        ds_maps_p4[product] = mean_map_period(ds, sentinel_start, sentinel_end, W=weights, S=skipna) 
        
    ds_timeseries[product] = spatial_weighted_mean(ds, lon_slice=slice(-180, 180), lat_slice=slice(-30, 30), W=weights, S=skipna).rename({var: var.lower() for var in ds.data_vars})
    ds_count_tro[product] = spatial_count(ds, lon_slice=slice(-180, 180), lat_slice=slice(-30, 30)).rename({var: var.lower() for var in ds.data_vars})
    ds_nino3_4[product] = spatial_weighted_mean(ds, lon_slice=slice(-170, -120), lat_slice=slice(-5, 5), W=weights, S=skipna).rename({var: var.lower() for var in ds.data_vars})
    ds_count_nino3_4[product] = spatial_count(ds, lon_slice=slice(-170, -120), lat_slice=slice(-5, 5)).rename({var: var.lower() for var in ds.data_vars})

Hide code cell output

2026-09-01 08:16:01,650 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:16:01,651 INFO Request ID is 6bde0d46-8318-451e-91ca-4ef2dfded881
2026-09-01 08:16:01,693 INFO status has been updated to accepted
2026-09-01 08:16:34,355 INFO status has been updated to running
2026-09-01 08:17:55,632 INFO status has been updated to successful
Recovering from HTTP error [502 Bad Gateway], attempt 1 of 500                          
Retrying in 120 seconds
2026-09-01 08:20:01,844 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:20:01,845 INFO Request ID is ba73acda-4ab9-42b9-aafb-c720bff72bf0
2026-09-01 08:20:01,885 INFO status has been updated to accepted
2026-09-01 08:20:24,443 INFO status has been updated to running
2026-09-01 08:21:19,684 INFO status has been updated to successful
2026-09-01 08:21:24,378 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:21:24,379 INFO Request ID is 4ae2876f-53cf-4e6e-bfbe-6023538d221c
2026-09-01 08:21:24,413 INFO status has been updated to accepted
2026-09-01 08:21:57,121 INFO status has been updated to running
2026-09-01 08:22:39,914 INFO status has been updated to successful
2026-09-01 08:22:43,894 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:22:43,895 INFO Request ID is edc94e6b-4892-48fa-adf1-3b4ad0a65ea3
2026-09-01 08:22:43,935 INFO status has been updated to accepted
2026-09-01 08:23:16,309 INFO status has been updated to running
2026-09-01 08:23:59,078 INFO status has been updated to successful
2026-09-01 08:24:04,216 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:24:04,217 INFO Request ID is 1e4ead18-d9c3-4369-a6d3-ba1df9965246
2026-09-01 08:24:04,268 INFO status has been updated to accepted
2026-09-01 08:24:25,220 INFO status has been updated to running
2026-09-01 08:25:19,459 INFO status has been updated to successful
2026-09-01 08:25:24,590 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:25:24,591 INFO Request ID is 128ac3a4-67f5-4c57-a63b-3cce6168a08c
2026-09-01 08:25:24,656 INFO status has been updated to accepted
2026-09-01 08:25:45,998 INFO status has been updated to running
2026-09-01 08:26:40,210 INFO status has been updated to successful
2026-09-01 08:26:44,649 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:26:44,650 INFO Request ID is 05cf98c3-d254-42db-a44b-a047f17fe914
2026-09-01 08:26:44,711 INFO status has been updated to accepted
2026-09-01 08:27:17,416 INFO status has been updated to running
2026-09-01 08:28:00,190 INFO status has been updated to successful
2026-09-01 08:28:04,744 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:28:04,746 INFO Request ID is 02452b21-39a4-4926-82fc-76bedc185a4c
2026-09-01 08:28:07,230 INFO status has been updated to accepted
2026-09-01 08:28:28,931 INFO status has been updated to running
2026-09-01 08:29:23,135 INFO status has been updated to successful
2026-09-01 08:29:27,869 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:29:27,870 INFO Request ID is 13f023c7-fdcf-4040-a3c0-fec8c50142e4
2026-09-01 08:29:27,907 INFO status has been updated to accepted
2026-09-01 08:30:01,816 INFO status has been updated to running
2026-09-01 08:30:44,622 INFO status has been updated to successful
2026-09-01 08:30:50,267 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:30:50,269 INFO Request ID is 6bf81531-f5c0-4d58-b908-3e8ef137c1ab
2026-09-01 08:30:51,032 INFO status has been updated to accepted
2026-09-01 08:31:12,091 INFO status has been updated to running
2026-09-01 08:31:40,655 INFO status has been updated to successful
2026-09-01 08:31:44,628 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:31:44,629 INFO Request ID is 7be09dd9-c581-4f3f-9a12-095342d096c5
2026-09-01 08:31:44,763 INFO status has been updated to accepted
2026-09-01 08:32:37,052 INFO status has been updated to running
2026-09-01 08:33:02,721 INFO status has been updated to successful
2026-09-01 08:33:07,135 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:33:07,136 INFO Request ID is 785ea144-d11c-46fd-85b2-008f24dabace
2026-09-01 08:33:07,353 INFO status has been updated to accepted
2026-09-01 08:33:20,667 INFO status has been updated to running
2026-09-01 08:33:57,399 INFO status has been updated to successful
2026-09-01 08:34:01,455 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:34:01,456 INFO Request ID is a0f0b113-63fc-45d2-adb2-49cc94b360de
2026-09-01 08:34:01,475 INFO status has been updated to accepted
2026-09-01 08:34:35,513 INFO status has been updated to running
2026-09-01 08:35:18,524 INFO status has been updated to successful
2026-09-01 08:35:24,851 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:35:24,852 INFO Request ID is da55257f-cc45-4a61-8e97-ed937ebd9c6e
2026-09-01 08:35:24,932 INFO status has been updated to accepted
2026-09-01 08:35:46,651 INFO status has been updated to running
2026-09-01 08:36:40,986 INFO status has been updated to successful
2026-09-01 08:36:45,692 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:36:45,693 INFO Request ID is 8cd3fa3a-4769-4eb9-824e-d475b3309595
2026-09-01 08:36:45,723 INFO status has been updated to accepted
2026-09-01 08:37:19,083 INFO status has been updated to running
2026-09-01 08:38:01,908 INFO status has been updated to successful
2026-09-01 08:38:05,702 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:38:05,703 INFO Request ID is 04f731e1-f223-4a2d-a4ce-8451f81fe6d1
2026-09-01 08:38:06,123 INFO status has been updated to accepted
2026-09-01 08:38:38,679 INFO status has been updated to running
2026-09-01 08:39:21,453 INFO status has been updated to successful
2026-09-01 08:39:25,237 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:39:25,239 INFO Request ID is 15368244-0eec-41e6-b5ee-0bf81dfe0cee
2026-09-01 08:39:25,295 INFO status has been updated to accepted
2026-09-01 08:39:46,348 INFO status has been updated to running
2026-09-01 08:42:17,236 INFO status has been updated to successful
2026-09-01 08:42:21,571 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:42:21,572 INFO Request ID is dba67ad5-d341-403e-abd8-899385314b9c
2026-09-01 08:42:21,611 INFO status has been updated to accepted
2026-09-01 08:42:42,993 INFO status has been updated to running
2026-09-01 08:43:37,221 INFO status has been updated to successful
2026-09-01 08:43:40,969 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:43:40,970 INFO Request ID is e23664bd-f78a-4e60-8832-d03b9f93e7ad
2026-09-01 08:43:41,007 INFO status has been updated to accepted
2026-09-01 08:44:02,174 INFO status has been updated to running
2026-09-01 08:44:30,756 INFO status has been updated to successful
2026-09-01 08:44:35,770 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:44:35,771 INFO Request ID is b9dc23af-7d18-4f18-b0be-5cbc2ab3ba23
2026-09-01 08:44:39,994 INFO status has been updated to accepted
2026-09-01 08:45:01,150 INFO status has been updated to running
2026-09-01 08:45:57,719 INFO status has been updated to successful
2026-09-01 08:46:02,803 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:46:02,804 INFO Request ID is 1457da1d-329f-4f26-a42a-c46a9dfe816a
2026-09-01 08:46:02,845 INFO status has been updated to accepted
2026-09-01 08:46:23,841 INFO status has been updated to running
2026-09-01 08:47:18,951 INFO status has been updated to successful
2026-09-01 08:47:25,508 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:47:25,509 INFO Request ID is 6fd0a086-fa1e-4d4b-bfaa-f9de7ea2907a
2026-09-01 08:47:25,549 INFO status has been updated to accepted
2026-09-01 08:48:00,719 INFO status has been updated to running
2026-09-01 08:48:43,525 INFO status has been updated to successful
2026-09-01 08:48:48,015 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:48:48,016 INFO Request ID is 0225b3fa-c7df-4e85-a758-3be23ffb444d
2026-09-01 08:48:48,064 INFO status has been updated to accepted
2026-09-01 08:49:21,433 INFO status has been updated to running
2026-09-01 08:50:04,206 INFO status has been updated to successful
2026-09-01 08:50:08,700 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:50:08,701 INFO Request ID is 3894af96-75a5-4c11-abce-48ee31610208
2026-09-01 08:50:08,760 INFO status has been updated to accepted
2026-09-01 08:50:30,051 INFO status has been updated to running
2026-09-01 08:51:24,821 INFO status has been updated to successful
2026-09-01 08:51:28,686 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:51:28,687 INFO Request ID is 448e2684-3a96-43f1-961d-5360c2588912
2026-09-01 08:51:28,700 INFO status has been updated to accepted
2026-09-01 08:51:49,919 INFO status has been updated to running
2026-09-01 08:52:44,279 INFO status has been updated to successful
2026-09-01 08:52:48,044 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:52:48,045 INFO Request ID is b47135cf-b8da-4142-bb02-ac351c7628c0
2026-09-01 08:52:48,081 INFO status has been updated to accepted
2026-09-01 08:53:01,474 INFO status has been updated to running
2026-09-01 08:54:03,714 INFO status has been updated to successful
2026-09-01 08:54:07,928 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:54:07,929 INFO Request ID is c6d44fac-d19b-4d03-9db0-d4f8353664ad
2026-09-01 08:54:07,968 INFO status has been updated to accepted
2026-09-01 08:54:32,244 INFO status has been updated to running
2026-09-01 08:55:26,494 INFO status has been updated to successful
2026-09-01 08:55:30,790 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:55:30,790 INFO Request ID is 497f231b-b769-4f35-b00d-f4f92b06a7ea
2026-09-01 08:55:30,825 INFO status has been updated to accepted
2026-09-01 08:55:51,780 INFO status has been updated to running
2026-09-01 08:56:47,243 INFO status has been updated to successful
2026-09-01 08:56:53,131 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:56:53,132 INFO Request ID is 848bcbdc-258c-4a9b-b42d-4644f4eae4a2
2026-09-01 08:56:53,156 INFO status has been updated to accepted
2026-09-01 08:57:42,692 INFO status has been updated to running
2026-09-01 08:58:48,959 INFO status has been updated to successful
2026-09-01 08:58:55,686 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 08:58:55,687 INFO Request ID is 3b068c0d-ef7f-4a65-b2c7-d272176d84e6
2026-09-01 08:58:59,376 INFO status has been updated to accepted
2026-09-01 08:59:48,867 INFO status has been updated to running
2026-09-01 09:00:53,358 INFO status has been updated to successful
2026-09-01 09:01:00,594 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:01:00,595 INFO Request ID is 1acf75b8-80fd-47b0-a8f5-88a8942b95db
2026-09-01 09:01:00,627 INFO status has been updated to accepted
2026-09-01 09:01:26,492 INFO status has been updated to running
2026-09-01 09:02:20,722 INFO status has been updated to successful
2026-09-01 09:02:26,944 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:02:26,944 INFO Request ID is 5be90869-f936-4787-b8c9-44e54846bdce
2026-09-01 09:02:27,954 INFO status has been updated to accepted
2026-09-01 09:02:51,185 INFO status has been updated to running
2026-09-01 09:03:47,255 INFO status has been updated to successful
2026-09-01 09:03:52,846 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:03:52,847 INFO Request ID is a9509ac0-f969-48f2-88e5-be4eae9d5ff1
2026-09-01 09:03:52,901 INFO status has been updated to accepted
2026-09-01 09:04:26,970 INFO status has been updated to running
2026-09-01 09:05:09,788 INFO status has been updated to successful
2026-09-01 09:05:13,880 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:05:13,881 INFO Request ID is 2e13b201-1054-45c2-b6a9-be13fb9fb89b
2026-09-01 09:05:13,935 INFO status has been updated to accepted
2026-09-01 09:06:03,433 INFO status has been updated to running
2026-09-01 09:06:29,099 INFO status has been updated to successful
2026-09-01 09:06:41,173 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:06:41,174 INFO Request ID is ef74ccc2-4473-405e-bb2e-103293b88afa
2026-09-01 09:06:41,219 INFO status has been updated to accepted
2026-09-01 09:06:55,988 INFO status has been updated to running
2026-09-01 09:07:33,478 INFO status has been updated to successful
2026-09-01 09:07:38,505 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:07:38,507 INFO Request ID is 86a42c9d-a567-4a4b-bcfa-a54eab75e3e3
2026-09-01 09:07:38,528 INFO status has been updated to accepted
2026-09-01 09:08:11,364 INFO status has been updated to running
2026-09-01 09:08:54,577 INFO status has been updated to successful
2026-09-01 09:08:58,385 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:08:58,386 INFO Request ID is 909cc3f1-3072-4b79-9313-a73a2c4c3f91
2026-09-01 09:08:58,423 INFO status has been updated to accepted
2026-09-01 09:09:30,869 INFO status has been updated to running
2026-09-01 09:10:14,113 INFO status has been updated to successful
2026-09-01 09:10:19,347 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:10:19,348 INFO Request ID is 6bb94ccb-a929-4f2f-8809-2c4d51c0b8e0
2026-09-01 09:10:19,393 INFO status has been updated to accepted
2026-09-01 09:11:35,429 INFO status has been updated to running
2026-09-01 09:12:15,587 INFO status has been updated to successful
2026-09-01 09:12:20,515 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:12:20,516 INFO Request ID is 12574678-eac4-44f7-8ba8-15075e35e6c9
2026-09-01 09:12:20,576 INFO status has been updated to accepted
2026-09-01 09:12:41,992 INFO status has been updated to running
2026-09-01 09:13:10,517 INFO status has been updated to successful
2026-09-01 09:13:13,910 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:13:13,911 INFO Request ID is 15da682a-b287-4ec3-bb50-d401cf421af7
2026-09-01 09:13:13,935 INFO status has been updated to accepted
2026-09-01 09:13:35,983 INFO status has been updated to running
2026-09-01 09:14:30,211 INFO status has been updated to successful
2026-09-01 09:14:35,139 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:14:35,139 INFO Request ID is cceb58d6-c2a9-458d-9bb3-cd2aaa3a9f5a
2026-09-01 09:14:35,176 INFO status has been updated to accepted
2026-09-01 09:15:10,818 INFO status has been updated to running
2026-09-01 09:15:53,596 INFO status has been updated to successful
2026-09-01 09:15:59,267 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:15:59,268 INFO Request ID is a33ce98d-ec0b-414e-95ce-966a054c0961
2026-09-01 09:16:03,400 INFO status has been updated to accepted
2026-09-01 09:16:12,410 INFO status has been updated to running
2026-09-01 09:16:54,191 INFO status has been updated to successful
/data/common/miniforge3/envs/wp5/lib/python3.12/site-packages/earthkit/data/readers/netcdf/fieldlist.py:202: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  return xr.open_mfdataset(
2026-09-01 09:21:50,964 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:21:50,965 INFO Request ID is 52bbaba2-f2f2-434f-a65f-d7afade6d12b
2026-09-01 09:21:51,101 INFO status has been updated to accepted
2026-09-01 09:22:15,088 INFO status has been updated to running
2026-09-01 09:23:47,758 INFO status has been updated to successful
2026-09-01 09:23:49,449 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:23:49,450 INFO Request ID is 47412d75-32fa-4f61-80cb-eb730272020a
2026-09-01 09:23:49,490 INFO status has been updated to accepted
2026-09-01 09:24:14,052 INFO status has been updated to running
2026-09-01 09:25:48,626 INFO status has been updated to successful
2026-09-01 09:25:50,744 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:25:50,745 INFO Request ID is 2099ca3a-7442-4070-8978-16aabf2f6774
2026-09-01 09:25:50,821 INFO status has been updated to accepted
2026-09-01 09:26:08,564 INFO status has been updated to running
2026-09-01 09:27:49,070 INFO status has been updated to successful
2026-09-01 09:27:51,018 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:27:51,019 INFO Request ID is 65c499a9-b427-47b1-bae8-2267da883cf8
2026-09-01 09:27:51,494 INFO status has been updated to accepted
2026-09-01 09:28:12,616 INFO status has been updated to running
2026-09-01 09:29:45,532 INFO status has been updated to successful
2026-09-01 09:29:48,284 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:29:48,285 INFO Request ID is 731e1ede-39d5-4c07-880b-b63eaaf46b9a
2026-09-01 09:29:48,603 INFO status has been updated to accepted
2026-09-01 09:30:10,416 INFO status has been updated to running
2026-09-01 09:31:43,895 INFO status has been updated to successful
2026-09-01 09:31:46,257 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:31:46,257 INFO Request ID is 8115d92c-2083-46c8-892f-b58da45872dc
2026-09-01 09:31:47,092 INFO status has been updated to accepted
2026-09-01 09:32:44,492 INFO status has been updated to running
2026-09-01 09:33:49,934 INFO status has been updated to successful
2026-09-01 09:33:51,243 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:33:51,244 INFO Request ID is 9e68d4c7-71e5-4ae8-b68b-c32410bb06f2
2026-09-01 09:33:51,265 INFO status has been updated to accepted
2026-09-01 09:34:12,570 INFO status has been updated to running
2026-09-01 09:36:43,738 INFO status has been updated to successful
2026-09-01 09:36:45,826 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:36:45,826 INFO Request ID is 1544c299-7082-46c4-8ea5-7c051533f382
2026-09-01 09:36:45,860 INFO status has been updated to accepted
2026-09-01 09:37:19,128 INFO status has been updated to running
2026-09-01 09:38:40,424 INFO status has been updated to successful
2026-09-01 09:38:48,473 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:38:48,474 INFO Request ID is 538d4ca9-d9cb-4fc9-a23c-c0c3e0666e64
2026-09-01 09:38:48,506 INFO status has been updated to accepted
2026-09-01 09:39:12,470 INFO status has been updated to running
2026-09-01 09:40:45,165 INFO status has been updated to successful
2026-09-01 09:40:57,429 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:40:57,430 INFO Request ID is d784d5d9-9e45-441a-80c2-0322c06f72cf
2026-09-01 09:40:59,652 INFO status has been updated to accepted
2026-09-01 09:41:32,254 INFO status has been updated to running
2026-09-01 09:42:53,696 INFO status has been updated to successful
2026-09-01 09:42:57,110 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:42:57,111 INFO Request ID is 41613612-ad47-4cce-b4bc-3c9bfd3cea4b
2026-09-01 09:42:57,143 INFO status has been updated to accepted
2026-09-01 09:43:29,521 INFO status has been updated to running
2026-09-01 09:44:50,792 INFO status has been updated to successful
2026-09-01 09:44:54,230 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:44:54,231 INFO Request ID is 943d99ea-4a4c-4a47-af80-25194abfea6d
2026-09-01 09:44:54,263 INFO status has been updated to accepted
2026-09-01 09:45:15,234 INFO status has been updated to running
2026-09-01 09:46:48,488 INFO status has been updated to successful
2026-09-01 09:46:50,809 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:46:50,810 INFO Request ID is c0842c5b-264b-4b49-a471-1fb5f8f5391d
2026-09-01 09:46:50,875 INFO status has been updated to accepted
2026-09-01 09:47:23,437 INFO status has been updated to running
2026-09-01 09:48:44,819 INFO status has been updated to successful
2026-09-01 09:48:46,451 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:48:46,452 INFO Request ID is e118a045-0fd8-4c48-ae65-797d1ec7fd7f
2026-09-01 09:48:46,496 INFO status has been updated to accepted
2026-09-01 09:49:02,008 INFO status has been updated to running
2026-09-01 09:50:03,851 INFO status has been updated to successful
2026-09-01 09:50:06,343 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:50:06,344 INFO Request ID is da370e3c-ece9-4aef-82bd-f9fa0789a0af
2026-09-01 09:50:06,391 INFO status has been updated to accepted
2026-09-01 09:50:28,946 INFO status has been updated to running
2026-09-01 09:51:25,162 INFO status has been updated to successful
2026-09-01 09:51:35,009 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:51:35,010 INFO Request ID is 3c301d4c-da60-4156-aa0a-b17b599cb8a2
2026-09-01 09:51:35,033 INFO status has been updated to accepted
2026-09-01 09:51:55,995 INFO status has been updated to running
2026-09-01 09:54:28,520 INFO status has been updated to successful
2026-09-01 09:54:31,704 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:54:31,706 INFO Request ID is 58525460-4ee0-4ec4-a50c-9019f410b2d7
2026-09-01 09:54:31,760 INFO status has been updated to accepted
2026-09-01 09:55:05,007 INFO status has been updated to running
2026-09-01 09:55:22,128 INFO status has been updated to accepted
2026-09-01 09:55:47,803 INFO status has been updated to running
2026-09-01 09:58:50,555 INFO status has been updated to successful
2026-09-01 09:58:54,599 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 09:58:54,600 INFO Request ID is 9567980c-dbe4-4e13-bc2f-07ed30b56538
2026-09-01 09:58:54,835 INFO status has been updated to accepted
2026-09-01 09:59:27,618 INFO status has been updated to running
2026-09-01 10:03:14,818 INFO status has been updated to successful
2026-09-01 10:03:17,955 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:03:17,955 INFO Request ID is 7f4995b9-5e7a-4a9c-9f01-9624c2679e7c
2026-09-01 10:03:17,991 INFO status has been updated to accepted
2026-09-01 10:05:11,758 INFO status has been updated to running
2026-09-01 10:07:41,050 INFO status has been updated to successful
2026-09-01 10:07:46,253 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:07:46,254 INFO Request ID is a62a2ce4-0d55-47be-bbe6-44b6f6a4e4af
2026-09-01 10:07:46,313 INFO status has been updated to accepted
2026-09-01 10:08:19,173 INFO status has been updated to running
2026-09-01 10:10:38,162 INFO status has been updated to successful
2026-09-01 10:10:40,883 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:10:40,884 INFO Request ID is 71af24ee-d927-4ac3-96d4-79aa0e8b01fd
2026-09-01 10:10:41,394 INFO status has been updated to accepted
2026-09-01 10:11:05,308 INFO status has been updated to running
2026-09-01 10:12:38,168 INFO status has been updated to successful
2026-09-01 10:12:48,173 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:12:48,175 INFO Request ID is 82b14141-851b-4491-83cb-4be57fdae9c4
2026-09-01 10:12:48,779 INFO status has been updated to accepted
2026-09-01 10:13:02,115 INFO status has been updated to running
2026-09-01 10:14:03,961 INFO status has been updated to successful
2026-09-01 10:14:05,094 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:14:05,095 INFO Request ID is cdae9efb-1438-4128-ab9d-d1b006d711b2
2026-09-01 10:14:05,123 INFO status has been updated to accepted
2026-09-01 10:14:37,487 INFO status has been updated to running
2026-09-01 10:18:25,391 INFO status has been updated to successful
2026-09-01 10:18:28,618 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:18:28,619 INFO Request ID is f82efcd9-3898-48d4-bba6-cd9c38c39f55
2026-09-01 10:18:30,599 INFO status has been updated to accepted
2026-09-01 10:19:20,537 INFO status has been updated to running
2026-09-01 10:22:50,062 INFO status has been updated to successful
2026-09-01 10:22:53,980 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:22:53,980 INFO Request ID is 8c79b6a2-2e7a-4628-9e72-8423273e4c12
2026-09-01 10:22:54,011 INFO status has been updated to accepted
2026-09-01 10:23:28,026 INFO status has been updated to running
2026-09-01 10:27:14,027 INFO status has been updated to successful
2026-09-01 10:27:20,066 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:27:20,067 INFO Request ID is 06200f90-c53b-42dc-9345-b4b68480fe1f
2026-09-01 10:27:20,107 INFO status has been updated to accepted
2026-09-01 10:27:53,228 INFO status has been updated to running
2026-09-01 10:30:14,077 INFO status has been updated to successful
2026-09-01 10:30:22,855 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:30:22,856 INFO Request ID is b95ccbc8-b2c9-44f0-973d-8cf21c1850c0
2026-09-01 10:30:22,924 INFO status has been updated to accepted
2026-09-01 10:30:56,870 INFO status has been updated to running
2026-09-01 10:31:39,833 INFO status has been updated to successful
2026-09-01 10:31:41,133 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:31:41,134 INFO Request ID is ee8208ee-bdd2-4ca1-9580-d9e17657244f
2026-09-01 10:31:41,158 INFO status has been updated to accepted
2026-09-01 10:32:16,274 INFO status has been updated to running
2026-09-01 10:36:01,884 INFO status has been updated to successful
2026-09-01 10:36:11,439 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:36:11,440 INFO Request ID is eec1b303-4bf0-4f7d-a162-795332e8c503
2026-09-01 10:36:11,460 INFO status has been updated to accepted
2026-09-01 10:36:32,433 INFO status has been updated to running
2026-09-01 10:39:03,211 INFO status has been updated to successful
2026-09-01 10:39:08,716 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:39:08,717 INFO Request ID is f4b4508a-3aab-4957-bea4-f435fa5b6f4c
2026-09-01 10:39:10,598 INFO status has been updated to accepted
2026-09-01 10:39:31,600 INFO status has been updated to running
2026-09-01 10:43:31,763 INFO status has been updated to successful
2026-09-01 10:43:34,559 INFO [2025-12-08T00:00:00] Extension of the SLSTR datasets (until December 2024) will be done via a new product version (v5), expected in Q1 2026.
2026-09-01 10:43:34,560 INFO Request ID is 4d7e62c7-5c2f-409a-909e-96daf9e3c066
2026-09-01 10:43:34,670 INFO status has been updated to accepted
2026-09-01 10:44:08,186 INFO status has been updated to running
2026-09-01 10:45:29,491 INFO status has been updated to successful
                                                                                         

Hide code cell source

ds_periods_list = [ds_maps_p2, ds_maps_p3, ds_maps_p4]

As stated above in the introductory section, SRS is not available in CLARA-A3: therefore, here we calculate it by taking the difference between the SIS and SNS. This difference is then modified to mask values where the resulting SRS is negative: these are physically unrealistic values, because imply having a net shortwave radiation which is greater than the surface incoming shortwave radiation. The negative values of SRS are due to the fact that SNS is estimated using daily SIS and pentad-mean blue-sky albedo (BAL): SNS = SIS × (1 − BAL). Monthly SNS are derived as averages of the daily mean SNS, and requires ≥ 20 valid daily means; the ocean albedo in CLARA-A3 is retrieved dynamically over cloud-free areas.

3. Plot spatial weighted time series, time weighted means, spatial weighted zonal means#

Spatially-weighted time series#

Below, we calculate and plot spatially weighted means for the different surface radiation budget products. Please note that masks of available data may differ across the products. However, the spatial weighted means are calculated between 30°S and 30°N, so that mask inconsistencies have minimal effects. Additionally, quality mask (variable record_status) from the CLARA EUMETSAT A3 product has been used to mask all products’ data points in the attempt to make the comparison aware of data gaps - we also calculate the percentage of valid measurements according to this criterion in the region considered, referring to it with the generic term “coverage” in the following.

Hide code cell source

for var in variables:
    fig = plt.figure(1, figsize=(15,7))
    gs = gridspec.GridSpec(2, 1, height_ratios=[3, 1])  # First subplot 3x taller than second
    ax = fig.add_subplot(gs[0], sharex=None)  # First subplot (larger)
    Ax = fig.add_subplot(gs[1], sharex=ax) 
    for i, (product, ds) in enumerate(ds_timeseries.items()):
        if var not in ds.data_vars:
            continue
        ds[var].plot(ax=ax, label=product, color=f"C{i}")
        count = ds_count_tro[product][var]
        count = count / (len(ds_maps_p4["CLARA EUMETSAT A3"][var].sel(longitude=slice(-180, 180), latitude=slice(-30, 30)).latitude)*len(ds_maps_p4["CLARA EUMETSAT A3"][var].sel(longitude=slice(-180, 180), latitude=slice(-30, 30)).longitude))
        Ax.fill_between(count['time'], 0., count, color=f"C{i}", label=product, edgecolor='k', alpha=0.5)
        Ax.set_ylabel('Coverage [%]')
        Ax.grid()
        Ax.legend(bbox_to_anchor=(1,1))
    ax.legend(bbox_to_anchor=(1, 1))
    ax.grid()
    plt.show()
../../_images/c60fa8fcbae8cbc50e16b567f9cbbbabbb542e795713ebbd9176c0ecf66f880c.png ../../_images/58ce5ca6aee33dca6d85bc22d5be655b293c2542d5b87cb89f4d86cd2a49c552.png ../../_images/193be8e1f6a23a9b30033d7cf583b784dd73d7a71e424dcde77e5e2cadd466e1.png ../../_images/9927ba360cddb7c606d3e18fe0c78416fba9c520fac31049e762e4504a00817c.png ../../_images/b06c38f6a0a84f3302871a1a32cd4342b2b79ec4dfcc01c5538915bbf1a957be.png ../../_images/84d8f48c58f1d713fa3c5bfbb40abeaf43b326604469b7a0a024ee1217134212.png

The timeseries above show that the different products do not fully overlap temporally, and thus they can be combined by expert users only. Moreover, there exist large offsets, likely linked to the different processing chains and sensors rather than to inter-annual variations, especially for the surface (outgoing and downwelling) longwave radiation. Products show a good consistency in representing the surface incoming solar radiation, although significant differences exist in the reflected solar radiation, likely due to different albedo definitions and diverse daily cycles implied in turn by different sensors. However, these differences are partly compensated between the downward and upward fluxes, and result in the net solar radiation exhibiting reasonably comparable timeseries.

The Niño3.4 region is specifically investigated. Assessing the Surface Radiation Budget (SRB) over the Niño3.4 region is important because it directly influences sea surface temperatures that drive El Niño events, which in turn impact global weather and climate patterns. Additionally, the area does not present any data gap (unlike high-latitude areas), thus representing an ideal region to fairly compare the SRB products. Therein, seasonal variations are less important than the inter-annual variations, which in turn respond to the El Nino-Southern Oscillation (ENSO) variability. Additionally, the region exhibits good observational coverage. Except for the reflected solar radiation (see later for details), all variables show reasonable consistency. Surface incoming solar radiation and longwave radiation fluxes are found in large consistency and differences fall mostly within the error bars (i.e. between 5 W/m2 and 10 W/m2) depending on variables as indicated in the product quality assurance document (https://confluence.ecmwf.int/pages/viewpage.action?pageId=384141061). These findings also emerge from the monthly climatology shown in the spatially-weighted mean annual cycles section below.

Hide code cell source

for var in variables:
    fig = plt.figure(2, figsize=(15,7))
    gs = gridspec.GridSpec(2, 1, height_ratios=[3, 1])  # First subplot 3x taller than second
    ax = fig.add_subplot(gs[0], sharex=None)  # First subplot (larger)
    Ax = fig.add_subplot(gs[1], sharex=ax) 
    for i, (product, ds) in enumerate(ds_nino3_4.items()):
        if var not in ds.data_vars:
            continue
        ds[var].plot(ax=ax, label=product, color=f"C{i}")
        count = ds_count_nino3_4[product][var]
        count = count / (len(ds_maps_p4["CLARA EUMETSAT A3"][var].sel(longitude=slice(-170, -120), latitude=slice(-5, 5)).latitude)*len(ds_maps_p4["CLARA EUMETSAT A3"][var].sel(longitude=slice(-170, -120), latitude=slice(-5, 5)).longitude))
        Ax.fill_between(count['time'], 0., count, color=f"C{i}", label=product, edgecolor='k', alpha=0.5)
        Ax.set_ylabel('Coverage [%]')
        Ax.grid()
        Ax.legend(bbox_to_anchor=(1,1))
    ax.legend(bbox_to_anchor=(1, 1))
    ax.grid()
    plt.show()
../../_images/02ab99c20745c8c228434ed4b41984581e89a6066f62cfa4951848dc36c6e3e9.png ../../_images/3668c1925f4c80d4376d29ad3d025f0b6bf7869a94d977c77f34c3d2fbc9683b.png ../../_images/8485983c82e1f0e44b9237056840d7dd05ec6857f99808999fb5e3fd50253275.png ../../_images/95901650b40d228004a9edf337a63c932031003a471aa92ed150cadbd807a03c.png ../../_images/fe0763253c0a4bd41773ce2933cc0c1e0338850748b3cbf5c5b53d0bca4d7743.png ../../_images/c65603680403b79f0f8eeb006ade481cfb2f8994b3b93b775551949e2c1f7e9a.png

Notice how CLARA-A3 in the Niño3.4 region has a much higher variability compared to CCI products: this is well probably due to the above mentioned issues in the way SRS is reconstructed in CLARA-A3. Monthly means are computed independently for each variable. A monthly SIS/SNS value is produced if at least 20 daily SIS/SNS observations are available. Computing SNS requires both daily SIS and a pentad (5-day) BAL albedo. Due to algorithm limitation, BAL is retrieved over ocean dynamically strictly over cloud-free areas. The BAL requires the availability of a sufficient number of clear-sky observations during the 5-day period. If this requirement is not met, BAL for the 5-day period and therefore five daily SNS values cannot be computed, and the values will be set to NaN. As a result, the SNS monthly average, if at least 20 daily values are available, might be based on fewer observations than the SIS monthly average and might be biased towards clear-sky situation (higher values), which would result in a systematic overestimation of SNS at the monthly scale (compared to SIS, that has non-Nan observations at cloudy days). Importantly, this artifact occurs only when SRS is derived from separately averaged monthly SIS and SNS. If SRS were computed at the daily level first and then averaged monthly, SNS would not exceed SIS, and negative SRS values would not occur. Indeed, after aproximately year 2000, the CLARA-A3 data have no more NaNs, because of the presence of more satellite in orbit with respect to the pre-2000 period.

Spatially-weighted mean annual cycles#

The seasonal means below indicate a good consistency for solar radiation products (both reflected and incoming) across the products. Longwave radiation products have consistency within the products’ nominal accuracy, with CLARA systematically exhibiting, on average, about 10-15 W m-2 less than the other products concerning the downwelling longwave radiation; it is known, indeed, from the Validation Report (CM SAF Cloud, Albedo, Radiation data record, AVHRR-based, Edition 3 (CLARA-A3) Surface Radiation, doi:10.5676/EUM_SAF_CM/CLARA_AVHRR/V003) that CLARA surface downwelling radiation suffers from a negative bias of about -6 W m-2 compared to station-based observations, while ESA products (both longwave and shortwave radiative fluxes) are known to be positvely biased (ESA Cloud_cci Product Validation and Intercomparison Report (PVIR), , and SRB CCI-ICDR: Product Quality Assurance Document (PQAD), https://confluence.ecmwf.int/pages/viewpage.action?pageId=304239428). Results on the outgoing longwave radiations show different distributions of the datasets, with CLARA and ESA Envisat exhibiting respectively the smallest and the largest values, on average.

Hide code cell source

import xarray as xr
import datetime
ts = []
for var in variables:
    prodlist = []
    ts_var = []
    for i, (product, ds) in enumerate(ds_timeseries.items()):
        prodlist.append(product)
        if var not in ds.data_vars:
            prodlist.remove(product)
            continue
        if product=='CCI ERS':
            tdrop = ds[var].time.sel(time=slice(datetime.datetime(2002,2,1),datetime.datetime(2002,2,28)))
            ds_var = ds[var].drop_sel(time=tdrop)
        else:
            ds_var = ds[var]
        ts_var.append(ds_var)
    ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
    ts.append(ts_var)
ts = xr.concat([t.rename('') for t in ts], dim='variable').assign_coords({'variable': list(variables)})

t1 = ts.groupby('time.month').mean('time', skipna=skipna).plot(col='variable', col_wrap=3, sharey=False, hue='product', marker='o', markersize=5, markeredgecolor='k', markeredgewidth=0.5, alpha=0.5)
for ax in t1.axs.flatten():
    ax.grid()
    ax.set_xticks([1,2,3,4,5,6,7,8,9,10,11,12])
    ax.set_xticklabels(["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"])
for col in t1.axs[:, 0]:
    col.set_ylabel(r'Radiation [W/m$^2$]')
for row in t1.axs[-1, :]:
    row.set_xlabel(r'Month')
t1.fig.suptitle('Monthly mean time series in the tropical domain (30°S - 30°N)', y=1.0)
/data/wp5/.tmp/ipykernel_488733/3114161456.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
/data/wp5/.tmp/ipykernel_488733/3114161456.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
/data/wp5/.tmp/ipykernel_488733/3114161456.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
/data/wp5/.tmp/ipykernel_488733/3114161456.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
/data/wp5/.tmp/ipykernel_488733/3114161456.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
/data/wp5/.tmp/ipykernel_488733/3114161456.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
Text(0.5, 1.0, 'Monthly mean time series in the tropical domain (30°S - 30°N)')
../../_images/1e4e0ba0a5eb0d72547846c1b159da29368547fda2f76c0802ccbffa49bc1eb1.png

Hide code cell source

import xarray as xr
import datetime
ts = []
for var in variables:
    prodlist = []
    ts_var = []
    for i, (product, ds) in enumerate(ds_nino3_4.items()):
        prodlist.append(product)
        if var not in ds.data_vars:
            prodlist.remove(product)
            continue
        if product=='CCI ERS':
            tdrop = ds[var].time.sel(time=slice(datetime.datetime(2002,2,1),datetime.datetime(2002,2,28)))
            ds_var = ds[var].drop_sel(time=tdrop)
        else:
            ds_var = ds[var]
        ts_var.append(ds_var)
    ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
    ts.append(ts_var)
ts = xr.concat([t.rename('') for t in ts], dim='variable').assign_coords({'variable': list(variables)})

t1 = ts.groupby('time.month').mean('time', skipna=skipna).plot(col='variable', col_wrap=3, sharey=False, hue='product', marker='o', markersize=5, markeredgecolor='k', markeredgewidth=0.5, alpha=0.5)
for ax in t1.axs.flatten():
    ax.grid()
    ax.set_xticks([1,2,3,4,5,6,7,8,9,10,11,12])
    ax.set_xticklabels(["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"])
for col in t1.axs[:, 0]:
    col.set_ylabel(r'Radiation [W/m$^2$]')
for row in t1.axs[-1, :]:
    row.set_xlabel(r'Month')
t1.fig.suptitle('Monthly mean time series in Nino 3.4 region', y=1.0)
/data/wp5/.tmp/ipykernel_488733/2093966859.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
/data/wp5/.tmp/ipykernel_488733/2093966859.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
/data/wp5/.tmp/ipykernel_488733/2093966859.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
/data/wp5/.tmp/ipykernel_488733/2093966859.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
/data/wp5/.tmp/ipykernel_488733/2093966859.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
/data/wp5/.tmp/ipykernel_488733/2093966859.py:18: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',) The recommendation is to set join explicitly for this case.
  ts_var = xr.concat([t for t in ts_var], dim='product').assign_coords({'product': prodlist})
Text(0.5, 1.0, 'Monthly mean time series in Nino 3.4 region')
../../_images/df96167f9b4f1522a451a9dccde8539efe1d1df4035bdb1b693218c18e0ee895.png

Hide code cell source

periods = [esa_ers2_time, esa_envisat_time, sentinel_time]

Time-weighted means#

Below, we calculate and plot time-weighted means for the different surface radiation budget products. Please note that periods differ across the products as illustrated in the previous section.

Hide code cell source

from matplotlib.colors import LinearSegmentedColormap

def create_custom_colormap(colormaps, n_colors=256):
    """
    Create a custom colormap by merging an arbitrary number of predefined colormaps.

    Parameters:
        colormaps (list of matplotlib colormaps): List of colormaps to merge.
        n_colors (int): Total number of colors in the resulting colormap.

    Returns:
        LinearSegmentedColormap: The custom merged colormap.
    """
    if not colormaps:
        raise ValueError("You must provide at least one colormap.")

    # Number of colors to sample from each colormap
    split = n_colors // len(colormaps)

    # Sample colors from each colormap and combine
    merged_colors = np.vstack([
        cmap(np.linspace(0, 1, split)) for cmap in colormaps
    ])

    # Handle rounding if n_colors is not evenly divisible
    extra_colors = n_colors - merged_colors.shape[0]
    if extra_colors > 0:
        last_cmap = colormaps[-1]
        merged_colors = np.vstack((merged_colors, last_cmap(np.linspace(0, 1, extra_colors))))

    # Create and return the custom colormap
    return LinearSegmentedColormap.from_list("CustomColormap", merged_colors)

for ds_maps, times in zip(ds_periods_list, periods):
    ms = []
    for var in variables:
        m_var = []
        vmin = min([ds[var].min().values for ds in ds_maps.values() if var in ds.data_vars])
        vmax = max([ds[var].max().values for ds in ds_maps.values() if var in ds.data_vars])
        prodlist = []
        for product, ds in ds_maps.items():
            if var not in ds.data_vars:
                continue
            if len(ds[var].longitude)==1440:
                prodlist.append(product)
                m_var.append(ds[var].coarsen(latitude=4, longitude=4).mean().assign_coords({'latitude': np.linspace(-89.75, 89.75, 180), 'longitude': np.linspace(-179.85, 179.85, 360)}))
            elif len(ds[var].longitude)==720:
                prodlist.append(product)
                m_var.append(ds[var].coarsen(latitude=2, longitude=2).mean().assign_coords({'latitude': np.linspace(-89.75, 89.75, 180), 'longitude': np.linspace(-179.85, 179.85, 360)}))
            else:
                prodlist.append(product)
                m_var.append(ds[var])
        m_var = xr.concat([mv for mv in m_var], dim='product').assign_coords({'product': prodlist})
        ms.append(m_var)
    ms = xr.concat([m for m in ms], dim='variable').assign_coords({'variable': list(variables)})
    
    colormaps = [plt.cm.tab20c, plt.cm.tab20b_r]
    custom_cmap = create_custom_colormap(colormaps, n_colors=512)

    levels_cbar =  [-75, -60, -25, 0, 2, 4, 10, 15, 20, 50, 60, 80, 100, 125, 150, 175, 200, 220, 240, 260, 280, 300, 325, 350, 375, 400, 425, 450, 475, 500, 525, 550, 560, 570]
    p2 = ms.plot(col='product',
                 row='variable', 
                 subplot_kws={'projection': ccrs.PlateCarree()},
                 levels= levels_cbar, #range(int(ms.min()), int(ms.max()), 5),
                 extend=None,
                 cmap=custom_cmap,
                 add_colorbar=False,
                 transform=ccrs.PlateCarree())
    for ax in p2.axs.flat:  # loop through the map axes
        subplotspec = ax.get_subplotspec()
        if subplotspec.is_last_row():
            ax.xaxis.set_visible(True)
        if subplotspec.is_first_col():
            ax.yaxis.set_visible(True)
        ax.coastlines('50m')
        ax.gridlines()
    p2.fig.set_layout_engine("compressed")
    cax = p2.fig.add_axes([0.1, 0.15, 0.80, 0.035])
    p2.add_colorbar(cax=cax, orientation='horizontal', fraction=0.05, pad=0.0001, anchor=(0.85,0.50), label=r'Radiation [$W/m^2$]')
    cbar = p2.cbar
    cbar.set_ticks(levels_cbar)
    cbar.ax.set_xticklabels(cbar.ax.get_xticklabels(), rotation=45)
    p2.fig.suptitle('Mean map on the period '+str(times[0].year)+'-'+str(times[-1].year))
../../_images/9ae1f089c16af2cd9fef6c7b36476396a3542dd22c174da28e867d2839d0317e.png ../../_images/6fb656236004209b68821462772ae0d9a45a43c6ab87311e29b7bfee84b8525e.png ../../_images/718268d058ca289822d4d4f3b77c5821302a632fe2db5475ccdde080848a1abb.png

Maps exhibit generally similar features, and are shown for different data periods with consistent coverage across products. The incoming shortwave radiation peaks at low latitudes; variations in its reflected counterpart depend on albedo values, which are very low in the open ocean and then increase for land, and snow and it is the highest over desertic regions. Values of reflected shortwave radiation over the open ocean seem too low in ESA and C3S products (less than 8 W m-2), while CLARA values (13-16 W m-2) are more aligned to the open ocean albedo of 0.06. Differences, however, tend to cancel in the net shortwave radiation, as pointed out above. The downwelling longwave radiation is also distributed geographically depending on the incoming solar radiation and cloudiness, and thus also peaks in the Tropical band. In contrast, the outgoing downwelling radiations rely on the surface temperature, and thus peak again in the Tropics, with the lowest values on ice-covered regions. However, the different products are poorly consistent in many areas. In CLARA, for instance, the reflected shortwave is smaller over desertic regions and larger over oceans, while the incoming shortwave is on average smaller in the Tropical band. Downwelling longwave components are in good agreement, except for local differences (e.g., ESA ERS-2 over the Indian sub-continent). Differences in the outgoing longwave radiation are large over land, and mountainous areas in particular.

Spatially-weightes zonal means#

The code below will calculate and plot weighted zonal means for the surface radiation budget products. Please note that spatial and temporal sampling may differ across the products.

Hide code cell source

for ds_maps, times in zip(ds_periods_list, periods):
    for var in variables:
        for i, (product, ds) in enumerate(ds_maps.items()):
            if var not in ds.data_vars:
                continue
            else:
                da = diagnostics.spatial_weighted_mean(ds[var].sel(latitude=slice(-60,60)), dim="longitude", weights=weights, skipna=skipna)
            da.plot(y="latitude", color=f"C{i}", label=product)
        plt.legend(loc='best')
        plt.title("Spatial Weighted Zonal Mean, Period: "+str(times[0].year)+'-'+str(times[-1].year))
        plt.grid()
        plt.show()
../../_images/32720ad870660fbae57f829089280748eb0c686d6b420a3fdbf10ea4961c9562.png ../../_images/649364e83ef7e194b462ccd1fb53873b4567591c90b940e3fc70f5b57127cc16.png ../../_images/2d806239ef40fa2ab35d6ab08ef6c51b0c3d94a47592c4ceaba3fc75c539efe6.png ../../_images/4235c3c1ff58cc2ce66e37cf403cfe51bb8d06593a520e65894ccf4b8bfff1fa.png ../../_images/483e10254a12efbe3558cb368beab699ea3f9ea2cdb376bfa976e26473d223f1.png ../../_images/4323e69e81332df0d0e6878350c187d2f160bbbed2289c7c34aa98e9fd185a2e.png ../../_images/f7f88b95f7ea9abd1293a78f88bc709e094f6f55af326ed2645311d7a2266340.png ../../_images/b0b6409ca9294dd43c904daf24a3ad58b8fc62be195ad30af61a12b69bf25f12.png ../../_images/fa8976e2c07c54dbc616459e8065973496bb72c52cdcac25e6818cf566ad6b79.png ../../_images/9ff9db85c13a6bbafaf79f29dfc1954027994add3a9a6c47d1af3a2a65db2c64.png ../../_images/927b8df6cc4895e3140b9a399a8fc8fdcc15db8888edd83ef8b5041e991a109f.png ../../_images/d8c61796e9754283903e0c6a757e1b8b772c9e1e933122db410eca3bb410f411.png ../../_images/d55b3f255afd511e4eb2b2b8a4552e28157d52305a2b84f8521e4e2ff8275fb6.png ../../_images/181e0d4325774e8ffd0c1ac93186e0aad4c9f5985dc88a9a64bed3cd35a740b1.png ../../_images/510f44867c7beafee8526fc2a26872b642cb41c338baaa84461053f20d197d02.png ../../_images/0510090105d96dee23a29e5d82ce65fa04fd0a5220513f88fb50bb22e556db84.png ../../_images/b365aa41866517f3fa015e8d806735cdec77f753aa4f235dd239c8a5e893d5b2.png ../../_images/ded7982ac91ce48f759ba157f520d4fe3787f3e759c0b9054dea840e00550125.png

Zonal means exhibit generally similar features, although the different products are poorly consistent in several cases. Incoming shortwave data are inconsistent at high latitude also due to missing data therein during each hemispheric winter (which however may vary across different years), while downwelling longwave radiation datasets differ in the Tropical regions and in the Northern Hemisphere, in general.

Discussion and applications#

Evaluation of the surface radiation budget has large implications in climate studies and has been the subject of numerous investigations (e.g., [8]). We briefly focus on two examples of application, respectively considering the ocean heat uptake and climate model simulation validation. The ocean heat uptake refers to the fact that due to the large heat capacity of seawater, most of the excess heat of the Earth’s System is stored in the oceans. About 89% of the Earth Energy Imbalance at the top of the atmosphere is estimated to reside in the global ocean ([9]); the surface heat budget is responsible for variations in net air-sea heat flux, i.e. the energy flux at the air-sea and ice-sea interface that regulates the temporal variations of the energy accumulated in the oceans. Ocean heat content tendency (or ocean heat uptake) is closely related to the surface radiation budget over the oceans, and any trend in the surface radiation budget will result in acceleration of the ocean warming. SRB observational products ([5]), eventually complemented with model reanalyses or simulations ([7]; [4]), all contribute to our monitoring and understanding of ocean heat uptake variations. Further to the SRB variables, strictly speaking, the ocean heat loss due to turbulent fluxes (latent and sensible heat fluxes) needs to be accounted for in estimating the net air-sea heat flux; reanalyses or some observation-only products contain such fluxes, which can be, however, affected by large uncertainties due to the strong non-linearity of the turbulent fluxes. The second application involves validating climate model simulations in terms of surface radiation budget. For climate predictions and projections, it is important to have a reliable surface radiation budget so that the ocean-atmosphere energy exchanges are accurately simulated. Inaccuracies in the SRB will result, in turn, in biases and systematic errors in the lower atmosphere temperature (e.g., [6]). The SRB products can be used to spot inaccuracies in the climate model simulations, for instance focusing on specific regions, such as polar regions ([3]). For both applications, however, it is recommended to implement a product ensemble approach, where multiple products and sensors are combined together in an ensemble mean and ensemble standard deviation, to increase the robustness of the datasets and mitigate their possible inaccuracies and offsets. The ensemble standard deviation (spread) can then be used as an overall uncertainty estimate of the product.

ℹ️ If you want to know more#

Key resources#

Code libraries used:

  • C3S EQC custom functions, c3s_eqc_automatic_quality_control, prepared by B-Open

  • IPCC Sixth Assessment Report (AR6), Working Group I, Chapter 7: The Earth’s Energy Budget, Climate Feedbacks, and Climate Sensitivity

This chapter of IPCC AR6 WG1 emphasizes the role of surface radiation in climate feedback mechanisms and sensitivity analyses, discussing also the advancements since the Fifth Assessment Report, including improved satellite observations and energy flux measurements. IPCC, 2021: Climate Change 2021: The Physical Science Basis. Contribution of Working Group I to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change. Chapter 7.

Additionally, GCOS (https://gcos.wmo.int/site/global-climate-observing-system-gcos/essential-climate-variables) identifies the Surface Radiation Budget as an Essential Climate Variable (ECV), underscoring its significance in climate monitoring. The system outlines specific requirements for SRB data products, including accuracy, resolution, and stability, to ensure reliable climate observations.

References#

[1] Yang, K., Koike, T., & Ye, B. (2006). Improving estimation of hourly, daily, and monthly solar radiation by importing global data sets. Agricultural and Forest Meteorology, 137(1-2), 43-55

[2] Trenberth, K. E., Fasullo, J. T., & Kiehl, J. (2009). Earth’s global energy budget. Bulletin of the American Meteorological Society, 90(3), 311-324

[3] Boeke, R. C., and P. C. Taylor (2016), Evaluation of the Arctic surface radiation budget in CMIP5 models, J. Geophys. Res. Atmos., 121, 8525–8548, doi:10.1002/2016JD025099.

[4] Clément, L., E. L. McDonagh, J. M. Gregory, Q. Wu, A. Marzocchi, J. D. Zika, and A. J. G. Nurser, 2022: Mechanisms of Ocean Heat Uptake along and across Isopycnals. J. Climate, 35, 4885–4904, https://doi.org/10.1175/JCLI-D-21-0793.1

[5] Cronin MF, Gentemann CL, Edson J, Ueki I, Bourassa M, Brown S, Clayson CA, Fairall CW, Farrar JT, Gille ST, Gulev S, Josey SA, Kato S, Katsumata M, Kent E, Krug M, Minnett PJ, Parfitt R, Pinker RT, Stackhouse PW Jr, Swart S, Tomita H, Vandemark D, Weller RA, Yoneyama K, Yu L and Zhang D (2019) Air-Sea Fluxes With a Focus on Heat and Momentum. Front. Mar. Sci. 6:430. doi:10.3389/fmars.2019.00430

[6] Ma, H.-Y., Klein, S. A., Xie, S., Zhang, C., Tang, S., Tang, Q. et al (2018). CAUSES: On the role of surface energy budget errors to the warm surface air temperature error over the Central United States. Journal of Geophysical Research: Atmospheres, 123, 2888–2909. https://doi.org/10.1002/2017JD027194

[7] Huguenin, M.F., Holmes, R.M. & England, M.H. Drivers and distribution of global ocean heat uptake over the last half century. Nat Commun 13, 4921 (2022). https://doi.org/10.1038/s41467-022-32540-5

[8] Hatzianastassiou, N., Matsoukas, C., Fotiadi, A., Pavlakis, K. G., Drakakis, E., Hatzidimitriou, D., and Vardavas, I.: Global distribution of Earth’s surface shortwave radiation budget, Atmos. Chem. Phys., 5, 2847–2867, https://doi.org/10.5194/acp-5-2847-2005, 2005.

[9] von Schuckmann, et al.: Heat stored in the Earth system 1960–2020: where does the energy go?, Earth Syst. Sci. Data, 15, 1675–1709, https://doi.org/10.5194/essd-15-1675-2023, 2023.