NGEET / fates

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

potential over-flushing of stem tissues in non-woody plants #779

Closed rgknox closed 3 years ago

rgknox commented 3 years ago

FATES allows non-woody plants to maintain some sapwood and structural "wood". Even in grasses, a user can craft the allometry equations to dictate these pools, to be either a trivial, nominal or significant amount of the plant's biomass.

For deciduous phenology, we allow certain non-woody plants to drop a fraction of the sapwood and structural wood at the end of the active season, and then reflush these pools along with the leaf pool again at the beginning of the active season.

However, it appears that while we drop a fraction of the sapwood and structural pool, we could potentially be over-replacing the tissues upon flushing.

In this line here, we are essentially determining how much of the storage pool to use during flushing, by comparing which is limiting, the source (storage) and the sink (the leaf+sapwood+structure).

https://github.com/NGEET/fates/blob/master/biogeochem/EDPhysiologyMod.F90#L1133-L1134

The sink term, should really be the deficit between what is currently on the plant and the target (which are those memory terms). However, our calculations currently assume that there is no mass in the sapwood and structure organs. This is typically true for leaves, but not the other two:

https://github.com/NGEET/fates/blob/master/biogeochem/EDPhysiologyMod.F90#L1132

I think this should be corrected by simply subtracting out the actual carbon in the sapwood and structure pools from the total memory calculation.

rgknox commented 3 years ago

After disccusing with @xuchongang , I now realize that we define the memory for sapwood and wood as the deficit, which is consistent with how we use it to define flushing. Closing this issue.

mpaiao commented 3 years ago

@rgknox @xuchongang I am working on the leaf phenology code, and I plan to allow the live fine-root biomass to decline when leaves are off, to reduce maintenance costs for drought deciduous trees when they shed leaves. @ckoven suggested to make this assumption true for drought deciduous only. My plan is the following:

  1. Create a "memory" variable similar to the sapwood and structure, so we can figure out the deficit for fine roots in case the PFT is not maintaining fine root biomass during the leaf off period.
  2. Either add "if" statements to let fine root reduction to occur only for drought deciduous plants, or add a new parameter that controls fine root maintenance for deciduous plants. I prefer the latter because it allows us to easily change the assumption for any deciduous PFT (cold or drought). If this is fine, should we do the same for the stem_drop_fraction?

By the way, should we consider renaming these memory variables? laimemory is misleading (we store leaf biomass, not LAI). Also "sapwmemory" and "structmemory" are deficits, not memory in the same sense as "laimemory". Or maybe we should save the memory and then find the deficits in the leaf on/leaf off routine...

rgknox commented 3 years ago

I had been wanting to get rid of the memory variables completely. The LAI memory variable is the leaf carbon at the time of the last leaf drop event. And the sapwood and wood memory is how much was dropped in the last event.

We discussed this at one point and agreed that there is no reason we can't use the allometry equations to calculate the target biomass in these cases. But, this has never taken priority.

If you want to calculate a deficit, you can do something like this: *Note in the call to GetState, fnrt_organ and carbon12_element are named constants found int PRTGenericMod

! Target fine-root biomass and deriv. according to allometry and trimming [kgC, kgC/cm]
call bfineroot(dbh,ipft,canopy_trim,target_fnrt_c)                            ! maximum fnrt via allometry (ie the target)
fnrt_c   = ccohort%prt%GetState(fnrt_organ, carbon12_element)   ! actual fineroot biomass
fnrt_deficit = target_fnrt_c - fnrt_c