Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add optional radiative flux diagnostics with perturbed CO2 #51

Merged

Conversation

spencerkclark
Copy link
Member

@spencerkclark spencerkclark commented Jun 26, 2024

Description

This PR adds the ability to output dual radiative flux diagnostics representing what the fluxes would be with up to eight different user-specified scalings of carbon dioxide. These diagnostics are made optional, since for each provided scale factor an additional call to the radiative transfer code must be made. The motivation for these diagnostics is to make it possible to quantify the impact of modifying the CO2 concentration for a given atmospheric state. This flavor of diagnostic is often used to quantify the direct forcing of other constituents like aerosols.

Usage

Enabling these diagnostics requires modifying two namelist parameters:

  • gfs_physics_nml.do_diagnostic_radiation_with_scaled_co2 must be set to .true..
  • gfs_physics_nml.diagnostic_radiation_co2_scale_factors must be provided a sequence of float scale factors. This sequence can be up to 8 values long, and controls the scale factors for CO2 in the additional diagnostic radiation calls.

For example something like the following would result in two additional radiation calls with 0x and 4x the prescribed CO2:

&gfs_physics_nml
    do_diagnostic_radiation_with_scaled_co2 = .true.
    diagnostic_radiation_co2_scale_factors = 0.0, 4.0
/

These namelist parameters expose new surface and top of atmosphere radiative flux diagnostics, which can be added in the diagnostics table.

With 0x CO2
  • DSWRFtoa_with_scaled_co2_1
  • USWRFtoa_with_scaled_co2_1
  • ULWRFtoa_with_scaled_co2_1
  • DSWRF_with_scaled_co2_1
  • USWRF_with_scaled_co2_1
  • DLWRF_with_scaled_co2_1
  • ULWRF_with_scaled_co2_1
  • DSWRFI_with_scaled_co2_1
  • USWRFI_with_scaled_co2_1
  • DLWRFI_with_scaled_co2_1
  • ULWRFI_with_scaled_co2_1
  • global_mean_co2_1
With 4xCO2
  • DSWRFtoa_with_scaled_co2_2
  • USWRFtoa_with_scaled_co2_2
  • ULWRFtoa_with_scaled_co2_2
  • DSWRF_with_scaled_co2_2
  • USWRF_with_scaled_co2_2
  • DLWRF_with_scaled_co2_2
  • ULWRF_with_scaled_co2_2
  • DSWRFI_with_scaled_co2_2
  • USWRFI_with_scaled_co2_2
  • DLWRFI_with_scaled_co2_2
  • ULWRFI_with_scaled_co2_2
  • global_mean_co2_2

Here the integer index trailing each internal name corresponds to the position in the sequence of provided scale factors. The long_name of each diagnostic will include the actual CO2 scaling used in its generation.

cc: @lharris4

How Has This Been Tested?

This has been tested by ensuring that:

  • Using a scale factor of 1.0 produces radiative flux diagnostics that bit-for-bit reproduce the main radiative flux diagnostics.
  • Using other scale factors, e.g. 0.0 and 4.0, produces plausible results if we compare to results with a scale factor of 1.0.
  • Running with these multiple diagnostic radiation calls does not change the evolution of the model.

This notebook comprehensively illustrates the first two bullet points of these tests.

Difference between 4xCO2 and 1xCO2

2024-06-24-radiation-multi-call-six-hour-interval-4xCO2-difference

Difference between 0xCO2 and 1xCO2

2024-06-24-radiation-multi-call-six-hour-interval-0xCO2-difference

Checklist:

Please check all whether they apply or not

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • Any dependent changes have been merged and published in downstream modules

The modifications here are aimed to remove reference to "double calls" since
this PR enables up to 8 additional calls.  They are also aimed to make it clear
that these radiation calls do not affect the evolution of the simulation, and
that the diagnostics pertain to what we get when we scale CO2 (as opposed to
some other constituent of the atmosphere).
@spencerkclark spencerkclark marked this pull request as ready for review June 28, 2024 15:14
@spencerkclark
Copy link
Member Author

OK I have completed the naming / organization updates I wanted to and re-tested the code to ensure things are behaving properly. I also added some usage details to the description, which should hopefully give a sense for how these work. It should be ready for review.

Copy link
Contributor

@lharris4 lharris4 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is fine. Everything is self-contained including the allocate calls, so it should not affect anything else. This may be useful for @linjiongzhou and others' work on radiative forcing, and is a good illustration on how to make custom radiation calls and how to handle the numerous diagnostic outputs. Thank you.

@lharris4 lharris4 merged commit c8c5d30 into NOAA-GFDL:main Jul 3, 2024
2 checks passed
@spencerkclark
Copy link
Member Author

Thanks @lharris4! I appreciate you taking a look and merging this.

@linjiongzhou
Copy link
Contributor

This is indeed very useful for quantifying the impact of CO2 radiative forcing. Thanks for building this function, Spencer!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants