Skip to content

Commit

Permalink
Use average days per year when converting parameter units
Browse files Browse the repository at this point in the history
Resolves #1612
  • Loading branch information
billsacks committed Feb 1, 2022
1 parent 0044189 commit bb99ffe
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 19 deletions.
4 changes: 2 additions & 2 deletions src/biogeochem/CNC14DecayMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module CNC14DecayMod
!
! !USES:
use shr_kind_mod , only : r8 => shr_kind_r8
use clm_time_manager , only : get_step_size_real, get_curr_days_per_year
use clm_time_manager , only : get_step_size_real, get_average_days_per_year
use clm_varpar , only : nlevdecomp, ndecomp_pools
use clm_varcon , only : secspday
use clm_varctl , only : spinup_state
Expand Down Expand Up @@ -87,7 +87,7 @@ subroutine C14Decay( bounds, num_soilc, filter_soilc, num_soilp, filter_soilp, &

! set time steps
dt = get_step_size_real()
days_per_year = get_curr_days_per_year()
days_per_year = get_average_days_per_year()

half_life = 5730._r8 * secspday * days_per_year
decay_const = - log(0.5_r8) / half_life
Expand Down
4 changes: 2 additions & 2 deletions src/biogeochem/CNGapMortalityMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ subroutine CNGapMortality (bounds, num_soilc, filter_soilc, num_soilp, filter_so
! Gap-phase mortality routine for coupled carbon-nitrogen code (CN)
!
! !USES:
use clm_time_manager , only: get_curr_days_per_year
use clm_time_manager , only: get_average_days_per_year
use clm_varpar , only: nlevdecomp_full
use clm_varcon , only: secspday
use clm_varctl , only: use_cndv, spinup_state
Expand Down Expand Up @@ -180,7 +180,7 @@ subroutine CNGapMortality (bounds, num_soilc, filter_soilc, num_soilp, filter_so

end if

m = am/(get_curr_days_per_year() * secspday)
m = am/(get_average_days_per_year() * secspday)

!------------------------------------------------------
! patch-level gap mortality carbon fluxes
Expand Down
28 changes: 15 additions & 13 deletions src/biogeochem/CNPhenologyMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -589,7 +589,7 @@ subroutine CNEvergreenPhenology (num_soilp, filter_soilp , &
!
! !USES:
use clm_varcon , only : secspday
use clm_time_manager , only : get_curr_days_per_year
use clm_time_manager , only : get_average_days_per_year
use clm_varctl , only : CN_evergreen_phenology_opt
!
! !ARGUMENTS:
Expand All @@ -602,7 +602,7 @@ subroutine CNEvergreenPhenology (num_soilp, filter_soilp , &
type(cnveg_nitrogenflux_type) , intent(inout) :: cnveg_nitrogenflux_inst
!
! !LOCAL VARIABLES:
real(r8):: dayspyr ! Days per year
real(r8):: avg_dayspyr ! Average days per year
integer :: p ! indices
integer :: fp ! lake filter patch index

Expand Down Expand Up @@ -677,12 +677,12 @@ subroutine CNEvergreenPhenology (num_soilp, filter_soilp , &
lgsf => cnveg_state_inst%lgsf_patch & ! Output: [real(r8) (:) ] long growing season factor [0-1]
)

dayspyr = get_curr_days_per_year()
avg_dayspyr = get_average_days_per_year()

do fp = 1,num_soilp
p = filter_soilp(fp)
if (evergreen(ivt(p)) == 1._r8) then
bglfr(p) = 1._r8/(leaf_long(ivt(p)) * dayspyr * secspday)
bglfr(p) = 1._r8/(leaf_long(ivt(p)) * avg_dayspyr * secspday)
bgtr(p) = 0._r8
lgsf(p) = 0._r8
end if
Expand Down Expand Up @@ -1204,7 +1204,7 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , &
! per year.
!
! !USES:
use clm_time_manager , only : get_curr_days_per_year
use clm_time_manager , only : get_average_days_per_year
use CNSharedParamsMod, only : use_fun
use clm_varcon , only : secspday
use shr_const_mod , only : SHR_CONST_TKFRZ, SHR_CONST_PI
Expand All @@ -1227,7 +1227,7 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , &
real(r8),parameter :: secspqtrday = secspday / 4 ! seconds per quarter day
integer :: g,c,p ! indices
integer :: fp ! lake filter patch index
real(r8):: dayspyr ! days per year
real(r8):: avg_dayspyr ! average days per year
real(r8):: crit_onset_gdd ! degree days for onset trigger
real(r8):: soilt ! temperature of top soil layer
real(r8):: psi ! water stress of top soil layer
Expand Down Expand Up @@ -1322,8 +1322,7 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , &
deadcrootn_storage_to_xfer => cnveg_nitrogenflux_inst%deadcrootn_storage_to_xfer_patch & ! Output: [real(r8) (:) ]
)

! set time steps
dayspyr = get_curr_days_per_year()
avg_dayspyr = get_average_days_per_year()

! specify rain threshold for leaf onset
rain_threshold = 20._r8
Expand Down Expand Up @@ -1572,7 +1571,7 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , &
! calculate long growing season factor (lgsf)
! only begin to calculate a lgsf greater than 0.0 once the number
! of days active exceeds days/year.
lgsf(p) = max(min(3.0_r8*(days_active(p)-leaf_long(ivt(p))*dayspyr )/dayspyr, 1._r8),0._r8)
lgsf(p) = max(min(3.0_r8*(days_active(p)-leaf_long(ivt(p))*avg_dayspyr )/avg_dayspyr, 1._r8),0._r8)
! RosieF. 5 Nov 2015. Changed this such that the increase in leaf turnover is faster after
! trees enter the 'fake evergreen' state. Otherwise, they have a whole year of
! cheating, with less litterfall than they should have, resulting in very high LAI.
Expand All @@ -1587,7 +1586,7 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , &
! calculate the background litterfall rate (bglfr)
! in units 1/s, based on leaf longevity (yrs) and correction for long growing season

bglfr(p) = (1._r8/(leaf_long(ivt(p))*dayspyr*secspday))*lgsf(p)
bglfr(p) = (1._r8/(leaf_long(ivt(p))*avg_dayspyr*secspday))*lgsf(p)
end if

! set background transfer rate when active but not in the phenological onset period
Expand All @@ -1598,7 +1597,7 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , &
! in complete turnover of the storage pools in one year at steady state,
! once lgsf has reached 1.0 (after 730 days active).

bgtr(p) = (1._r8/(dayspyr*secspday))*lgsf(p)
bgtr(p) = (1._r8/(avg_dayspyr*secspday))*lgsf(p)

! set carbon fluxes for shifting storage pools to transfer pools

Expand Down Expand Up @@ -1645,6 +1644,7 @@ subroutine CropPhenology(num_pcropp, filter_pcropp , &

! !USES:
use clm_time_manager , only : get_curr_date, get_curr_calday, get_curr_days_per_year, get_rad_step_size
use clm_time_manager , only : get_average_days_per_year
use pftconMod , only : ntmp_corn, nswheat, nwwheat, ntmp_soybean
use pftconMod , only : nirrig_tmp_corn, nirrig_swheat, nirrig_wwheat, nirrig_tmp_soybean
use pftconMod , only : ntrp_corn, nsugarcane, ntrp_soybean, ncotton, nrice
Expand Down Expand Up @@ -1684,7 +1684,8 @@ subroutine CropPhenology(num_pcropp, filter_pcropp , &
integer h ! hemisphere indices
integer idpp ! number of days past planting
real(r8) :: dtrad ! radiation time step delta t (seconds)
real(r8) dayspyr ! days per year
real(r8) dayspyr ! days per year in this year
real(r8) avg_dayspyr ! average number of days per year
real(r8) crmcorn ! comparitive relative maturity for corn
real(r8) ndays_on ! number of days to fertilize
logical do_plant_normal ! are the normal planting rules defined and satisfied?
Expand Down Expand Up @@ -1750,6 +1751,7 @@ subroutine CropPhenology(num_pcropp, filter_pcropp , &

! get time info
dayspyr = get_curr_days_per_year()
avg_dayspyr = get_average_days_per_year()
jday = get_curr_calday()
call get_curr_date(kyr, kmo, kda, mcsec)
dtrad = real( get_rad_step_size(), r8 )
Expand Down Expand Up @@ -2105,7 +2107,7 @@ subroutine CropPhenology(num_pcropp, filter_pcropp , &

else if (hui(p) >= huigrain(p)) then
cphase(p) = 3._r8
bglfr(p) = 1._r8/(leaf_long(ivt(p))*dayspyr*secspday)
bglfr(p) = 1._r8/(leaf_long(ivt(p))*avg_dayspyr*secspday)
end if

! continue fertilizer application while in phase 2;
Expand Down
4 changes: 2 additions & 2 deletions src/soilbiogeochem/SoilBiogeochemDecompCascadeBGCMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,7 @@ subroutine decomp_rate_constants_bgc(bounds, num_soilc, filter_soilc, &
! written by C. Koven based on original CLM4 decomposition cascade
!
! !USES:
use clm_time_manager , only : get_curr_days_per_year
use clm_time_manager , only : get_average_days_per_year
use shr_const_mod , only : SHR_CONST_PI
use clm_varcon , only : secspday
!
Expand Down Expand Up @@ -654,7 +654,7 @@ subroutine decomp_rate_constants_bgc(bounds, num_soilc, filter_soilc, &
errMsg(sourcefile, __LINE__))
endif

days_per_year = get_curr_days_per_year()
days_per_year = get_average_days_per_year()

! set "Q10" parameter
Q10 = CNParamsShareInst%Q10
Expand Down

0 comments on commit bb99ffe

Please sign in to comment.