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. Water vapor amplification of Earth’s Greenhouse Effect#

Production date: 11-04-2025

Produced by: ‘CNRS’

🌍 Use case: Observing the water vapour feedback#

❓ Quality assessment question:#

  • Can Satellite measurements reproduce the known relationship between clear sky greenhouse effect and total column water vapour (TCWV)?

The water vapour is the most significant greenhouse gases, contributing to about half of the planet’s overall greenhouse effect [1]. As a result, it plays a significant in influencing the Earth’s radiation budget, with its radiative forcing being directly proportional to its total amount in the atmosphere.

Furthermore, the warming induced by an increase in CO2 concentrations is expected to lead to higher levels of water vapor through the Clausius-Clapeyron relationship [2]. The increasing of water vapor, in turn, intensifies the greenhouse effect, a phenomenon referred to as the water vapor feedback [3]. This positive feedback mechanism underscores the critical importance of monitoring and comprehending the water vapour concentrations to accurately assess and predict its impacts on the Earth’s climate system.

In this analysis, we study the greenhouse warming induced by water vapor and aim to determine the relationship between the two variables. We quantify the amount of water vapor in the atmosphere using its vertially integrated value, known as Total Columns Water Vapor (TCWV), which is obtained from satellite observations. The data used in this study is Monthly and 6-hourly total column water vapour over ocean from 1988 to 2020 derived from satellite observations [4], available on the Climate Data Store (CDS) of the Copernicus Climate Change Service (C3S).

📢 Quality assessment statement#

These are the key outcomes of this assessment

  • The clear sky greenhouse effect is approximately a linear function of the total column water vapour. The exact values of greenhouse effect and the value of the slope are in agreement with [3].

  • An estimate of the water vapour feedback is given by assuming a constant lapse rate and a fixed Clausius–Clapeyron rate at different altitudes, as in [5]. The humidity feedback obtained is \(2.5 \pm 0.2\) \(W/m^{2}/ K\) which is in agreement with the IPCC [6].

  • This analysis is performed with one month of data. The obtained results described the relationship between OLR and TCWV, which do not depend on the season. Therefore, similar results from different time periods should fall within the expected range of uncertainty.

  • The agreement with [3] proves also that the datasets of cloud amount here, sea surface temperature here, and outgoing longwave radiation here on CDS, are accurate and reliable.

📋 Methodology#

The relationship between clear sky Greenhouse effect and Total Column of Water Vapour (TCWV) is examined using the available datasets from the Climate Data Record (CDR) for Sea Surface Temperature [7], clouds [8], and Outgoing Longwave Radiation (OLR) [9], detailed below. These datasets are daily and the analysis focuses on the tropical ocean over January 2007.

Initially, clear sky regions are identified for each day. Surface emissions are estimated from the sea surface temperature using black body radiation, because water has a large emissivity in the infrared spectrum. Then, the Greenhouse effect is computed by subtracting the OLR from the surface emission:

\[ \text{Greenhouse Effect} = \text{OLR} - \sigma T^4 \]

The Greenhouse warming is then compared with TCWV, and their relationship is visualized as a function of TCWV. Lastly, the derived relationship is utilized to estimate the water vapour feedback.

The analysis comprises the following steps:

1. Choose the data to use and setup code

  • Import the relevant packages. Define the parameters of the analysis and set the dataset requests

2. Download the datasets

  • Download the variables of interest: TCWV is obtained from Monthly and 6-hourly total column water vapour over ocean from 1988 to 2020 derived from satellite observations, Clear sky is obtained from Cloud properties global gridded monthly and daily data from 1979 to present derived from satellite observations, Surface Temperature is obtained from Sea surface temperature daily data from 1979 to present derived from satellite observations, Outgoing Longwave Radiation (OLR) is obtained from Earth’s radiation budget from 1979 to present derived from satellite observations.

3. Colocate and compute the clear sky greenhouse effect

  • The datasets are colocated in space over the Tropics. Gridboxes with clear coverage greater than 20% are rejected. Moreover, only the well retrieved TCWV and surface temperature are considered. The amount of radiation emitted by the surface is computed assuming blackbody behavior of the ocean. Then, the greenhouse effect is obtained by subtracting outging lonwave radiation and surface emission.

4. Plot and describe results

  • The greenhouse warming is plotted as a function of the TCWV. A linear regression is computed and the value of the slope is used to estimate the special humidity feedback. Final results are compared with proper references.

📈 Analysis and results#

1. Choose the data to use and setup code#

Import packages#

Hide code cell source
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import pandas as pd
import xarray as xr
from scipy.stats import linregress
import numpy as np 
from c3s_eqc_automatic_quality_control import diagnostics, download, plot

import os
os.environ["CDSAPI_RC"] = os.path.expanduser("~/helene_brogniez/.cdsapirc")

Define parameters#

Hide code cell source
# Time
start = "2007-02"
stop = "2007-02"

# Region:
lat_min = -30
lat_max = 30
lon_min = -180
lon_max = 180

Set the data request#

Hide code cell source
chunks = {"year": 1, "month": 1}
requests = dict()

requests["satellite-total-column-water-vapour-ocean"] = {
    "origin": "eumetsat",
    "climate_data_record_type": "tcdr",
    "temporal_aggregation": "6_hourly",
    "year": ["2007"],
    "month": ["02"],
    "variable": "all"
}

requests["satellite-cloud-properties"] = {
    "product_family": "clara_a2",
    "origin": "eumetsat",
    "variable": ["cloud_fraction"],
    "climate_data_record_type": "thematic_climate_data_record",
    "time_aggregation": "daily_mean",
    "year": ["2007"],
    "month": ["02"],
    "day": ["01", "02", "03",
        "04", "05", "06",
        "07", "08", "09",
        "10", "11", "12",
        "13", "14", "15",
        "16", "17", "18",
        "19", "20", "21",
        "22", "23", "24",
        "25", "26", "27",
        "28"],
    "area": [30, -180, -30, 180]
}

requests["satellite-sea-surface-temperature"] = {
    "variable": "all",
    "processinglevel": "level_4",
    "sensor_on_satellite": "combined_product",
    "version": "2_1",
    "year": ["2007"],
    "month": ["02"],
    "day": ["01", "02", "03",
        "04", "05", "06",
        "07", "08", "09",
        "10", "11", "12",
        "13", "14", "15",
        "16", "17", "18",
        "19", "20", "21",
        "22", "23", "24",
        "25", "26", "27",
        "28"]
}


requests["satellite-earth-radiation-budget"] = {
    "product_family": "clara_a3",
    "origin": "eumetsat",
    "variable": ["outgoing_longwave_radiation"],
    "climate_data_record_type": "thematic_climate_data_record",
    "time_aggregation": "daily_mean",
    "year": ["2007"],
    "month": ["02"],
    "day": ["01", "02", "03",
        "04", "05", "06",
        "07", "08", "09",
        "10", "11", "12",
        "13", "14", "15",
        "16", "17", "18",
        "19", "20", "21",
        "22", "23", "24",
        "25", "26", "27",
        "28"],
    "area": [30, -180, -30, 180]
}

2. Download the datasets#

Hide code cell source
datasets = {}

for collection_id in requests :
    request = requests[collection_id]
    datasets[collection_id] =  download.download_and_transform(
                                    collection_id,
                                    download.update_request_date(request | {'area': [lat_max, lon_min, lat_min, lon_max]}, #[N, W, S, E]
                                                                 start, 
                                                                 stop, 
                                                                 stringify_dates=True),
                                        chunks=chunks,
                                    )
    
100%|██████████| 1/1 [00:00<00:00,  6.18it/s]
/data/common/miniforge3/envs/wp5/lib/python3.11/site-packages/earthkit/data/readers/netcdf/fieldlist.py:346: FutureWarning: In a future version of xarray decode_timedelta will default to False rather than None. To silence this warning, set decode_timedelta to True, False, or a 'CFTimedeltaCoder' instance.
  return xr.open_dataset(self.path_or_url)
/data/common/miniforge3/envs/wp5/lib/python3.11/site-packages/earthkit/data/readers/netcdf/fieldlist.py:230: FutureWarning: In a future version of xarray decode_timedelta will default to False rather than None. To silence this warning, set decode_timedelta to True, False, or a 'CFTimedeltaCoder' instance.
  return xr.open_mfdataset(
100%|██████████| 1/1 [00:00<00:00,  4.64it/s]
100%|██████████| 1/1 [00:00<00:00,  4.18it/s]
100%|██████████| 1/1 [00:00<00:00,  2.92it/s]

Visualize the Total Column of Water Vapour#

The Total Column of Water Vapour (TCWV) are obtained from the HOAPS product, provided by EUMETSAT at 0.5° and 0.05°. The TCWV is retrieved over ice-free ocean surfaces using the microwave spectrum as measured by the instruments SSM/I and SSMIS using the Hamburg Ocean Atmosphere Parameters and Fluxes from Satellite Data (HOAPS) algorithm [4]. The dataset in this assessment is considered at 0.5° over tropical oceans.

Hide code cell source
plot.projected_map(
    datasets["satellite-total-column-water-vapour-ocean"].isel(time=0).compute()["wvpa"],
    projection=ccrs.PlateCarree(),
    cmap="YlGnBu",
    robust=True,
    center=False,
    levels=9,
    extend="both",
    cbar_kwargs={"orientation": "horizontal", "pad": 0.1},
    )
plt.title('TCWV [kg/m$^2$]')
plt.show()
../../_images/360d6044bcbccf2cf040284dc42319a12fac973cb453e45cb562771bded811b5.png

Visualize the Sea Surface Temperature#

The daily estimates of Sea Surface Temperature (SST) are based on observations from multiple satellite sensors, and it is produced by the European Space Agency (ESA) SST Climate Change Initiative (CCI) project. The Climate Data Records cover the entire globe with a resolution of 0.05° and the values of SST globally range within 297 and 304 K in the tropics.

Hide code cell source
plot.projected_map(
    datasets["satellite-sea-surface-temperature"].isel(time=0).compute()["analysed_sst"],
    projection=ccrs.PlateCarree(),
    cmap="RdBu_r",
    robust=True,
    center=False,
    levels=9,
    extend="both",
    cbar_kwargs={"orientation": "horizontal", "pad": 0.1},
    )
plt.title('SST [K]')
plt.show()
../../_images/4a776a10351ca1d7cd3fceface7cc0353ba5663eb480bf93242c158e11ae8446.png

3. Colocate and compute the clear sky greenhouse effect#

Hide code cell source
# agregate to 0.5° grid / 1-day
DS_CLOUDS = datasets["satellite-cloud-properties"].coarsen(latitude=2, longitude=2).mean().compute() ## original dataset available at 0.25° / 1 day
DS_TEMP   = datasets["satellite-sea-surface-temperature"].coarsen(latitude=10, longitude=10).mean().compute()  ## original dataset available at 0.05° / 1 day
DS_TOA    = datasets["satellite-earth-radiation-budget"].coarsen(latitude=2, longitude=2).mean().compute()  ## original dataset available at 0.25° / 1 day

ds_tmp   = datasets["satellite-total-column-water-vapour-ocean"]  ## original dataset available at 0.5° / 6-hourly / latitudes from 90S to 90N
ds_tmp2  = ds_tmp.reindex(latitude=list(reversed(ds_tmp.latitude)))  
DS_TCWV  = ds_tmp2.resample(time="1D").mean()
Hide code cell source
series = {}
for da in [DS_TCWV["wvpa"], DS_TEMP["analysed_sst"], DS_TOA["LW_flux"], DS_CLOUDS["cfc_day"], DS_CLOUDS["cfc_night"]]:
    series[da.name] = (
        da.sortby(list(da.dims))
        .stack(index=sorted(da.dims))
        .to_series()
        .reset_index(drop=True)
    )

# Selection of clear sky region and correctly retrieved surface temperature and TCVW
df = pd.DataFrame(series).query('cfc_day + cfc_night < 40')
df = df.query('(analysed_sst>0) & (wvpa>0)')

df['Greenhouse_effect'] =  5.67 / 100_000_000. * df['analysed_sst'] ** 4 - df['LW_flux']

4. Plot and describe results#

Hide code cell source
bin_edges = range(19, 55, 2)
#bin_edges = np.linspace(15, 60, (60-15)+1)
bin_labels = pd.Series(bin_edges).rolling(2).mean()[1:]
grouper = pd.cut(df["wvpa"], bin_edges)
ax = df.groupby(grouper, observed=False).boxplot(
    subplots=False,
    column="Greenhouse_effect",
    showfliers=False,
    patch_artist=True,
    showmeans=True,
    medianprops={"linewidth": 2.5, "color": "k"},
    meanprops={
        "marker": "D",
        "markeredgecolor": "black",
        "markerfacecolor": "green",
        "markersize": 8,
    },
    whiskerprops={"color": "k"},
    boxprops={"color": "k", "facecolor": "silver"},
    xlabel="TCWV [mm]",
    ylabel="clear-sky Greenhouse Effect [W/m$^2$]",
    grid=True,
)


# Get all mean values
x_data = np.array([(bin_edges[i] + bin_edges[i + 1]) / 2 for i in range(len(bin_labels))])
y_data = df.groupby(grouper, observed=False).mean()['Greenhouse_effect'].to_numpy()

# Perform linear regression
slope, intercept, r, p, se = linregress(x_data, y_data)


# Plot linear fit
ax.plot(
    np.arange(x_data.size)+1,
    slope * x_data + intercept,
    color="red",
    linestyle="--",
    linewidth=2,
    label=f"Linear regression = {slope:.2f} $\pm$ {se:.2f} W/m$^2$ / mm",
)


ax.set_title("clear-sky Greenhouse Effect as a function of TCWV")
ax.set_xticklabels(bin_labels.astype(int))

plt.legend()

plt.show()

# Variables to estimate the specific humidity radiative feedback
TCWV_mean = df.wvpa.mean()
feedback = slope * TCWV_mean * 0.07
#print(f"feedback: {feedback:.2f}")
../../_images/9d73413b356f558bfdf91313b8b3dab7729198f5625b041c6036b64650fae934.png

This boxplot illustrates the distribution of the clear sky Greenhouse Effect within various Total Column of Water Vapour (TCWV) bins. The green rhombs show the statistic of the Greenhouse Effect for each bin. A linear regression has been applied to the dataset, visualized by the red curve and reported in the legend.

The results show a linear relationship between the clear sky greenhouse effect and the Total Columns of Water Vapour, in agreement with previous research [3].

The relationship between clear sky Greenhouse Effect and TCWV is studied on the time scale of one day. However, since it is linear, the same relationship must be valid over larger spatial and temporal scales. In particular, this is also the relationship between the climatological Greenhouse effect and TCWV, and it can be used to estimate the water vapour feedback.

Water vapour scales in accordance with the Clausius–Clapeyron (CC) relationship. Although the CC rate varies with altitude, it typically falls within the range of 6.5% to 7.5%. Moreover, under the assumption of a constant lapse rate and a constant relative humidity:

\[\begin{split} \text{Water Vapour feedback} &= \frac{d G}{d TCWV}\frac{d TCWV}{dT} \\ &= \frac{d G}{d TCWV} <TCWV> CC \\ &= 1.23 \, (W/m^{2}/mm) \times 29 \, (mm) \times 0.07 \, (K^{-1}) \\ &= 2.5 \pm 0.2 \quad W/m^{2}/ K \end{split}\]

Where \(G\) is the clear sky Greenhouse Effect, the average TCWV is 29 mm, and the adopted CC rate is \((7 \pm 0.5) \%\). This result is in agreement with Fig.20 of IPCC report Chapter 7 [4]

ℹ️ If you want to know more#

Key resources#

Some key resources and further reading were linked throughout this assessment.

The CDS catalogue entries for the data used in this assessment are:

Code libraries used:

Reference/Useful material#

[1] Schmidt G. A., Ruedy R. A., Miller R. L., and A. A. Lacis (2010), Attribution of the present‐day total greenhouse effect,J. Geophys. Res.,115, D20106, doi:10.1029/2010JD014287

[2] Manabe S., and R. T. Wetherald (1967): Thermal Equilibrium of the Atmosphere with a Given Distribution of Relative Humidity, J. Atmos. Sci., 24, 241–259, https://doi.org/10.1175/1520-0469(1967)024<0241:TEOTAW>2.0.CO;2.

[3] Roca R., Viollier M., Picon L., and M. Desbois (2002), A multisatellite analysis of deep convection and its moist environment over the Indian Ocean during the winter monsoon, J. Geophys. Res., 107(D19), doi:10.1029/2000JD000040.

[4] Andersson A., Fennig K., Klepp C., Bakan S., Graßl H., and J. Schulz (2010): The Hamburg Ocean Atmosphere Parameters and Fluxes from Satellite Data – HOAPS-3, Earth Syst. Sci. Data, 2, 215-234, doi:10.5194/essd-2-215-2010

[5] Held I. and B. Soden (2000): Water vapor feedback and global warming, Annu. Rev. Energy Environn., 25:441-75, doi:10.1146/annurev.energy.25.1.441

[6] Forster P., Storelvmo T., Armour K., Collins W., Dufresne J-L, Frame D., Lunt D.J., Mauritsen T., Palmer M.D., Watanabe M., Wild M., and H. Zhang, 2021: The Earth’s Energy Budget, Climate Feedbacks, and Climate Sensitivity (2021): In Climate Change 2021: The Physical Science Basis. Contribution of Working Group I to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change. Cambridge University Press, Cambridge, United Kingdom and New York, NY, USA, pp. 923–1054, doi: 10.1017/9781009157896.009.

[7] Merchant C. J., Embury O., Bulgin C. E., Block T., Corlett G. K., Fiedler E., Good S. A., Mittaz J., Rayner N. A., Berry D., Eastwood S., Taylor M., Tsushima Y., Waterfall A., Wilson R. and C. Donlon (2019) Satellite-based time-series of sea-surface temperature since 1981 for climate applications. Scientific Data, 6. 223. doi:10.1038/s41597-019-0236-x

[8] Karlsson K., Riihelä A., Trentmann J., Stengel M., Solodovnik I., Meirink J., Devasthale A., Jääskeläinen E., Kallio-Myers V., Eliasson S., Benas N., Johansson E., Stein D., Finkensieper S., Håkansson N., Akkermans T., Clerbaux N., Selbach N., Schröder M. and R. Hollmann (2023): CLARA-A3: CM SAF cLoud, Albedo and surface RAdiation dataset from AVHRR data - Edition 3, Satellite Application Facility on Climate Monitoring DOI:10.5676/EUM_SAF_CM/CLARA_AVHRR/V003, https://doi.org/10.5676/EUM_SAF_CM/CLARA_AVHRR/V003.

[9] Schröder M., Lockhoff M., Shi L., August T., Bennartz R., Brogniez H., Calbet X., Fell F., Forsythe J., Gambacorta A., and co-authors (2019): The GEWEX Water Vapor Assessment: Overview and Introduction to Results and Recommendations, Remote Sensing 11, no. 3: 251. https://doi.org/10.3390/rs11030251