diff --git a/biogeochem/EDPhysiologyMod.F90 b/biogeochem/EDPhysiologyMod.F90 index 4c6bbb8a4e..cc6e498094 100644 --- a/biogeochem/EDPhysiologyMod.F90 +++ b/biogeochem/EDPhysiologyMod.F90 @@ -661,10 +661,31 @@ subroutine phenology( currentSite, bc_in ) endif ! ! accumulate the GDD using daily mean temperatures - if (bc_in%t_veg24_si .gt. tfrz) then + ! Don't accumulate GDD during the growing season (that wouldn't make sense) + if (bc_in%t_veg24_si .gt. tfrz.and. currentSite%cstatus == phen_cstat_iscold) then currentSite%grow_deg_days = currentSite%grow_deg_days + bc_in%t_veg24_si - tfrz endif + !this logic is to prevent GDD accumulating after the leaves have fallen and before the + ! beginnning of the accumulation period, to prevend erroneous autumn leaf flushing. + if(model_day_int>365)then !only do this after the first year to prevent odd behaviour + + if(currentSite%lat .gt. 0.0_r8)then !Northern Hemisphere + ! In the north, don't accumulate when we are past the leaf fall date. + ! Accumulation starts on day 1 of year in NH. + ! The 180 is to prevent going into an 'always off' state after initialization + if( model_day_int .gt. currentSite%cleafoffdate.and.hlm_day_of_year.gt.180)then ! + currentSite%grow_deg_days = 0._r8 + endif + else !Southern Hemisphere + ! In the South, don't accumulate after the leaf off date, and before the start of + ! the accumulation phase (day 181). + if(model_day_int .gt. currentSite%cleafoffdate.and.hlm_day_of_year.lt.gddstart) then! + currentSite%grow_deg_days = 0._r8 + endif + endif + endif !year1 + ! Calculate the number of days since the leaves last came on ! and off. If this is the beginning of the simulation, that day might ! not had occured yet, so set it to last year to get things rolling @@ -694,9 +715,12 @@ subroutine phenology( currentSite, bc_in ) if ( (currentSite%cstatus == phen_cstat_iscold .or. & currentSite%cstatus == phen_cstat_nevercold) .and. & (currentSite%grow_deg_days > gdd_threshold) .and. & + (dayssincecleafoff > ED_val_phen_mindayson) .and. & (currentSite%nchilldays >= 1)) then currentSite%cstatus = phen_cstat_notcold ! Set to not-cold status (leaves can come on) currentSite%cleafondate = model_day_int + dayssincecleafon = 0 + currentSite%grow_deg_days = 0._r8 ! zero GDD for the rest of the year until counting season begins. if ( debug ) write(fates_log(),*) 'leaves on' endif !GDD @@ -907,7 +931,7 @@ subroutine phenology_leafonoff(currentSite) real(r8) :: store_c_transfer_frac ! Fraction of storage carbon used to flush leaves integer :: ipft real(r8), parameter :: leaf_drop_fraction = 1.0_r8 - + real(r8), parameter :: carbon_store_buffer = 0.10_r8 !------------------------------------------------------------------------ currentPatch => CurrentSite%oldest_patch @@ -936,8 +960,11 @@ subroutine phenology_leafonoff(currentSite) ! stop flow of carbon out of bstore. if(store_c>nearzero) then - store_c_transfer_frac = & - min(EDPftvarcon_inst%phenflush_fraction(ipft)*currentCohort%laimemory, store_c)/store_c + ! flush either the amount required from the laimemory, or -most- of the storage pool + ! RF: added a criterium to stop the entire store pool emptying and triggering termination mortality + ! n.b. this might not be necessary if we adopted a more gradual approach to leaf flushing... + store_c_transfer_frac = min((EDPftvarcon_inst%phenflush_fraction(ipft)* & + currentCohort%laimemory)/store_c,(1.0_r8-carbon_store_buffer)) else store_c_transfer_frac = 0.0_r8 end if diff --git a/parameter_files/fates_params_default.cdl b/parameter_files/fates_params_default.cdl index 41a49c5e42..82142bf816 100644 --- a/parameter_files/fates_params_default.cdl +++ b/parameter_files/fates_params_default.cdl @@ -1172,7 +1172,7 @@ data: fates_phen_drought_threshold = 0.15 ; - fates_phen_mindayson = 30 ; + fates_phen_mindayson = 90 ; fates_phen_ncolddayslim = 5 ;