DOI: 10.5281/zenodo.18750075
title: Longwave cloud radiative kernel with scattering enabled

description: Overview

This dataset contains longwave (LW) cloud radiative kernels that include cloud LW scattering physics, a feature not typically represented in radiative transfer models that produce traditional radiative kernels. Cloud radiative kernels are used to quantify the impact of cloud property changes on the Earth’s radiation budget, making them essential tools for understanding cloud feedbacks in climate models. This was developed and reported in

Fan, C. X., Y.-H. Chen, X. H. Chen, W. Y. Lin, P. Yang, and X. L. Huang, A Refined Understanding of the Ice Cloud Longwave Scattering Effects in Climate Model, Journal of Advances in Modeling Earth Systems, 15(10), e2023MS003810, https://doi.org/10.1029/2023MS003810, 2023.

Key Features



Longwave Scattering Physics: Unlike traditional kernels that neglect cloud scattering in the longwave spectrum, this dataset includes scattering effects, providing more accurate estimates of cloud radiative impacts

Comparison Capability: Includes both scattering and non-scattering kernels for direct comparison

ISCCP-Simulator Compatible: Uses COSP (CFMIP Observation Simulator Package) cloud bins for pressure and optical depth


Dataset Description

File: cld_LW_Scat_Kernel.nc

Dimensions




Dimension
Size
Description


month
12
Monthly climatology


lat
90
Latitude bins (2° resolution)


cosp_prs
7
Cloud top pressure bins (hPa)


cosp_tau
7
Cloud optical depth bins




 

 Variables




Variable
Units
Description


LWKernel_noScat
W/m²/%
Traditional longwave cloud kernel without scattering: TOA LW flux change for every percent increase in cloud fraction


LWKernel_Scat
W/m²/%
Longwave cloud kernel with scattering physics


LWKernel_Diff
W/m²/%
Difference between scattering and non-scattering kernels (Scat - noScat)




Usage Example

Python Example with xarray

import xarray as xrimport numpy as npimport matplotlib.pyplot as plt

# Load the kernel dataset from the NetCDF fileds = xr.open_dataset('cld_LW_Scat_Kernel.nc')

# Examine the structure of the dataset (prints metadata and variables)print(ds)

# Define the edges for cloud top pressure (CTP) bins in hPa and cloud optical depth (TAU) binsCTP_EDGES = np.array([1000, 800, 680, 560, 440, 310, 180, 50]) * 1e2TAU_EDGES = np.array([0, 0.3, 1.3, 3.6, 9.4, 23, 60, 380])

# Calculate latitude weights based on the cosine of latitude (for area weighting) and month weights based on days of monthlat_weights = np.cos(np.deg2rad(ds.lat))month_weights = xr.DataArray(  np.array([31,28,31,30,31,30,31,31,30,31,30,31]),  coords={'month': np.arange(1,13).astype(int)},  dims=['month'])

# X axis (optical depth) and Y axis (pressure)x = TAU_EDGESy = CTP_EDGES

# Weighted means for the kernels over months and latitudez = [  ds['LWKernel_noScat'].weighted(lat_weights).mean('lat').weighted(month_weights).mean('month').values,  ds['LWKernel_Diff'].weighted(lat_weights).mean('lat').weighted(month_weights).mean('month').values]

# Relative difference (percentage) between scattering and no scatteringz.append(z[1] / np.where(z[0]>1e-5, z[0], np.nan) * 100.0)

# Create a figure with 3 subplots to visualize the datafig, axs = plt.subplots(1, 3, figsize=(15, 6), sharex=True, sharey=True)

# Plot the kernel without scatteringp = axs[0].pcolormesh(range(len(x)), range(len(y)), z[0])plt.colorbar(p, ax=axs[0], orientation="horizontal", label='Flux Sensitivity ($W/m^2/\%$)')

# Plot the kernel difference (scattering - no scattering)p = axs[1].pcolormesh(range(len(x)), range(len(y)), z[1], vmin=-0.15, vmax=0.15, cmap='bwr')plt.colorbar(p, ax=axs[1], orientation="horizontal", label='Flux Sensitivity ($W/m^2/\%$)')

# Plot the relative difference as a percentagep = axs[2].pcolormesh(range(len(x)), range(len(y)), z[2], vmin=-30.0, vmax=30.0, cmap='bwr')plt.colorbar(p, ax=axs[2], orientation="horizontal", label='%')

# Decorate the figurefor ax in axs:  ax.set_xticks(range(len(x)), [f"{v:.1f}" for v in x])  ax.set_yticks(range(len(y)), [f"{v/1e2:.1f}" for v in y])  ax.set_xlabel('COSP $\\tau$')axs[0].set_title('Kernel (noScat)')axs[1].set_title('Kernel Diff. (Scat - noScat)')axs[2].set_title('Kernel Rel. Diff. ((Scat - noScat) / noScat)')axs[0].set_ylabel('COSP Pressure (hPa)')

# Save the figure as a PNG filefig.savefig('cld_LW_Scat_Kernel_comparison.png', dpi=300)

# Display the plotsplt.show()```

Contact

Dr. Chongxing Fan (cxfan@umich.edu) and Dr. Xianglei Huang (xianglei@umich.edu)