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

Size- and age- dependent mortality #599

Merged
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
7223c9b
Squashed commit of the following:
Jan 9, 2020
18bcd44
[ Fix bug in parameter file - cohort age classes must be defined ]
Jan 9, 2020
7b34903
[ Update FatesPFTindexSwapper to be compatible with python 3]
Jan 9, 2020
cfb431c
[ Change the logic for how the size and age mortality functions are
Jan 9, 2020
17a60ef
[Fix bug in FatesHistoryInterfaceMod ]
Jan 10, 2020
0789867
[Fix the small simple things like indentations and forgotten _r8s ]
Jan 17, 2020
d8e7935
[Change the switch for age dependent mortality ]
Jan 20, 2020
7a5bebe
[Update param file with metadata and add checks on param values ]
JessicaNeedham Jan 20, 2020
9e5ab32
[ Fix bug in flags for mortality params ]
Jan 21, 2020
b01c136
[In EDCohortDynamicsMod increase maxCohortsPerPatch to 300 if cohort
JessicaNeedham Jan 21, 2020
e45153c
[ More detailed flags for mortality parameter checks in
JessicaNeedham Jan 21, 2020
fb52c50
[ Change the cap on mortality ]
Jan 22, 2020
ab6fc20
[ Remove cap on mortality ]
Jan 23, 2020
dd28a9b
[Change check on initialised params to use the check_initialized
Jan 30, 2020
63c2958
[ Fix some minor bugs/make changes suggested by Rosie Fisher ]
JessicaNeedham Mar 11, 2020
774b105
[ Cohort age units to years ]
JessicaNeedham Mar 11, 2020
c83725a
[ Bug fix - .eqv. to .TRUE. for cohort_age_tracking check ]
JessicaNeedham Mar 11, 2020
aef198f
[Remove the cohort age tracking parameter and make
JessicaNeedham Mar 12, 2020
9345e67
[Fix bug with hlm_use_cohort_age_tracking flag ]
JessicaNeedham Mar 12, 2020
50f6efe
Merge remote-tracking branch 'ngeet_repo/master'
Mar 14, 2020
cbc4c17
Merge branch 'master' into JessicaNeedham-IO-sizeagemortality
Mar 14, 2020
54e8dfb
[Add one additional test to ensure age-dependent
JessicaNeedham Mar 17, 2020
fc733f9
[ Fix bug in error message for cohort age tracking flag ]
JessicaNeedham Mar 18, 2020
eed4545
[ifalse to 0 in a test of hlm_use_cohort_age_flag ]
Mar 18, 2020
22eb568
[ Update parameter file]
JessicaNeedham Mar 19, 2020
337ec13
[ Remove checks on cohort age bin edges ]
JessicaNeedham Mar 20, 2020
dd4d196
Merge branch 'master' into JessicaNeedham-IO-sizeagemortality-merged
rgknox Mar 24, 2020
f4afdf2
Fixed order of operations on mortality condition for age mortality, c…
rgknox Mar 24, 2020
cec41c7
Merge pull request #1 from rgknox/JessicaNeedham-IO-sizeagemortality-…
JessicaNeedham Mar 24, 2020
ee90e0f
[ Fix bug in mortality change in number density - logging
JessicaNeedham Mar 24, 2020
10809b9
[Change maxCohortsPerPatch back to 100]
JessicaNeedham Mar 26, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions biogeochem/EDCanopyStructureMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ module EDCanopyStructureMod
use FatesInterfaceMod , only : numpft
use FatesPlantHydraulicsMod, only : UpdateH2OVeg,InitHydrCohort, RecruitWaterStorage
use EDTypesMod , only : maxCohortsPerPatch

use EDParamsMod , only : cohort_age_tracking

use PRTGenericMod, only : leaf_organ
use PRTGenericMod, only : all_carbon_elements
use PRTGenericMod, only : leaf_organ
Expand Down Expand Up @@ -1258,9 +1259,12 @@ subroutine canopy_summarization( nsites, sites, bc_in )
use FatesInterfaceMod , only : bc_in_type
use EDPatchDynamicsMod , only : set_patchno
use FatesSizeAgeTypeIndicesMod, only : sizetype_class_index
use FatesSizeAgeTypeIndicesMod, only : coagetype_class_index
use EDtypesMod , only : area
use EDPftvarcon , only : EDPftvarcon_inst

use EDParamsMod , only : cohort_age_tracking
use FatesConstantsMod , only : itrue

! !ARGUMENTS
integer , intent(in) :: nsites
type(ed_site_type) , intent(inout), target :: sites(nsites)
Expand All @@ -1279,8 +1283,9 @@ subroutine canopy_summarization( nsites, sites, bc_in )
real(r8) :: sapw_c ! sapwood carbon [kg]
real(r8) :: store_c ! storage carbon [kg]
real(r8) :: struct_c ! structure carbon [kg]
!----------------------------------------------------------------------

!----------------------------------------------------------------------

if ( debug ) then
write(fates_log(),*) 'in canopy_summarization'
endif
Expand Down Expand Up @@ -1319,8 +1324,13 @@ subroutine canopy_summarization( nsites, sites, bc_in )
! Update the cohort's index within the size bin classes
! Update the cohort's index within the SCPF classification system
call sizetype_class_index(currentCohort%dbh,currentCohort%pft, &
currentCohort%size_class,currentCohort%size_by_pft_class)
currentCohort%size_class,currentCohort%size_by_pft_class)

if (cohort_age_tracking) then
call coagetype_class_index(currentCohort%coage,currentCohort%pft, &
currentCohort%coage_class,currentCohort%coage_by_pft_class)
end if

call carea_allom(currentCohort%dbh,currentCohort%n,sites(s)%spread,&
currentCohort%pft,currentCohort%c_area)

Expand Down
108 changes: 87 additions & 21 deletions biogeochem/EDCohortDynamicsMod.F90

Large diffs are not rendered by default.

89 changes: 76 additions & 13 deletions biogeochem/EDMortalityFunctionsMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -42,28 +42,34 @@ module EDMortalityFunctionsMod



subroutine mortality_rates( cohort_in,bc_in,cmort,hmort,bmort,frmort )
subroutine mortality_rates( cohort_in,bc_in,cmort,hmort,bmort,frmort,smort,asmort )

! ============================================================================
! Calculate mortality rates from carbon storage, hydraulic cavitation,
! background and freezing
! background and freezing and size dependent senescence
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and size and age dependent senescence maybe?

Also, is it me, or is 'senescence' really, really, hard to spell?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added 'age' in there. And yes! It is a terrible word to have to type repeatedly.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ha ha. Glad it isn't just my brain senescing, or whatever.

! ============================================================================

use FatesConstantsMod, only : tfrz => t_water_freeze_k_1atm

use FatesInterfaceMod , only : hlm_hio_ignore_val

type (ed_cohort_type), intent(in) :: cohort_in
type (bc_in_type), intent(in) :: bc_in
real(r8),intent(out) :: bmort ! background mortality : Fraction per year
real(r8),intent(out) :: cmort ! carbon starvation mortality
real(r8),intent(out) :: hmort ! hydraulic failure mortality
real(r8),intent(out) :: frmort ! freezing stress mortality
real(r8),intent(out) :: smort ! size dependent senescence term
real(r8),intent(out) :: asmort ! age dependent senescence term

real(r8) :: frac ! relativised stored carbohydrate
real(r8) :: leaf_c_target ! target leaf biomass kgC
real(r8) :: store_c
real(r8) :: hf_sm_threshold ! hydraulic failure soil moisture threshold
real(r8) :: hf_flc_threshold ! hydraulic failure fractional loss of conductivity threshold
real(r8) :: mort_ip_size_senescence ! inflection point for increase in mortality with dbh
real(r8) :: mort_r_size_senescence ! rate of mortality increase with dbh in senesence term
real(r8) :: mort_ip_age_senescence ! inflection point for increase in mortality with age
real(r8) :: mort_r_age_senescence ! rate of mortality increase with age in senescence term
real(r8) :: temp_dep_fraction ! Temp. function (freezing mortality)
real(r8) :: temp_in_C ! Daily averaged temperature in Celcius
real(r8) :: min_fmc_ag ! minimum fraction of maximum conductivity for aboveground
Expand All @@ -75,12 +81,41 @@ subroutine mortality_rates( cohort_in,bc_in,cmort,hmort,bmort,frmort )
logical, parameter :: test_zero_mortality = .false. ! Developer test which
! may help to debug carbon imbalances
! and the like

! Size Dependent Senescence
! rate (r) and inflection point (ip) define the increase in mortality rate with dbh
mort_r_size_senescence = EDPftvarcon_inst%mort_r_size_senescence(cohort_in%pft)
mort_ip_size_senescence = EDPftvarcon_inst%mort_ip_size_senescence(cohort_in%pft)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm worried that a user will set mort_r_size_senescence to 0 and think that will turn off size dependent senescence. I think that value generates an smort of 0.5. Will check how this is read in.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lets add some metadata to the parameter value entry that explains _ turns this off, and what valid ranges are.
https://github.com/NGEET/fates/blob/master/parameter_files/fates_params_default.cdl#L322

There is also this subroutine here, a good place to check if fates parameters are in acceptable ranges (if for instance 0 is an unexpected/invalid, you can have fates gracefully complain and fail):

subroutine FatesCheckParams(is_master, parteh_mode)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good. I'll add some metadata to the parameter value entry and some checks in FatesCheckParams.

! if param values have been set then calculate smort
if (mort_ip_size_senescence < 10000.0_r8 ) then
smort = 1.0_r8 / ( 1.0_r8 + exp( -1.0_r8 * mort_r_size_senescence * &
(cohort_in%dbh - mort_ip_size_senescence) ) )
else
smort = 0.0_r8
end if

! if user has set cohort age fusion param to not be _ we calculate age
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is _ in this sentence? Also why doesn't this use 'cohort_age_tracking'?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've changed it to match the comment above for size mortality. The size and age dependent mortality parameters are _ by default in the parameter file. The user has to set them in order to turn on either mortality term. Cohort age tracking is turned on separately with the cohort_age_tracking parameter. This was in case anyone in the future wanted to track cohort age independently of having size or age mortality turned on.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

check_initialized is defined in PRTGenericMod.F90, but that check is designed to work in step with un_initialized. See here:

https://github.com/NGEET/fates/blob/master/parteh/PRTGenericMod.F90#L43

It only works in situations where we are defining uninitialized values with "un_initialized". In this case, the parameter values that have "_" from the file, are not the same as un_initialized.

I remember we thought it was 9.9E36, but there was some confusion if we were importing that value correctly... I had thought that "spval" from CLM/ELM would give us this value.

We have an "ignore" value for history, but that value is not necessarily the "no data" value we get from netcdf: https://github.com/NGEET/fates/blob/master/main/FatesInterfaceMod.F90#L94

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah ok, thank you. I misunderstood the un_initialized value. Would it make most sense then for me to define a local arbitrary large number to compare these parameters against, in order to check whether or not they have been set by the user in the parameter file?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the fill values we were printing out when they made there way to FATES were 1E36 right? If so, I think this is is where it is defined...

https://github.com/ESCOMP/CTSM/blob/master/src/main/ncdio_pio.F90.in#L146

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If I print a parameter that is "_" in the parameter file I get 9.9692099...E+036.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it is defined in ./cime/src/externals/pio2/src/flib/pio_types.F90 L234-235

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've made a new variable called 'fates_check_param_set' defined in FatesConstantsMod to check whether the mortality parameters have been set. This might not be the way to go so happy to change it if there is a better way of doing things. But it seems to be working.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rgknox I think the discussion from yesterday is here.

! dependent mortality
if (mort_ip_age_senescence < 10000.0_r8) then
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it true that we only want to calculate an aging mortality rate if we are tracking aging and cohort_age_tracking is true? Should we be using that logical here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, ageing mortality can only be calculated if cohort age tracking is on. I changed the logic so that cohort age tracking could be on without having ageing mortality. So now the 'cohort_age_tracking' parameter in the param file turns on cohort age tracking. And both size and age dependent mortality get turned on by setting the ip_age/size_senescence parameters. I can put in some flags so that the ip_age_senescence parameter can't be turned on without cohort_age_tracking being on.

! Age Dependent Senescence
! rate and inflection point define the change in mortality with age
mort_r_age_senescence = EDPftvarcon_inst%mort_r_age_senescence(cohort_in%pft)
mort_ip_age_senescence = EDPftvarcon_inst%mort_ip_age_senescence(cohort_in%pft)
asmort = 1.0_r8 / (1.0_r8 + exp(-1.0_r8 * mort_r_age_senescence * &
(cohort_in%coage - mort_ip_age_senescence ) ) )
else
asmort = 0.0_r8
end if

if (hlm_use_ed_prescribed_phys .eq. ifalse) then


if (hlm_use_ed_prescribed_phys .eq. ifalse) then

! 'Background' mortality (can vary as a function of
! density as in ED1.0 and ED2.0, but doesn't here for tractability)
bmort = EDPftvarcon_inst%bmort(cohort_in%pft)

bmort = EDPftvarcon_inst%bmort(cohort_in%pft)

! Proxy for hydraulic failure induced mortality.
hf_sm_threshold = EDPftvarcon_inst%hf_sm_threshold(cohort_in%pft)
Expand Down Expand Up @@ -141,9 +176,10 @@ subroutine mortality_rates( cohort_in,bc_in,cmort,hmort,bmort,frmort )

!mortality_rates = bmort + hmort + cmort

else ! i.e. hlm_use_ed_prescribed_phys is true
else ! i.e. hlm_use_ed_prescribed_phys is true

if ( cohort_in%canopy_layer .eq. 1) then
bmort = EDPftvarcon_inst%prescribed_mortality_canopy(cohort_in%pft)
bmort = EDPftvarcon_inst%prescribed_mortality_canopy(cohort_in%pft)
else
bmort = EDPftvarcon_inst%prescribed_mortality_understory(cohort_in%pft)
endif
Expand All @@ -157,6 +193,8 @@ subroutine mortality_rates( cohort_in,bc_in,cmort,hmort,bmort,frmort )
hmort = 0.0_r8
frmort = 0.0_r8
bmort = 0.0_r8
smort = 0.0_r8
asmort = 0.0_r8
end if

return
Expand All @@ -174,6 +212,7 @@ subroutine Mortality_Derivative( currentSite, currentCohort, bc_in)
!
! !USES:

use FatesInterfaceMod, only : hlm_freq_day
!
! !ARGUMENTS
type(ed_site_type), intent(inout), target :: currentSite
Expand All @@ -185,6 +224,8 @@ subroutine Mortality_Derivative( currentSite, currentCohort, bc_in)
real(r8) :: bmort ! background mortality rate (fraction per year)
real(r8) :: hmort ! hydraulic failure mortality rate (fraction per year)
real(r8) :: frmort ! freezing mortality rate (fraction per year)
real(r8) :: smort ! size dependent senescence mortality rate (fraction per year)
real(r8) :: asmort ! age dependent senescence mortality rate (fraction per year)
real(r8) :: dndt_logging ! Mortality rate (per day) associated with the a logging event
integer :: ipft ! local copy of the pft index
!----------------------------------------------------------------------
Expand All @@ -193,7 +234,7 @@ subroutine Mortality_Derivative( currentSite, currentCohort, bc_in)

! Mortality for trees in the understorey.
!if trees are in the canopy, then their death is 'disturbance'. This probably needs a different terminology
call mortality_rates(currentCohort,bc_in,cmort,hmort,bmort,frmort)
call mortality_rates(currentCohort,bc_in,cmort,hmort,bmort,frmort,smort, asmort)
call LoggingMortality_frac(ipft, currentCohort%dbh, currentCohort%canopy_layer, &
currentCohort%lmort_direct, &
currentCohort%lmort_collateral, &
Expand All @@ -206,14 +247,36 @@ subroutine Mortality_Derivative( currentSite, currentCohort, bc_in)
if (currentCohort%canopy_layer > 1)then
! Include understory logging mortality rates not associated with disturbance
dndt_logging = (currentCohort%lmort_direct + &
currentCohort%lmort_collateral + &
currentCohort%lmort_infra)/hlm_freq_day
currentCohort%dndt = -1.0_r8 * (cmort+hmort+bmort+frmort+dndt_logging) * currentCohort%n
currentCohort%lmort_collateral + &
currentCohort%lmort_infra)/hlm_freq_day

! this caps bmort so that daily mortality cannot exceed 0.995
if ((cmort+hmort+bmort+frmort+smort+asmort + dndt_logging)*hlm_freq_day &
> 1.0_r8)then
bmort = (1.0_r8 - ((cmort+hmort+asmort+frmort+smort+dndt_logging)*hlm_freq_day)) &
/hlm_freq_day
endif

currentCohort%dndt = -1.0_r8 * &
(cmort+hmort+bmort+frmort+smort+asmort + dndt_logging) &
* currentCohort%n
else

! cap on bmort for canopy layers - bmort is adjusted so that total mortality
! including disturbance fraction does not exceed 0.995
if(((cmort+hmort+bmort+frmort+smort+asmort)*hlm_freq_day) > &
1.0_r8 - fates_mortality_disturbance_fraction)then
bmort = (1.0_r8 - fates_mortality_disturbance_fraction - &
((cmort+hmort+asmort+frmort+smort)*hlm_freq_day))/hlm_freq_day
endif


! Mortality from logging in the canopy is ONLY disturbance generating, don't
! update number densities via non-disturbance inducing death
currentCohort%dndt = -(1.0_r8 - fates_mortality_disturbance_fraction) &
* (cmort+hmort+bmort+frmort) * currentCohort%n
currentCohort%dndt= -(1.0_r8-fates_mortality_disturbance_fraction) &
* (cmort+hmort+bmort+frmort+smort+asmort+dndt_logging) * &
currentCohort%n

endif

return
Expand Down
28 changes: 25 additions & 3 deletions biogeochem/EDPatchDynamicsMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,8 @@ subroutine disturbance_rates( site_in, bc_in)
real(r8) :: bmort
real(r8) :: hmort
real(r8) :: frmort
real(r8) :: smort
real(r8) :: asmort

real(r8) :: lmort_direct
real(r8) :: lmort_collateral
Expand All @@ -181,8 +183,8 @@ subroutine disturbance_rates( site_in, bc_in)
! Mortality for trees in the understorey.
currentCohort%patchptr => currentPatch

call mortality_rates(currentCohort,bc_in,cmort,hmort,bmort,frmort)
currentCohort%dmort = cmort+hmort+bmort+frmort
call mortality_rates(currentCohort,bc_in,cmort,hmort,bmort,frmort,smort,asmort)
currentCohort%dmort = cmort+hmort+bmort+frmort+smort+asmort
call carea_allom(currentCohort%dbh,currentCohort%n,site_in%spread,currentCohort%pft, &
currentCohort%c_area)

Expand All @@ -191,6 +193,8 @@ subroutine disturbance_rates( site_in, bc_in)
currentCohort%bmort = bmort
currentCohort%hmort = hmort
currentCohort%frmort = frmort
currentCohort%smort = smort
currentCohort%asmort = asmort

call LoggingMortality_frac(currentCohort%pft, currentCohort%dbh, currentCohort%canopy_layer, &
lmort_direct,lmort_collateral,lmort_infra,l_degrad )
Expand Down Expand Up @@ -287,6 +291,8 @@ subroutine disturbance_rates( site_in, bc_in)
currentCohort%bmort = currentCohort%bmort*(1.0_r8 - fates_mortality_disturbance_fraction)
currentCohort%dmort = currentCohort%dmort*(1.0_r8 - fates_mortality_disturbance_fraction)
currentCohort%frmort = currentCohort%frmort*(1.0_r8 - fates_mortality_disturbance_fraction)
currentCohort%smort = currentCohort%smort*(1.0_r8 - fates_mortality_disturbance_fraction)
currentCohort%asmort = currentCohort%asmort*(1.0_r8 - fates_mortality_disturbance_fraction)
end if
currentCohort => currentCohort%taller
enddo !currentCohort
Expand All @@ -307,6 +313,8 @@ subroutine disturbance_rates( site_in, bc_in)
currentCohort%bmort = currentCohort%bmort*(1.0_r8 - fates_mortality_disturbance_fraction)
currentCohort%dmort = currentCohort%dmort*(1.0_r8 - fates_mortality_disturbance_fraction)
currentCohort%frmort = currentCohort%frmort*(1.0_r8 - fates_mortality_disturbance_fraction)
currentCohort%smort = currentCohort%smort*(1.0_r8 - fates_mortality_disturbance_fraction)
currentCohort%asmort = currentCohort%asmort*(1.0_r8 - fates_mortality_disturbance_fraction)
currentCohort%lmort_direct = 0.0_r8
currentCohort%lmort_collateral = 0.0_r8
currentCohort%lmort_infra = 0.0_r8
Expand Down Expand Up @@ -621,6 +629,8 @@ subroutine spawn_patches( currentSite, bc_in)
nc%hmort = nan
nc%bmort = nan
nc%frmort = nan
nc%smort = nan
nc%asmort = nan
nc%lmort_direct = nan
nc%lmort_collateral = nan
nc%lmort_infra = nan
Expand Down Expand Up @@ -673,6 +683,8 @@ subroutine spawn_patches( currentSite, bc_in)
nc%hmort = currentCohort%hmort
nc%bmort = currentCohort%bmort
nc%frmort = currentCohort%frmort
nc%smort = currentCohort%smort
nc%asmort = currentCohort%asmort
nc%dmort = currentCohort%dmort
nc%lmort_direct = currentCohort%lmort_direct
nc%lmort_collateral = currentCohort%lmort_collateral
Expand All @@ -697,6 +709,8 @@ subroutine spawn_patches( currentSite, bc_in)
nc%hmort = currentCohort%hmort
nc%bmort = currentCohort%bmort
nc%frmort = currentCohort%frmort
nc%smort = currentCohort%smort
nc%asmort = currentCohort%asmort
nc%dmort = currentCohort%dmort
nc%lmort_direct = currentCohort%lmort_direct
nc%lmort_collateral = currentCohort%lmort_collateral
Expand Down Expand Up @@ -752,6 +766,8 @@ subroutine spawn_patches( currentSite, bc_in)
nc%hmort = currentCohort%hmort
nc%bmort = currentCohort%bmort
nc%frmort = currentCohort%frmort
nc%smort = currentCohort%smort
nc%asmort = currentCohort%asmort
nc%dmort = currentCohort%dmort
nc%lmort_direct = currentCohort%lmort_direct
nc%lmort_collateral = currentCohort%lmort_collateral
Expand Down Expand Up @@ -825,6 +841,8 @@ subroutine spawn_patches( currentSite, bc_in)
nc%hmort = currentCohort%hmort
nc%bmort = currentCohort%bmort
nc%frmort = currentCohort%frmort
nc%smort = currentCohort%smort
nc%asmort = currentCohort%asmort
nc%dmort = currentCohort%dmort

! since these are the ones that weren't logged,
Expand Down Expand Up @@ -884,6 +902,8 @@ subroutine spawn_patches( currentSite, bc_in)
nc%hmort = currentCohort%hmort
nc%bmort = currentCohort%bmort
nc%frmort = currentCohort%frmort
nc%smort = currentCohort%smort
nc%asmort = currentCohort%asmort
nc%dmort = currentCohort%dmort
nc%lmort_direct = currentCohort%lmort_direct
nc%lmort_collateral = currentCohort%lmort_collateral
Expand All @@ -904,6 +924,8 @@ subroutine spawn_patches( currentSite, bc_in)
nc%hmort = currentCohort%hmort
nc%bmort = currentCohort%bmort
nc%frmort = currentCohort%frmort
nc%smort = currentCohort%smort
nc%asmort = currentCohort%asmort
nc%dmort = currentCohort%dmort
nc%lmort_direct = currentCohort%lmort_direct
nc%lmort_collateral = currentCohort%lmort_collateral
Expand Down Expand Up @@ -1958,7 +1980,7 @@ subroutine zero_patch(cp_p)


! FIRE
currentPatch%litter_moisture(:) = 0.0_r8 ! litter moisture
currentPatch%litter_moisture(:) = 0.0_r8 ! litter moisture
currentPatch%fuel_eff_moist = 0.0_r8 ! average fuel moisture content of the ground fuel
! (incl. live grasses. omits 1000hr fuels)
currentPatch%livegrass = 0.0_r8 ! total ag grass biomass in patch. 1=c3 grass, 2=c4 grass. gc/m2
Expand Down
4 changes: 2 additions & 2 deletions biogeochem/EDPhysiologyMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1361,6 +1361,7 @@ subroutine recruitment( currentSite, currentPatch, bc_in )
temp_cohort%canopy_trim = 0.8_r8 !starting with the canopy not fully expanded
temp_cohort%pft = ft
temp_cohort%hite = EDPftvarcon_inst%hgt_min(ft)
temp_cohort%coage = 0.0_r8
call h2d_allom(temp_cohort%hite,ft,temp_cohort%dbh)

! Initialize live pools
Expand Down Expand Up @@ -1460,7 +1461,6 @@ subroutine recruitment( currentSite, currentPatch, bc_in )
! Initialize the PARTEH object, and determine the initial masses of all
! organs and elements.
! -----------------------------------------------------------------------------

prt => null()
call InitPRTObject(prt)

Expand Down Expand Up @@ -1560,7 +1560,7 @@ subroutine recruitment( currentSite, currentPatch, bc_in )

! This initializes the cohort
call create_cohort(currentSite,currentPatch, temp_cohort%pft, temp_cohort%n, &
temp_cohort%hite, temp_cohort%dbh, prt, &
temp_cohort%hite, temp_cohort%coage, temp_cohort%dbh, prt, &
temp_cohort%laimemory, cohortstatus, recruitstatus, &
temp_cohort%canopy_trim, currentPatch%NCL_p, currentSite%spread, bc_in)

Expand Down
Loading