Skip to content

Only do file-based land cover change if is_beg_curr_year - #4281

Open
billsacks wants to merge 4 commits into
ESCOMP:masterfrom
billsacks:fix_dynlu_midyear_start
Open

billsacks wants to merge 4 commits into
ESCOMP:masterfrom
billsacks:fix_dynlu_midyear_start

Conversation

@billsacks

Copy link
Copy Markdown
Member

Description of changes

Add an is_beg_curr_year conditional around file-based land cover change.

In most situations, this extra check of is_beg_curr_year should be
redundant with the way this land cover change was implemented. However,
it serves two purposes:

(1) Avoiding unnecessary work

(2) For a startup / hybrid run that starts mid-year, in some situations
we can get area changes in the first time step of the run without
this is_beg_curr_year check. This causes an error in annual flux
dribblers that are told to only expect fluxes at the year boundary.
This is_beg_curr_year suppresses any area changes until the first
year boundary of the run.

The main motivation for this change was to resolve (2). This resolves #4165.

I have also removed comments describing how to change the area change
behavior to be time-interpolated rather than uninterpolated. I don't
think this has actually been easy to change for a long time due to the
use of annual flux dribblers. And the introduction of is_beg_curr_year
even further bakes in the current behavior. However, I now discuss this in a separate design doc, also part of this PR.

Specific notes

CTSM issues resolved or otherwise addressed, if any:

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

  • Changes answers for some tests that start mid-year. However, answer changes only appear in two situations: (1) cases that would have failed before this change, or (2) cases with the for_testing_allow_non_annual_changes namelist variable set to true. In the aux_clm test suite, this only shows up in two tests: ERI_D_Ld20.f10_f10_mg37.IHistClm60Bgc.derecho_intel.clm-default--clm-midDecStart--clm-allowTransientYearJump and ERI_D_Ld20.f10_f10_mg37.IHistClm60Bgc.izumi_nag.clm-default--clm-midDecStart--clm-allowTransientYearJump.

Any user interface changes (namelist or namelist defaults changes)? No (but the allowTransientYearJump testmod no longer sets for_testing_allow_non_annual_changes).

Testing planned or performed, if any:

  • aux_clm: tests pass and are bit-for-bit except as noted above (a few tests were still pending when I opened this PR)

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): full aux_clm
  • 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?: Mostly (a), with a minor exception as noted above
  • 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:
  • 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?: (a) does not need an update to the documentation

In most situations, this extra check of is_beg_curr_year should be
redundant with the way this land cover change was implemented. However,
it serves two purposes:

(1) Avoiding unnecessary work

(2) For a startup / hybrid run that starts mid-year, in some situations
    we can get area changes in the first time step of the run without
    this is_beg_curr_year check. This causes an error in annual flux
    dribblers that are told to only expect fluxes at the year boundary.
    This is_beg_curr_year suppresses any area changes until the first
    year boundary of the run.

The main motivation for this change was to resolve (2). I am hoping that
this will resolve ESCOMP#4165.

I have also removed comments describing how to change the area change
behavior to be time-interpolated rather than uninterpolated. I don't
think this has actually been easy to change for a long time due to the
use of annual flux dribblers. And the introduction of is_beg_curr_year
even further bakes in the current behavior.
With the change on this branch, the allowTransientYearJump testmod
should no longer need for_testing_allow_non_annual_changes = .true.
@billsacks

Copy link
Copy Markdown
Member Author

I struggled for a while with how to fix #4165 without causing at least as many issues as I was resolving. This is the best fix I could come up with. As noted in the accompanying design doc, it further bakes in some current behavior, which I don't love, but I think this is acceptable for now. If we ever want to loosen these restrictions, we could remove the check for non-annual changes from the dribblers, which would be another way to resolve #4165 so would allow removing this added is_beg_curr_year check.

Note that the change here changes behavior for a run starting mid-year... but in the situations where it changes behavior, previously you would have needed for_testing_allow_non_annual_changes to avoid an abort, so this change seems like it should be fine / good.

It's probably best if this PR comes in for CESM3 because without it users could run into errors when trying to start a run mid-year.

This branch has not been deployed

No deployments
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.

Mid-year startup with DGLC or CISM can lead to unexpected non-zero delta

1 participant