Skip to content

Add temporal smoothing of DYNBAL conservation correction fluxes - #4189

Open
billsacks wants to merge 5 commits into
ESCOMP:masterfrom
billsacks:dynbal_temporal_smoothing
Open

Add temporal smoothing of DYNBAL conservation correction fluxes#4189
billsacks wants to merge 5 commits into
ESCOMP:masterfrom
billsacks:dynbal_temporal_smoothing

Conversation

@billsacks

Copy link
Copy Markdown
Member

Description of changes

Spread the DYNBAL water and energy fluxes over many years: Rather than releasing all of the DYNBAL fluxes in the year in which they're generated, instead put them in storage pools that are released with a 20-year residence time (controllable via a new namelist parameter). This reduces these fluxes, especially in the oscillatory case that is somewhat common with a dynamic ice sheet.

The new storage pools are reset when reset_dynbal_baselines is set to .true., since this feels conceptually similar to the other resetting done by that flag, so it feels appropriate to do this resetting at the same time.

This PR also changes the sign convention for the DYNBAL fluxes: the previous sign convention was unintuitively the opposite of the sign convention of other fluxes to river/atm; while I'm changing these fluxes anyway, I'm also flipping the sign convention to be more intuitive and hopefully less error-prone.

I have evaluated the changes here by examining QFLX_ICE_DYNBAL, QFLX_LIQ_DYNBAL and EFLX_DYNBAL, FSH_TO_COUPLER, QRUNOFF_ICE_TO_COUPLER and QRUNOFF_TO_COUPLER in 3 cases with compset I1850Clm60BgcCropG at resolution f09_g17:

  • A baseline case
  • The new code, out-of-the-box - residence time 20 years
  • The new code, with residence time set at 1 year

Specific notes

Contributors other than yourself, if any:

  • Much of the code was written by Claude code. However, I gave detailed guidance and carefully reviewed all code changes.

CTSM issues resolved or otherwise addressed, if any:

If answers are expected to change, describe (delete this line otherwise):

  • Changes answers for all cases with landcover change - Hist/SSP cases, CISM cases, and FATES cases
  • Changes in Satellite Phenology cases are limited to the DYNBAL fluxes and a few related variables, including liquid/ice runoff and sensible heat flux (which then impacts ROF state and fluxes)
  • Changes in BGC cases are more widespread, I think because of the feedback of VOLR on CH4. (I tested this by running a version of ERS_Ly3_P64x2.f10_f10_mg37.IHistClm50BgcCropG.derecho_intel.clm-cropMonthOutput with SROF and verified that diffs were then limited to just the expected variables.)
  • Also changes answers for some additional cases that start mid-year and use a restart file that has non-zero state in the dynbal dribblers, despite not having transient landcover themselves (since this PR removes these dribblers, so no longer has fluxes out of these dribblers in these cases). On derecho aux_clm, this impacts the tests ERS_D_Ld5_Mmpi-serial.1x1_mexicocityMEX.I1PtClm60SpRsGs.derecho_gnu.clm-CLM1PTStartDate, SMS_Ld12_Mmpi-serial.1x1_vancouverCAN.I1PtClm60SpRsGs.derecho_gnu.clm-output_sp_highfreq, and ERP_D_Ld5.f10_f10_mg37.I2000Clm60Sp.derecho_intel.clm-decStart--clm-nofireemis.

Any user interface changes (namelist or namelist defaults changes)?

  • New namelist flag, dynbal_storage_residence_time

Testing planned or performed, if any:

  • Ran aux_clm on derecho. Most tests passed; I'll look into a couple of failures. Answers changed as noted above
  • Will run aux_clm on izumi

Requirements before merge:

  • The code in this PR branch builds with no errors.
  • The code in this PR branch runs with no errors. Briefly describe tested configuration(s):
  • This either (a) does not change answers, (b) it only changes answers at roundoff level, or (c) I have performed a scientific evaluation of the answer changes. Which?: (c)
  • I have reviewed relevant parts of the CLM documentation Tech Note or User's Guide to determine if anything needs to be changed or added. If it does, describe: Made a small necessary change to the tech note.
  • This PR either (a) does not create a need to update the documentation or (b) includes required documentation updates (see guidelines for contributing documentation). Which?: (b)

Rather than releasing all of the DYNBAL fluxes in the year in which
they're generated, instead put them in storage pools that are released
with a 20-year turnover time. This reduces these fluxes, especially in
the oscillatory case that is somewhat common with a dynamic ice sheet.

This partially addresses ESCOMP#4188
(specifically, option (1) in that issue).
I found the previous sign convention unintuitive. While I'm changing
these fluxes anyway, I'm going to flip the sign convention to be more
intuitive.
This feels conceptually similar to the other resetting done by
reset_dynbal_baselines, so it feels like these should be reset at the
same time. (This wasn't an issue before the changes on this branch that
change the annual dribblers to pools with a residence time, because the
annual dribblers would empty themselves by the end of each year.)
@ekluzek ekluzek added non-b4b Changes answers (incl. adding tests) enhancement new capability or improved behavior of existing capability next this should get some attention in the next week or two. Normally each Thursday SE meeting. science Enhancement to or bug impacting science labels Sep 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement new capability or improved behavior of existing capability next this should get some attention in the next week or two. Normally each Thursday SE meeting. non-b4b Changes answers (incl. adding tests) science Enhancement to or bug impacting science

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants