Skip to content

Commit a29f894

Browse files
authored
Merge pull request #354 from ckoven/decouple_trim_from_broot
Optional decoupling of fine root biomass from canopy trim logic
2 parents adb7af2 + e77104a commit a29f894

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

biogeochem/EDPhysiologyMod.F90

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,12 @@ subroutine trim_canopy( currentSite )
193193
endif
194194

195195
call bleaf(currentcohort%dbh,ipft,currentcohort%canopy_trim,tar_bl)
196-
call bfineroot(currentcohort%dbh,ipft,currentcohort%canopy_trim,tar_bfr)
197196

198-
bfr_per_bleaf = tar_bfr/tar_bl
197+
if ( int(EDPftvarcon_inst%allom_fmode(ipft)) .eq. 1 ) then
198+
! only query fine root biomass if using a fine root allometric model that takes leaf trim into account
199+
call bfineroot(currentcohort%dbh,ipft,currentcohort%canopy_trim,tar_bfr)
200+
bfr_per_bleaf = tar_bfr/tar_bl
201+
endif
199202

200203
!Leaf cost vs netuptake for each leaf layer.
201204
do z = 1,nlevleaf
@@ -207,18 +210,27 @@ subroutine trim_canopy( currentSite )
207210

208211

209212
currentCohort%leaf_cost = 1._r8/(EDPftvarcon_inst%slatop(ipft)*1000.0_r8)
210-
currentCohort%leaf_cost = currentCohort%leaf_cost + &
211-
1.0_r8/(EDPftvarcon_inst%slatop(ipft)*1000.0_r8) * &
212-
bfr_per_bleaf / EDPftvarcon_inst%root_long(ipft)
213+
214+
if ( int(EDPftvarcon_inst%allom_fmode(ipft)) .eq. 1 ) then
215+
! if using trimmed leaf for fine root biomass allometry, add the cost of the root increment
216+
! to the leaf increment; otherwise do not.
217+
currentCohort%leaf_cost = currentCohort%leaf_cost + &
218+
1.0_r8/(EDPftvarcon_inst%slatop(ipft)*1000.0_r8) * &
219+
bfr_per_bleaf / EDPftvarcon_inst%root_long(ipft)
220+
endif
213221

214222
currentCohort%leaf_cost = currentCohort%leaf_cost * &
215223
(EDPftvarcon_inst%grperc(ipft) + 1._r8)
216224
else !evergreen costs
217225
currentCohort%leaf_cost = 1.0_r8/(EDPftvarcon_inst%slatop(ipft)* &
218226
EDPftvarcon_inst%leaf_long(ipft)*1000.0_r8) !convert from sla in m2g-1 to m2kg-1
219-
currentCohort%leaf_cost = currentCohort%leaf_cost + &
220-
1.0_r8/(EDPftvarcon_inst%slatop(ipft)*1000.0_r8) * &
221-
bfr_per_bleaf / EDPftvarcon_inst%root_long(ipft)
227+
if ( int(EDPftvarcon_inst%allom_fmode(ipft)) .eq. 1 ) then
228+
! if using trimmed leaf for fine root biomass allometry, add the cost of the root increment
229+
! to the leaf increment; otherwise do not.
230+
currentCohort%leaf_cost = currentCohort%leaf_cost + &
231+
1.0_r8/(EDPftvarcon_inst%slatop(ipft)*1000.0_r8) * &
232+
bfr_per_bleaf / EDPftvarcon_inst%root_long(ipft)
233+
endif
222234
currentCohort%leaf_cost = currentCohort%leaf_cost * &
223235
(EDPftvarcon_inst%grperc(ipft) + 1._r8)
224236
endif

biogeochem/FatesAllometryMod.F90

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,9 @@ module FatesAllometryMod
107107
public :: StructureResetOfDH ! Method to set DBH to sync with structure biomass
108108
public :: CheckIntegratedAllometries
109109

110-
111110
logical , parameter :: verbose_logging = .false.
112111
character(len=*), parameter :: sourcefile = __FILE__
113112

114-
115113
! If testing b4b with older versions, do not remove sapwood
116114
! Our old methods with saldarriaga did not remove sapwood from the
117115
! bdead pool. But newer allometries are providing total agb
@@ -621,14 +619,23 @@ subroutine bfineroot(d,ipft,canopy_trim,bfr,dbfrdd)
621619
real(r8) :: slascaler
622620

623621
select case(int(EDPftvarcon_inst%allom_fmode(ipft)))
624-
case(1) ! "constant proportionality with bleaf"
622+
case(1) ! "constant proportionality with TRIMMED target bleaf"
625623

626624
call blmax_allom(d,ipft,blmax,dblmaxdd)
627625
call bfrmax_const(d,blmax,dblmaxdd,ipft,bfrmax,dbfrmaxdd)
628626
bfr = bfrmax * canopy_trim
629627
if(present(dbfrdd))then
630628
dbfrdd = dbfrmaxdd * canopy_trim
631629
end if
630+
case(2) ! "constant proportionality with UNTRIMMED target bleaf"
631+
632+
call blmax_allom(d,ipft,blmax,dblmaxdd)
633+
call bfrmax_const(d,blmax,dblmaxdd,ipft,bfrmax,dbfrmaxdd)
634+
bfr = bfrmax
635+
if(present(dbfrdd))then
636+
dbfrdd = dbfrmaxdd
637+
end if
638+
632639
case DEFAULT
633640
write(fates_log(),*) 'An undefined fine root allometry was specified: ', &
634641
EDPftvarcon_inst%allom_fmode(ipft)

0 commit comments

Comments
 (0)