NGEET / fates

repository for the Functionally Assembled Terrestrial Ecosystem Simulator (FATES)
Other
105 stars 92 forks source link

handle case where LAI+SAI exceeds array by clipping instead of crashing #1269

Open ckoven opened 1 month ago

ckoven commented 1 month ago

There has for a long time (always?) been an issue where certain leaf and lai parameters can generate absurdly large LAI values within the crown of a plant (where plant-level LAI equals leaf area / crown area), and which can crash the model, e.g. as per https://github.com/NGEET/fates/discussions/1190. Now that our default crown area and leaf area allometric exponents are different, this can happen mid-run, as the plants start to get larger. And I am finding that in rare edge cases in a global run, this does in fact happen.

We've discussed for a long time just putting an upper limit to how large LAI can get, in order to allow the model to keep going rather than crash. The argument being that for these plants, their lowermost leaf area is in the dark and so not going to be doing a lot of photosynthesizing, so it should in principle be self-correcting. This code does that: it just says, basically, that beyond a certain point, a plant can put on more leaf biomass, but it won't have any effect on the LAI.

I've only tested it to the extent that I can confirm it prevents the model from crashing under whatever the edge case that I had run into that was previously causing the model to crash. Further investigation is needed to assess the effect of this on simulations.

fixes #1190.

Description:

Collaborators:

Expectation of Answer Changes:

Checklist

If this is your first time contributing, please read the CONTRIBUTING document.

All checklist items must be checked to enable merging this pull request:

Contributor

Integrator

Documentation

Test Results:

CTSM (or) E3SM (specify which) test hash-tag:

CTSM (or) E3SM (specify which) baseline hash-tag:

FATES baseline hash-tag:

Test Output:

rgknox commented 4 weeks ago

Notes from SE Meeting: 1) add a wrapper to update tree lai and tree sai in the cohort module 2) try to see if we can update this in one location 3) add a constant that we can compare the maximum value of the lai+sai binning vector too, if is less than that constant we fail gracefully during initialization