Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
116 changes: 80 additions & 36 deletions ED/src/dynamics/disturbance.f90

Large diffs are not rendered by default.

512 changes: 288 additions & 224 deletions ED/src/dynamics/forestry.f90

Large diffs are not rendered by default.

30 changes: 23 additions & 7 deletions ED/src/dynamics/mortality.f90
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ end subroutine mortality_rates
! disturbance. !
!---------------------------------------------------------------------------------------!
subroutine disturbance_mortality(csite,ipa,disturbance_rate,new_lu,dist_path &
,mindbh_harvest)
,mindbh_harvest,harvprob_g,harvprob_l)
use ed_state_vars, only : sitetype & ! structure
, patchtype ! ! structure
use ed_max_dims , only : n_pft ! ! intent(in)
Expand All @@ -121,6 +121,8 @@ subroutine disturbance_mortality(csite,ipa,disturbance_rate,new_lu,dist_path
integer , intent(in) :: new_lu
integer , intent(in) :: dist_path
real , dimension(n_pft), intent(in) :: mindbh_harvest
real , dimension(n_pft), intent(in) :: harvprob_g
real , dimension(n_pft), intent(in) :: harvprob_l
!----- Local variables. -------------------------------------------------------------!
type(patchtype) , pointer :: cpatch
integer :: ico
Expand All @@ -129,7 +131,7 @@ subroutine disturbance_mortality(csite,ipa,disturbance_rate,new_lu,dist_path

cpatch => csite%patch(ipa)
do ico=1,cpatch%ncohorts
f_survival = survivorship(new_lu,dist_path,mindbh_harvest,cpatch,ico)
f_survival = survivorship(new_lu,dist_path,mindbh_harvest,harvprob_g,harvprob_l,cpatch,ico)
cpatch%mort_rate(5,ico) = cpatch%mort_rate(5,ico) &
- log( f_survival &
+ (1.0 - f_survival) * exp(- disturbance_rate) )
Expand Down Expand Up @@ -159,13 +161,15 @@ end subroutine disturbance_mortality
! -- mindbh_harvest: minimum DBH for harvesting (selective logging and forest !
! plantantions). If the tree DBH is greater than mindbh_harvest, the tree may !
! be harvested, otherwise it may be damaged by logging but not harvested. !
! -- harvprob: the probability of harvest for a trees meeting mindbh (ianth=2) !
! -- cpatch: current patch. !
! -- ico: index for current cohort. !
!---------------------------------------------------------------------------------------!
real function survivorship(new_lu,dist_path,mindbh_harvest,cpatch,ico)
real function survivorship(new_lu,dist_path,mindbh_harvest,harvprob_g,harvprob_l,cpatch,ico)
use ed_state_vars, only : patchtype ! ! structure
use disturb_coms , only : treefall_hite_threshold & ! intent(in)
, fire_hite_threshold ! ! intent(in)
, fire_hite_threshold & ! intent(in)
, ianth_disturb ! ! intent(in)
use pft_coms , only : treefall_s_ltht & ! intent(in)
, treefall_s_gtht & ! intent(in)
, fire_s_ltht & ! intent(in)
Expand All @@ -176,6 +180,8 @@ real function survivorship(new_lu,dist_path,mindbh_harvest,cpatch,ico)
!----- Arguments. -------------------------------------------------------------------!
type(patchtype) , target :: cpatch
real , dimension(n_pft), intent(in) :: mindbh_harvest
real , dimension(n_pft), intent(in) :: harvprob_g
real , dimension(n_pft), intent(in) :: harvprob_l
integer , intent(in) :: ico
integer , intent(in) :: new_lu
integer , intent(in) :: dist_path
Expand Down Expand Up @@ -273,16 +279,26 @@ real function survivorship(new_lu,dist_path,mindbh_harvest,cpatch,ico)

case (6)
!---------------------------------------------------------------------------------!
! Logging. At this point a single pathway exists: cohorts above threshold !
! Logging. !
! NEW: Survivorship = inverse fraction of amount removed above and below the hite !
! threshold. This allows for understory thinning as a management strategy !
! !
!---------------------------------------------------------------------------------!
! OLD: At this point a single pathway exists: cohorts above threshold !
! are completely removed, and small cohorts have the same survivorship as small !
! cohorts at a treefall site. Both could be re-visited in the future, and !
! different pathways for conventional and reduced-impact logging could be !
! applied. !
!---------------------------------------------------------------------------------!
if (cpatch%dbh(ico) >= mindbh_harvest(ipft)) then
survivorship = 0.0
!if (ianth_disturb == 2) then
survivorship = 1 - harvprob_g(ipft)
! else
! survivorship = 0.0
! end if
Comment on lines +294 to +298
Copy link
Contributor

@mpaiao mpaiao Feb 27, 2020

Choose a reason for hiding this comment

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

@crollinson I am going through the code merging but this part is a bit confusing to me, and I think this approach here may be saving too many trees. In my original implementation, harvprob is used to define the disturbance rate. In general, survivorship should reflect the survivorship in the immediate vicinity of disturbed area (in this case, where the tree was logged), which is why survivorship was set to zero. For the time being I kept your approach for the area-based option (ianth_disturb=2), but I am not sure how to reconcile this part with the original survivorship definition, especially with understory thinning.

Copy link
Contributor

Choose a reason for hiding this comment

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

The only idea I had so far is to create a new dist_type for thinned canopy. The upside is that it would be consistent with the ED idea that disturbances change the microenvironment (in the case of thinning, more in the water part than in the light). The one potential downside is that we would have more dist_types (tree felling, skid trails and roads, and artificially thinned canopy).

I don't see a problem to add a new dist_type if it is justified, but before I go ahead, I'd like to throw the idea and see what people think, or if anyone has other ideas.

else
survivorship = treefall_s_ltht(ipft)
survivorship = 1 - harvprob_l(ipft)
! survivorship = treefall_s_ltht(ipft) ! OLD version
end if
!---------------------------------------------------------------------------------!
end select
Expand Down
4 changes: 2 additions & 2 deletions ED/src/init/ed_params.f90
Original file line number Diff line number Diff line change
Expand Up @@ -148,12 +148,12 @@ subroutine load_ed_ecosystem_params()
! Warn the user in case the PFT choice for agriculture or forest plantation was !
! inconsistent. !
!---------------------------------------------------------------------------------------!
if (count(include_pft_ag) == 0 .and. ianth_disturb == 1) then
if (count(include_pft_ag) == 0 .and. ianth_disturb >= 1) then
call warning ('PFT defined in agri_stock is not included in include_these_pft,'// &
' your croplands will be barren and not very profitable...' &
,'load_ecosystem_params','ed_params.f90')
end if
if (count(include_pft_fp) == 0 .and. ianth_disturb == 1) then
if (count(include_pft_fp) == 0 .and. ianth_disturb >= 1) then
call warning ('PFT defined in plantation_stock is not listed in include_these_pft,'//&
' your forest plantation will be barren and not very profitable ...' &
,'load_ecosystem_params','ed_params.f90')
Expand Down
Loading