Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added the phen_model_day timer to work with all restart conditions #685

Merged
merged 7 commits into from
Aug 26, 2022
11 changes: 8 additions & 3 deletions biogeochem/EDPhysiologyMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -737,8 +737,12 @@ subroutine phenology( currentSite, bc_in )

! This is the integer model day. The first day of the simulation is 1, and it
! continues monotonically, indefinitely
model_day_int = nint(hlm_model_day)
! Advance it. (this should be a global, no reason
! for site level, but we don't have global scalars in the
! restart file)

currentSite%phen_model_date = currentSite%phen_model_date + 1
model_day_int = currentSite%phen_model_date

! Use the following layer index to calculate drought conditions
ilayer_swater = minloc(abs(bc_in%z_sisl(:)-dphen_soil_depth),dim=1)
Expand Down Expand Up @@ -842,7 +846,7 @@ subroutine phenology( currentSite, bc_in )
end if

if (model_day_int < currentSite%cleafondate) then
dayssincecleafon = model_day_int - (currentSite%cleafondate-365)
dayssincecleafon = model_day_int - (currentSite%cleafondate - 365)
else
dayssincecleafon = model_day_int - currentSite%cleafondate
end if
Expand Down Expand Up @@ -1054,6 +1058,7 @@ subroutine phenology( currentSite, bc_in )

call phenology_leafonoff(currentSite)

return
end subroutine phenology


Expand Down Expand Up @@ -1582,7 +1587,7 @@ subroutine SeedIn( currentSite, bc_in )
! !USES:
use EDTypesMod, only : area
use EDTypesMod, only : homogenize_seed_pfts
!use FatesInterfaceTypesMod, only : hlm_use_fixed_biogeog ! For future reduced complexity?

!
! !ARGUMENTS
type(ed_site_type), intent(inout), target :: currentSite
Expand Down
29 changes: 16 additions & 13 deletions main/EDInitMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ module EDInitMod
use EDPatchDynamicsMod , only : set_patchno
use EDPhysiologyMod , only : assign_cohort_sp_properties
use ChecksBalancesMod , only : SiteMassStock
use FatesInterfaceTypesMod , only : hlm_day_of_year
use EDTypesMod , only : ed_site_type, ed_patch_type, ed_cohort_type
use EDTypesMod , only : numWaterMem
use EDTypesMod , only : num_vegtemp_mem
Expand Down Expand Up @@ -200,13 +201,15 @@ subroutine zero_site( site_in )
site_in%snow_depth = nan
site_in%nchilldays = fates_unset_int
site_in%ncolddays = fates_unset_int
site_in%cleafondate = fates_unset_int ! doy of leaf on
site_in%cleafoffdate = fates_unset_int ! doy of leaf off
site_in%dleafondate = fates_unset_int ! doy of leaf on drought
site_in%dleafoffdate = fates_unset_int ! doy of leaf on drought
site_in%cleafondate = fates_unset_int
site_in%cleafoffdate = fates_unset_int
site_in%dleafondate = fates_unset_int
site_in%dleafoffdate = fates_unset_int
site_in%water_memory(:) = nan
site_in%vegtemp_memory(:) = nan ! record of last 10 days temperature for senescence model.

site_in%phen_model_date = fates_unset_int

! Disturbance rates tracking
site_in%primary_land_patchfusion_error = 0.0_r8
site_in%potential_disturbance_rates(:) = 0.0_r8
Expand Down Expand Up @@ -315,15 +318,15 @@ subroutine set_site_properties( nsites, sites,bc_in )
do s = 1,nsites
sites(s)%nchilldays = 0
sites(s)%ncolddays = 0 ! recalculated in phenology
! immediately, so yes this
! is memory-less, but needed
! for first value in history file

sites(s)%cleafondate = cleafon
sites(s)%cleafoffdate = cleafoff
sites(s)%dleafoffdate = dleafoff
sites(s)%dleafondate = dleafon
sites(s)%grow_deg_days = GDD
! immediately, so yes this
! is memory-less, but needed
! for first value in history file
sites(s)%phen_model_date = 0
sites(s)%cleafondate = cleafon - hlm_day_of_year
sites(s)%cleafoffdate = cleafoff - hlm_day_of_year
sites(s)%dleafoffdate = dleafoff - hlm_day_of_year
sites(s)%dleafondate = dleafon - hlm_day_of_year
sites(s)%grow_deg_days = GDD

sites(s)%water_memory(1:numWaterMem) = watermem
sites(s)%vegtemp_memory(1:num_vegtemp_mem) = 0._r8
Expand Down
5 changes: 5 additions & 0 deletions main/EDTypesMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -741,7 +741,12 @@ module EDTypesMod
integer :: cleafoffdate ! model date (day integer) of leaf off (cold):-
integer :: dleafondate ! model date (day integer) of leaf on drought:-
integer :: dleafoffdate ! model date (day integer) of leaf off drought:-
integer :: phen_model_date ! current model date (day integer)
! this date stays continuous when
! in runs that are restarted, regardless of
! the conditions of restart


real(r8) :: water_memory(numWaterMem) ! last 10 days of soil moisture memory...


Expand Down
12 changes: 6 additions & 6 deletions main/FatesHistoryInterfaceMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1755,7 +1755,7 @@ subroutine update_history_dyn(this,nc,nsites,sites)
integer :: height_bin_max, height_bin_min ! which height bin a given cohort's canopy is in
integer :: i_heightbin ! iterator for height bins
integer :: el ! Loop index for elements
integer :: model_day_int ! integer model day from reference
integer :: model_day_int ! Integer model day since simulation start
integer :: ageclass_since_anthrodist ! what is the equivalent age class for
! time-since-anthropogenic-disturbance of secondary forest

Expand Down Expand Up @@ -2041,7 +2041,7 @@ subroutine update_history_dyn(this,nc,nsites,sites)
hio_cleafoff_si => this%hvars(ih_cleafoff_si)%r81d, &
hio_cleafon_si => this%hvars(ih_cleafon_si)%r81d, &
hio_dleafoff_si => this%hvars(ih_dleafoff_si)%r81d, &
hio_dleafon_si => this%hvars(ih_dleafoff_si)%r81d, &
hio_dleafon_si => this%hvars(ih_dleafon_si)%r81d, &
hio_tveg24 => this%hvars(ih_tveg24_si)%r81d, &
hio_meanliqvol_si => this%hvars(ih_meanliqvol_si)%r81d, &
hio_cbal_err_fates_si => this%hvars(ih_cbal_err_fates_si)%r81d, &
Expand Down Expand Up @@ -2101,10 +2101,10 @@ subroutine update_history_dyn(this,nc,nsites,sites)
hio_gdd_si(io_si) = sites(s)%grow_deg_days

! Model days elapsed since leaf on/off for cold- and drought-deciduous
hio_cleafoff_si(io_si) = real(model_day_int - sites(s)%cleafoffdate,r8)
hio_cleafon_si(io_si) = real(model_day_int - sites(s)%cleafondate,r8)
hio_dleafoff_si(io_si) = real(model_day_int - sites(s)%dleafoffdate,r8)
hio_dleafon_si(io_si) = real(model_day_int - sites(s)%dleafondate,r8)
hio_cleafoff_si(io_si) = real(sites(s)%phen_model_date - sites(s)%cleafoffdate,r8)
hio_cleafon_si(io_si) = real(sites(s)%phen_model_date - sites(s)%cleafondate,r8)
hio_dleafoff_si(io_si) = real(sites(s)%phen_model_date - sites(s)%dleafoffdate,r8)
hio_dleafon_si(io_si) = real(sites(s)%phen_model_date - sites(s)%dleafondate,r8)

! Mean liquid water content (m3/m3) used for drought phenology
if(model_day_int>numWaterMem)then
Expand Down
47 changes: 27 additions & 20 deletions main/FatesRestartInterfaceMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,11 @@ module FatesRestartInterfaceMod
integer :: ir_dd_status_si
integer :: ir_nchill_days_si
integer :: ir_ncold_days_si
integer :: ir_leafondate_si
integer :: ir_leafoffdate_si
integer :: ir_cleafondate_si
integer :: ir_cleafoffdate_si
integer :: ir_dleafondate_si
integer :: ir_dleafoffdate_si
integer :: ir_phenmodeldate_si
integer :: ir_acc_ni_si
integer :: ir_gdd_si
integer :: ir_snow_depth_si
Expand Down Expand Up @@ -618,22 +619,26 @@ subroutine define_restart_vars(this, initialize_variables)
long_name='cold day counter', units='unitless', flushval = flushinvalid, &
hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_ncold_days_si )

call this%set_restart_var(vname='fates_leafondate', vtype=site_int, &
long_name='the day of year for leaf on', units='day of year', flushval = flushinvalid, &
hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_leafondate_si )
call this%set_restart_var(vname='fates_cold_leafondate', vtype=site_int, &
long_name='the model day of last cold leaf on', units='absolute integer day', flushval = flushinvalid, &
hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_cleafondate_si )

call this%set_restart_var(vname='fates_leafoffdate', vtype=site_int, &
long_name='the day of year for leaf off', units='day of year', flushval = flushinvalid, &
hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_leafoffdate_si )
call this%set_restart_var(vname='fates_cold_leafoffdate', vtype=site_int, &
long_name='the model day last cold leaf off', units='absolute integer day', flushval = flushinvalid, &
hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_cleafoffdate_si )

call this%set_restart_var(vname='fates_drought_leafondate', vtype=site_int, &
long_name='the day of year for drought based leaf-on', units='day of year', flushval = flushinvalid, &
long_name='the model day of last drought based leaf-on', units='absolute integer day', flushval = flushinvalid, &
hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_dleafondate_si )

call this%set_restart_var(vname='fates_drought_leafoffdate', vtype=site_int, &
long_name='the day of year for drought based leaf-off', units='day of year', flushval = flushinvalid, &
long_name='the model day of last drought based leaf-off', units='absolute integer day', flushval = flushinvalid, &
hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_dleafoffdate_si )

call this%set_restart_var(vname='fates_phen_model_date', vtype=site_int, &
long_name='integer model day used for phen timing', units='absolute integer day', flushval = flushinvalid, &
hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_phenmodeldate_si )

call this%set_restart_var(vname='fates_acc_nesterov_id', vtype=site_r8, &
long_name='a nesterov index accumulator', units='unitless', flushval = flushzero, &
hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_acc_ni_si )
Expand Down Expand Up @@ -1752,10 +1757,11 @@ subroutine set_restart_vectors(this,nc,nsites,sites)
rio_dd_status_si => this%rvars(ir_dd_status_si)%int1d, &
rio_nchill_days_si => this%rvars(ir_nchill_days_si)%int1d, &
rio_ncold_days_si => this%rvars(ir_ncold_days_si)%int1d, &
rio_leafondate_si => this%rvars(ir_leafondate_si)%int1d, &
rio_leafoffdate_si => this%rvars(ir_leafoffdate_si)%int1d, &
rio_cleafondate_si => this%rvars(ir_cleafondate_si)%int1d, &
rio_cleafoffdate_si => this%rvars(ir_cleafoffdate_si)%int1d, &
rio_dleafondate_si => this%rvars(ir_dleafondate_si)%int1d, &
rio_dleafoffdate_si => this%rvars(ir_dleafoffdate_si)%int1d, &
rio_phenmodeldate_si => this%rvars(ir_phenmodeldate_si)%int1d, &
rio_acc_ni_si => this%rvars(ir_acc_ni_si)%r81d, &
rio_gdd_si => this%rvars(ir_gdd_si)%r81d, &
rio_snow_depth_si => this%rvars(ir_snow_depth_si)%r81d, &
Expand Down Expand Up @@ -2244,9 +2250,9 @@ subroutine set_restart_vectors(this,nc,nsites,sites)
rio_dd_status_si(io_idx_si) = sites(s)%dstatus
rio_nchill_days_si(io_idx_si) = sites(s)%nchilldays
rio_ncold_days_si(io_idx_si) = sites(s)%ncolddays
rio_leafondate_si(io_idx_si) = sites(s)%cleafondate
rio_leafoffdate_si(io_idx_si) = sites(s)%cleafoffdate

rio_cleafondate_si(io_idx_si) = sites(s)%cleafondate
rio_cleafoffdate_si(io_idx_si) = sites(s)%cleafoffdate
rio_phenmodeldate_si(io_idx_si)= sites(s)%phen_model_date
rio_dleafondate_si(io_idx_si) = sites(s)%dleafondate
rio_dleafoffdate_si(io_idx_si) = sites(s)%dleafoffdate
rio_acc_ni_si(io_idx_si) = sites(s)%acc_NI
Expand Down Expand Up @@ -2591,10 +2597,11 @@ subroutine get_restart_vectors(this, nc, nsites, sites)
rio_dd_status_si => this%rvars(ir_dd_status_si)%int1d, &
rio_nchill_days_si => this%rvars(ir_nchill_days_si)%int1d, &
rio_ncold_days_si => this%rvars(ir_ncold_days_si)%int1d, &
rio_leafondate_si => this%rvars(ir_leafondate_si)%int1d, &
rio_leafoffdate_si => this%rvars(ir_leafoffdate_si)%int1d, &
rio_cleafondate_si => this%rvars(ir_cleafondate_si)%int1d, &
rio_cleafoffdate_si => this%rvars(ir_cleafoffdate_si)%int1d, &
rio_dleafondate_si => this%rvars(ir_dleafondate_si)%int1d, &
rio_dleafoffdate_si => this%rvars(ir_dleafoffdate_si)%int1d, &
rio_phenmodeldate_si => this%rvars(ir_phenmodeldate_si)%int1d, &
rio_acc_ni_si => this%rvars(ir_acc_ni_si)%r81d, &
rio_gdd_si => this%rvars(ir_gdd_si)%r81d, &
rio_snow_depth_si => this%rvars(ir_snow_depth_si)%r81d, &
Expand Down Expand Up @@ -3109,14 +3116,14 @@ subroutine get_restart_vectors(this, nc, nsites, sites)
sites(s)%dstatus = rio_dd_status_si(io_idx_si)
sites(s)%nchilldays = rio_nchill_days_si(io_idx_si)
sites(s)%ncolddays = rio_ncold_days_si(io_idx_si)
sites(s)%cleafondate = rio_leafondate_si(io_idx_si)
sites(s)%cleafoffdate = rio_leafoffdate_si(io_idx_si)
sites(s)%cleafondate = rio_cleafondate_si(io_idx_si)
sites(s)%cleafoffdate = rio_cleafoffdate_si(io_idx_si)
sites(s)%dleafondate = rio_dleafondate_si(io_idx_si)
sites(s)%dleafoffdate = rio_dleafoffdate_si(io_idx_si)
sites(s)%acc_NI = rio_acc_ni_si(io_idx_si)
sites(s)%grow_deg_days = rio_gdd_si(io_idx_si)
sites(s)%phen_model_date= rio_phenmodeldate_si(io_idx_si)
sites(s)%snow_depth = rio_snow_depth_si(io_idx_si)

sites(s)%resources_management%trunk_product_site = rio_trunk_product_si(io_idx_si)

end do
Expand Down