NGEET / fates

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

Carbon balance failure in smallest size class #538

Closed pollybuotte closed 5 years ago

pollybuotte commented 5 years ago

In testing FATES (with hydro off) at a site in the southern Sierra Nevada with one PFT, I've run into a carbon balance failure in the smallest size class (5.7cm). I have successfully run with the same parameter file in simulations with initialized, static stand structure (which includes some trees in the 5.7cm class), and prognostic structure initialized with a mature (35cm) stand. However, when I initialize with a 5cm stand, or start from bare ground, the cases fail on the second day of the simulation with a carbon balance error in the smallest size class.

Curiously, the bare ground case has three cohorts in smallest size class in one patch:

image

The initialized case has only two cohorts, but still fails:

image

@ckoven suggested reducing initd. Reducing from 0.2 to 0.06 there are still 3 cohorts in the bare ground case and a carbon balance failure.

Does this problem look familiar to anyone?

Thanks!

rgknox commented 5 years ago

This happens on call index 1, which is tracking the fluxes due to growth and recruitment only. Its possible that the total mass of new recruits is not being calculated correctly.

Are you running in ST3 mode (I think I read that above, but is it true in all cases that fail)? Also, could you report on the hashtag of the FATES version you are using? There were some inconsistencies between phenology and ST3 mode I noticed recently and turned off in recent versions of the code.

pollybuotte commented 5 years ago

I get the errors in prognostic stand structure mode. ST3 mode is working fine. I'm using Chonggang's latest hydro update, even though I have hydro off, which branched from here: image

rgknox commented 5 years ago

I think there is potential for mass balance breaking during the recruitment submodule for both prescribed and normal (dynamic) mode now that I look at it. The scheme calculates a number density of recruits based off of the mass of seed (or the presribed rate), and the expected mass of a single plant that is "on allometry". However, if the new cohort is off allometry, then the actual new mass of the plant will be less than the predicted, and thus and inconsistency.

Other places that could be generating the problem are phenology (but I feel like that would had already triggered errors, but who knows), and growth (but we have several growth mass checks already).

ckoven commented 5 years ago

how could a new cohort be off allometry?

rgknox commented 5 years ago

if it is created during a drought, it will start off without leaves

rgknox commented 5 years ago

although, I guess that seems unlikely in this situation, now that I think of it. I need to look at create_cohort and the context here again.

pollybuotte commented 5 years ago

It seems strange that the model will run in prognostic stand structure mode when I initialize with a stand structure that includes multiple size classes, including 5cm. And it will run with an initialized stand of all 35cm trees. But it will not run from bare ground or from an initialization with all 5cm trees.

rgknox commented 5 years ago

Its because the error checker uses an error normalized by total mass stocks (which I'm changing in the multi-element release). So if there is a small mass balance error source that is agnostic of the total biomass, it will seem really large when stocks are low.

rgknox commented 5 years ago

looking at the code again, I don't think that disconnect I mentioned above, is actually there. I see that we do correctly set bleaf = 0 in a logical part of the sequence of things (if leaf-off status).

pollybuotte commented 5 years ago

Adjusting several parameters reduces the carbon balance error in the initial cohort class during a simulation from bare ground as follows.

  1. leaf biomass allometry: increase leaf biomass for small trees, while not allowing biomass to increase for large trees. Lowest error = 1.69e-4. Still fails on second day of simulation.
  2. Increasing the recruit_initd from 0.06 to 0.08. Error = 1.27e-4. Fails on day 2. Setting to 0.1 increases carbon balance error.
  3. Reducing seed_rain from 0.28 to 0.05. Error = 2.52e-5. Fails on day 459.

Can I turn off seed rain altogether? I'm running at a 4x4km resolution and it's highly unlikely seed dispersal between grid cells is possible for most tree species in the Sierra Nevada, with the exception of some limited seed dispersal from birds.

@rgknox How certain is the carbon balance error check setting of 10e-6?

rosiealice commented 5 years ago

Yes, you can turn seed rain off. It's just to prevent extinctions, things will/should persist from internal recruitment

rgknox commented 5 years ago

@pollybuotte , recommend softening the carbon balance error checks for your runs, for the time being. Perhaps set it to 10e-3 (or just turn it off) so you can move forward. There are some potential changes coming down the pipe that are reducing carbon imbalance errors.

Meanwhile, It looks like you are using an up-to-date version of the code, but could you check to see if you have the following commit in your branch?

95635c3

pollybuotte commented 5 years ago

Thanks @rosiealice and @rgknox.

I do not have that commit for seed_rain diagnostics in my branch. Last commit before Chonggang's branch was 82498d5cb18d8e793491ca133989fb20ccd441f7.

Turning off seed rain avoids the carbon balance error for at least 7 years. I'll be starting a 200 year run soon.

rgknox commented 5 years ago

That commit fixed a carbon balance bug related to seed rain. I would recommend merging master into your branch. Or you can use the cherrypick command to merge that specific commit in.

rgknox commented 5 years ago

@pollybuotte . Can you confirm (or deny) that including the commit mentioned above, does solve your problem? Will close this up if so.

pollybuotte commented 5 years ago

Yes, closing.