Skip to content

Commit c7fa7c2

Browse files
authored
Merge pull request #454 from ckoven/secondary_forest
Track secondary forest area to keep primary and secondary patches distinct
2 parents 687f1ac + 01e8897 commit c7fa7c2

11 files changed

+848
-540
lines changed

biogeochem/EDCohortDynamicsMod.F90

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -515,9 +515,12 @@ subroutine nan_cohort(cc_p)
515515

516516
! ALLOCATION
517517
currentCohort%dmort = nan ! proportional mortality rate. (year-1)
518+
519+
! logging
518520
currentCohort%lmort_direct = nan
519521
currentCohort%lmort_infra = nan
520522
currentCohort%lmort_collateral = nan
523+
currentCohort%l_degrad = nan
521524

522525

523526
currentCohort%seed_prod = nan ! reproduction seed and clonal: KgC/indiv/year
@@ -589,6 +592,7 @@ subroutine zero_cohort(cc_p)
589592
currentCohort%lmort_direct = 0._r8
590593
currentCohort%lmort_infra = 0._r8
591594
currentCohort%lmort_collateral = 0._r8
595+
currentCohort%l_degrad = 0._r8
592596
currentCohort%leaf_cost = 0._r8
593597
currentcohort%excl_weight = 0._r8
594598
currentcohort%prom_weight = 0._r8
@@ -1152,12 +1156,6 @@ subroutine fuse_cohorts(currentSite, currentPatch, bc_in)
11521156

11531157
currentCohort%dmort = (currentCohort%n*currentCohort%dmort + &
11541158
nextc%n*nextc%dmort)/newn
1155-
currentCohort%lmort_direct = (currentCohort%n*currentCohort%lmort_direct + &
1156-
nextc%n*nextc%lmort_direct)/newn
1157-
currentCohort%lmort_infra = (currentCohort%n*currentCohort%lmort_infra + &
1158-
nextc%n*nextc%lmort_infra)/newn
1159-
currentCohort%lmort_collateral = (currentCohort%n*currentCohort%lmort_collateral + &
1160-
nextc%n*nextc%lmort_collateral)/newn
11611159

11621160
currentCohort%fire_mort = (currentCohort%n*currentCohort%fire_mort + &
11631161
nextc%n*nextc%fire_mort)/newn
@@ -1175,7 +1173,9 @@ subroutine fuse_cohorts(currentSite, currentPatch, bc_in)
11751173
nextc%n*nextc%lmort_collateral)/newn
11761174
currentCohort%lmort_infra = (currentCohort%n*currentCohort%lmort_infra + &
11771175
nextc%n*nextc%lmort_infra)/newn
1178-
1176+
currentCohort%l_degrad = (currentCohort%n*currentCohort%l_degrad + &
1177+
nextc%n*nextc%l_degrad)/newn
1178+
11791179
! biomass and dbh tendencies
11801180
currentCohort%ddbhdt = (currentCohort%n*currentCohort%ddbhdt + &
11811181
nextc%n*nextc%ddbhdt)/newn
@@ -1550,9 +1550,6 @@ subroutine copy_cohort( currentCohort,copyc )
15501550

15511551
! ALLOCATION
15521552
n%dmort = o%dmort
1553-
n%lmort_direct = o%lmort_direct
1554-
n%lmort_infra = o%lmort_infra
1555-
n%lmort_collateral= o%lmort_collateral
15561553
n%seed_prod = o%seed_prod
15571554
n%treelai = o%treelai
15581555
n%treesai = o%treesai
@@ -1565,9 +1562,10 @@ subroutine copy_cohort( currentCohort,copyc )
15651562
n%frmort = o%frmort
15661563

15671564
! logging mortalities, Yi Xu
1568-
n%lmort_direct=o%lmort_direct
1565+
n%lmort_direct =o%lmort_direct
15691566
n%lmort_collateral =o%lmort_collateral
1570-
n%lmort_infra =o%lmort_infra
1567+
n%lmort_infra =o%lmort_infra
1568+
n%l_degrad =o%l_degrad
15711569

15721570
! Flags
15731571
n%isnew = o%isnew

biogeochem/EDLoggingMortalityMod.F90

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ subroutine IsItLoggingTime(is_master,currentSite)
112112

113113
else if(icode < 0 .and. icode > -366) then
114114
! Logging event every year on specific day of year
115-
if(hlm_day_of_year .eq. icode ) then
115+
if(hlm_day_of_year .eq. abs(icode) ) then
116116
logging_time = .true.
117117
end if
118118

@@ -151,14 +151,20 @@ end subroutine IsItLoggingTime
151151

152152
! ======================================================================================
153153

154-
subroutine LoggingMortality_frac( pft_i, dbh, lmort_direct,lmort_collateral,lmort_infra )
154+
subroutine LoggingMortality_frac( pft_i, dbh, canopy_layer, lmort_direct, &
155+
lmort_collateral, lmort_infra, l_degrad )
155156

156157
! Arguments
157158
integer, intent(in) :: pft_i ! pft index
158159
real(r8), intent(in) :: dbh ! diameter at breast height (cm)
160+
integer, intent(in) :: canopy_layer ! canopy layer of this cohort
159161
real(r8), intent(out) :: lmort_direct ! direct (harvestable) mortality fraction
160162
real(r8), intent(out) :: lmort_collateral ! collateral damage mortality fraction
161163
real(r8), intent(out) :: lmort_infra ! infrastructure mortality fraction
164+
real(r8), intent(out) :: l_degrad ! fraction of trees that are not killed
165+
! but suffer from forest degradation (i.e. they
166+
! are moved to newly-anthro-disturbed secondary
167+
! forest patch)
162168

163169
! Parameters
164170
real(r8), parameter :: adjustment = 1.0 ! adjustment for mortality rates
@@ -170,31 +176,37 @@ subroutine LoggingMortality_frac( pft_i, dbh, lmort_direct,lmort_collateral,lmor
170176

171177
if (dbh >= logging_dbhmin ) then
172178
lmort_direct = logging_direct_frac * adjustment
173-
lmort_collateral = logging_collateral_frac * adjustment
179+
l_degrad = 0._r8
174180
else
175181
lmort_direct = 0.0_r8
176-
lmort_collateral = 0.0_r8
182+
l_degrad = logging_direct_frac * adjustment
177183
end if
178184

179185
if (dbh >= logging_dbhmax_infra) then
180186
lmort_infra = 0.0_r8
187+
l_degrad = l_degrad + logging_mechanical_frac * adjustment
181188
else
182189
lmort_infra = logging_mechanical_frac * adjustment
183190
end if
184191
!damage rates for size class < & > threshold_size need to be specified seperately
185192

186-
! Collateral damage to smaller plants below the direct logging size threshold
193+
! Collateral damage to smaller plants below the canopy layer
187194
! will be applied via "understory_death" via the disturbance algorithm
195+
if (canopy_layer .eq. 1) then
196+
lmort_collateral = logging_collateral_frac * adjustment
197+
endif
188198

189199
else
190200
lmort_direct = 0.0_r8
191201
lmort_collateral = 0.0_r8
192202
lmort_infra = 0.0_r8
203+
l_degrad = 0.0_r8
193204
end if
194205
else
195206
lmort_direct = 0.0_r8
196207
lmort_collateral = 0.0_r8
197208
lmort_infra = 0.0_r8
209+
l_degrad = 0.0_r8
198210
end if
199211

200212
end subroutine LoggingMortality_frac

biogeochem/EDMortalityFunctionsMod.F90

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,11 @@ subroutine Mortality_Derivative( currentSite, currentCohort, bc_in)
194194
! Mortality for trees in the understorey.
195195
!if trees are in the canopy, then their death is 'disturbance'. This probably needs a different terminology
196196
call mortality_rates(currentCohort,bc_in,cmort,hmort,bmort,frmort)
197-
call LoggingMortality_frac(ipft, currentCohort%dbh, &
197+
call LoggingMortality_frac(ipft, currentCohort%dbh, currentCohort%canopy_layer, &
198198
currentCohort%lmort_direct, &
199199
currentCohort%lmort_collateral, &
200-
currentCohort%lmort_infra )
200+
currentCohort%lmort_infra, &
201+
currentCohort%l_degrad)
201202

202203
if (currentCohort%canopy_layer > 1)then
203204

0 commit comments

Comments
 (0)