Skip to content

Commit 1689466

Browse files
authored
Merge pull request #1302 from adrifoster/fuel_frac_fix
Don't zero out `patch%fuel%frac_burnt()` before we use it
2 parents d50c906 + f11b673 commit 1689466

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

biogeochem/EDPatchDynamicsMod.F90

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -767,13 +767,9 @@ subroutine spawn_patches( currentSite, bc_in)
767767
! and burned litter to atmosphere. Thus it is important to zero fuel%frac_burnt when
768768
! fire is not the current disturbance regime.
769769

770-
if(i_disturbance_type .ne. dtype_ifire) then
771-
currentPatch%fuel%frac_burnt(:) = 0._r8
772-
end if
773-
774770
call CopyPatchMeansTimers(currentPatch, newPatch)
775771

776-
call TransLitterNewPatch( currentSite, currentPatch, newPatch, patch_site_areadis)
772+
call TransLitterNewPatch( currentSite, currentPatch, newPatch, patch_site_areadis, i_disturbance_type)
777773

778774
! Transfer in litter fluxes from plants in various contexts of death and destruction
779775
select case(i_disturbance_type)
@@ -1045,7 +1041,6 @@ subroutine spawn_patches( currentSite, bc_in)
10451041
! Some of of the leaf mass from living plants has been
10461042
! burned off. Here, we remove that mass, and
10471043
! tally it in the flux we sent to the atmosphere
1048-
10491044
if(prt_params%woody(currentCohort%pft) == itrue)then
10501045
leaf_burn_frac = currentCohort%fraction_crown_burned
10511046
else
@@ -1724,9 +1719,7 @@ subroutine split_patch(currentSite, currentPatch, new_patch, fraction_to_keep, a
17241719

17251720
call CopyPatchMeansTimers(currentPatch, new_patch)
17261721

1727-
call TransLitterNewPatch( currentSite, currentPatch, new_patch, temp_area)
1728-
1729-
currentPatch%fuel%frac_burnt(:) = 0._r8
1722+
call TransLitterNewPatch( currentSite, currentPatch, new_patch, temp_area, 0)
17301723

17311724
! Next, we loop through the cohorts in the donor patch, copy them with
17321725
! area modified number density into the new-patch, and apply survivorship.
@@ -1922,7 +1915,8 @@ end subroutine set_patchno
19221915
subroutine TransLitterNewPatch(currentSite, &
19231916
currentPatch, &
19241917
newPatch, &
1925-
patch_site_areadis)
1918+
patch_site_areadis, &
1919+
dist_type)
19261920

19271921
! -----------------------------------------------------------------------------------
19281922
!
@@ -1971,6 +1965,7 @@ subroutine TransLitterNewPatch(currentSite, &
19711965
type(fates_patch_type) , intent(inout) :: newPatch ! New patch
19721966
real(r8) , intent(in) :: patch_site_areadis ! Area being donated
19731967
! by current patch
1968+
integer, intent(in) :: dist_type ! disturbance type
19741969

19751970

19761971
! locals
@@ -1993,6 +1988,7 @@ subroutine TransLitterNewPatch(currentSite, &
19931988
real(r8) :: litter_stock0,litter_stock1
19941989
real(r8) :: burn_flux0,burn_flux1
19951990
real(r8) :: error
1991+
real(r8) :: frac_burnt ! fraction burnt of current fuel type [0-1]
19961992

19971993
do el = 1,num_elements
19981994

@@ -2076,15 +2072,19 @@ subroutine TransLitterNewPatch(currentSite, &
20762072
litter_stock0 = curr_litt%GetTotalLitterMass()*currentPatch%area + &
20772073
new_litt%GetTotalLitterMass()*newPatch%area
20782074
end if
2079-
2075+
20802076
do c = 1,ncwd
2077+
frac_burnt = 0.0_r8
2078+
if (dist_type == dtype_ifire .and. currentPatch%fire == 1) then
2079+
frac_burnt = currentPatch%fuel%frac_burnt(c)
2080+
end if
20812081

20822082
! Transfer above ground CWD
20832083
donatable_mass = curr_litt%ag_cwd(c) * patch_site_areadis * &
2084-
(1._r8 - currentPatch%fuel%frac_burnt(c))
2084+
(1._r8 - frac_burnt)
20852085

20862086
burned_mass = curr_litt%ag_cwd(c) * patch_site_areadis * &
2087-
currentPatch%fuel%frac_burnt(c)
2087+
frac_burnt
20882088

20892089
new_litt%ag_cwd(c) = new_litt%ag_cwd(c) + donatable_mass*donate_m2
20902090
curr_litt%ag_cwd(c) = curr_litt%ag_cwd(c) + donatable_mass*retain_m2
@@ -2100,15 +2100,20 @@ subroutine TransLitterNewPatch(currentSite, &
21002100
end do
21012101

21022102
enddo
2103-
2103+
2104+
frac_burnt = 0.0_r8
2105+
if (dist_type == dtype_ifire .and. currentPatch%fire == 1) then
2106+
frac_burnt = currentPatch%fuel%frac_burnt(fuel_classes%dead_leaves())
2107+
end if
2108+
21042109
do dcmpy=1,ndcmpy
21052110

21062111
! Transfer leaf fines
21072112
donatable_mass = curr_litt%leaf_fines(dcmpy) * patch_site_areadis * &
2108-
(1._r8 - currentPatch%fuel%frac_burnt(fuel_classes%dead_leaves()))
2113+
(1._r8 - frac_burnt)
21092114

21102115
burned_mass = curr_litt%leaf_fines(dcmpy) * patch_site_areadis * &
2111-
currentPatch%fuel%frac_burnt(fuel_classes%dead_leaves())
2116+
frac_burnt
21122117

21132118
new_litt%leaf_fines(dcmpy) = new_litt%leaf_fines(dcmpy) + donatable_mass*donate_m2
21142119
curr_litt%leaf_fines(dcmpy) = curr_litt%leaf_fines(dcmpy) + donatable_mass*retain_m2

fire/SFMainMod.F90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ subroutine DailyFireModel(currentSite, bc_in)
7171
do while(associated(currentPatch))
7272
currentPatch%frac_burnt = 0.0_r8
7373
currentPatch%fire = 0
74+
currentPatch%fuel%frac_burnt(:) = 0.0_r8
7475
currentPatch => currentPatch%older
7576
end do
7677

0 commit comments

Comments
 (0)