Skip to content

Consider one or more changes to reduce DYNBAL fluxes (dynamic landunit conservation correction fluxes) #4188

Description

@billsacks

Introduction

When subgrid areas change due to dynamic landunits / columns, fluxes are generated to compensate for changes in gridcell-average water and energy (QFLX_LIQ_DYNBAL, QFLX_ICE_DYNBAL, EFLX_DYNBAL). These fluxes can (and should) be reduced via careful setting of reset_dynbal_baselines, but that still doesn't reduce these fluxes to zero.

The current implementation seems good enough in situations where there is a gradual change in a given grid cell's subgrid areas over many years. Unfortunately, though, that is not always the situation when coupling to CISM, as has been seen in recent CESM3 runs: In grid cells around the ice sheet margin, large fractions of a CTSM grid cell can blink between mostly-vegetated/bare and mostly-glacier on a 2-year cycle, and this oscillatory behavior can go on for many years, possibly indefinitely. This can lead to large dynbal fluxes in each year, even when dribbled throughout the year (as is currently done).

It is problematic for the ocean to get negative dynbal fluxes, but it is also problematic to remove these negative dynbal fluxes by spreading them globally, as is currently done, because then regional fluxes that should average to 0 spatially and temporally (e.g., into the Arctic ocean) end up being biased positive (as explained here). Therefore, I have been thinking about possible strategies to further reduce these DYNBAL fluxes. I'm laying out a few possibilities here, and we may want to implement one or more of these.

(1) Add pools that slowly release the dynbal fluxes, with multi-year residence times

Currently, the dynbal fluxes - which are created on year boundaries - are dribbled out over the next year using infrastructure that ensures conservation on an annual basis. This is satisfying in the sense that water and energy are not allowed to get out of balance from one year to the next. But this can lead to larger-than-desirable fluxes, especially in the case of oscillatory behavior as described above.

To further reduce these fluxes – especially in the oscillatory situation where the year y+1 fluxes are approximately equal and opposite of the year y fluxes in a given grid cell – we could instead introduce holding pools for these DYNBAL fluxes, where the liquid water, ice, and energy are released slowly, with a multi-year residence time. The residence time should be chosen to be short enough to not have a significant impact on system-wide water and energy balance, but long enough that the fluxes are small. Note that (I think...), for oscillatory fluxes, the outfluxes will be biased at first (positive if the first-year flux is positive, negative if the first-year flux is negative), but will eventually settle to a multi-year average of 0 (in the asymptote, anyway); longer residence times will mean it takes longer to settle to this near-zero multi-year average. I would somewhat arbitrarily suggest a 10-year residence time; for oscillatory fluxes, this would reduce fluxes by a factor of 10 initially, and a factor of 20 in the long-term behavior after a few decades of spinup (at which point out-fluxes from the holding pool would alternate between roughly 0.05 and -0.05 times the magnitude of the annual oscillatory flux... I think). (Update 2026-08-28: I think I'd actually be inclined to a slightly longer residence time, like 20 years, to reduce these fluxes even further.)

I think this would be relatively easy to implement. I think it would also be relatively easy to test, at least for a basic sanity test that gives a fair amount of confidence: After the first change in glacier areas (i.e., at a year boundary), compare the fluxes from these pools with the fluxes from a baseline run. In the first few days, the fluxes from these pools should be almost exactly equal to the baseline fluxes divided by the residence time (in years), but these new fluxes should gradually decline in magnitude compared with those from the baseline.

(2) Include H2OSNO in the dynbal baselines

Currently, the dynbal baselines only account for below-ground water states. This is physically justifiable because these below-ground states are virtual states for glacier (the glacial ice, which has an assumed depth), and glacier columns don't have an actual soil representation. The remaining dynbal fluxes are then largely driven by differences in H2OSNO between vegetated and glacier columns.

I think we could include H2OSNO (and possibly other, small water/ice states) in the dynbal baselines. Then, as long as reset_dynbal_baselines is done after an initial spin-up, I think this would reduce the dynbal ice flux.

I think this would be pretty easy to implement. But I'd want to give this more thought - and probably go back through notes from when this was first developed - to feel comfortable that this is an okay thing to do. One possible concern is what would happen if the snow state has evolved significantly since the dynbal baselines were reset: could this actually lead to larger dynbal fluxes than before? (I'm not sure that it would, but I'd want to think this through.) In addition, this inclusion of H2OSNO in the baselines feels harder to justify and explain, even if it arguable still conserves mass and energy (because I think we're free to set the baselines however we want for conservation purposes, as long as we keep them fixed once the "real" coupled model simulation begins).

(3) Completely zero out dynbal fluxes in the early phases of coupled model spinup

The dynbal fluxes are needed for conservation in a coupled simulation, but it seems arguable whether conservation is actually important in the early stages of coupled model spinup. In particular, note that we do some initial coupled model spinup followed by additional offline spinup of the land and ocean components, which breaks conservation, before continuing the coupled model spinup. In that first phase of coupled model spinup, we could arguably zero out the dynbal fluxes. This feels equivalent to acknowledging that the initial ice sheet state is wrong / out of balance, and we let it come into initial balance without worrying about conservation.

Some issues with this, though, are:

  • This would probably need to be done manually - setting this zeroing flag to true and false at the correct times - and this is error prone.
  • Whenever this flag is changed, model behavior will change, potentially shocking the system. So, for example, it could be problematic to do this right before switching from the spinup to the transient run, because then the behavior in the transient run will differ from the spinup.
  • While this could help with problems of the initial system being out of balance (giving it some time to come into balance), it wouldn't help with the oscillatory situation described above, where no amount of spinup will be enough to stop these fluxes.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementnew capability or improved behavior of existing capabilityinvestigationNeeds to be verified and more investigation into what's going on.non-b4bChanges answers (incl. adding tests)scienceEnhancement to or bug impacting science

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions