ESMValGroup / ESMValCore

ESMValCore: A community tool for pre-processing data from Earth system models in CMIP and running analysis scripts.
https://www.esmvaltool.org
Apache License 2.0
40 stars 36 forks source link

ERA5 on-the-fly CMORizer produces scientifically wrong results for some radiation variables #2475

Open schlunma opened 4 days ago

schlunma commented 4 days ago

Describe the bug

Following https://github.com/ESMValGroup/ESMValTool/issues/3694#issuecomment-2204136683, we (@axel-lauer, @LisaBock and myself) had a more detailed look at the radiation variables produced by the ERA5 on-the-fly CMORizer. Here is a summary of what we found:

rlds (surface_downwelling_longwave_flux_in_air; W m-2)

These two ERA5 variables are basically identical after accounting for the time accumulation. However, we can skip the time accumulation in our code if we use second variable here.

-> Not a big problem, but this would simplify the code

rlns or rls (surface_net_downward_longwave_flux; W m-2)

Note: these variables are identical. The first is our custom version, the second the CMIP6 version.

These two ERA5 variables are basically identical after accounting for the time accumulation. However, we can skip the time accumulation in our code if we use second variable here.

-> Not a big problem, but this would simplify the code

rlus (surface_upwelling_longwave_flux_in_air; W m-2)

On the surface, outgoing longwave flux is not the same as the net flux (downwards minus upwards)!

-> This is scientifically wrong!

rsds (surface_downwelling_shortwave_flux_in_air; W m-2)

These two ERA5 variables are basically identical after accounting for the time accumulation. However, we can skip the time accumulation in our code if we use second variable here.

-> Not a big problem, but this would simplify the code

rsns or rss (surface_net_downward_shortwave_flux; W m-2)

Note: these variables are identical. The first is our custom version, the second the CMIP6 version.

These two ERA5 variables are basically identical after accounting for the time accumulation. However, we can skip the time accumulation in our code if we use second variable here.

-> Not a big problem, but this would simplify the code

rsus (surface_upwelling_shortwave_flux_in_air; W m-2)

On the surface, outgoing shortwave flux is not the same as the net flux (downwards minus upwards)!

-> This is scientifically wrong!

Thus, at least for rlus and rsus, we need to adapt the CMORizer.

axel-lauer commented 3 days ago

I just wanted to add that I agree with all of what Manuel described so nicely. I guess we didn't notice these problems as no recipe in main apart from recipe_climwip_brunner2019_med.yml seems to use these variables from ERA5. But this needs to be fixed soon so we don't end up calculating wrong surface radiative fluxes. Mid- to longterm, I would like to bring back the issue of not being able to derive a variable (e.g. swcre) from variables that also require derivation for ERA5 (e.g. rsut, rsutcs) to our attention: https://github.com/ESMValGroup/ESMValCore/issues/1806. For a number of scientific applications (e.g. looking at cloud properties), this is a big obstacle as ERA5 is used frequently.