Skip to content

Commit

Permalink
Add new allometric modes for multiple quantities, plus a few minor im…
Browse files Browse the repository at this point in the history
…provements.

1. New allometric function for above-ground biomass (allom_amode = 4), which is
   similar to Chave et al. (2014), except that the exponent for wood density is
   independent of the one for "tree size" (i.e., DBH*DBH*Height).
2. New allometric function for leaf biomass and crown area (allom_lmode = 4),
   which uses tree size as the predictor. In the case of leaf biomass, the
   function also is a function of top-canopy SLA, using a similar formulation
   as the one for above-ground biomass.
3. Crown depth has now allometric modes too (variable allom_dmode). If
   allom_dmode=1, crown depth is a constant fraction of height; when
   allom_dmode=2, crown depth is defined as p1 * Height^p2. Former parameter
   crown_depth_frac was replaced with parameter allom_h2cd1 (p1), a new
   parameter allom_h2cd2 was added for the exponent.
4. All allometric mode variables were converted to integers when they are loaded.
   This avoids converting them to integers every time the allometric function is
   called.
5. Small edit to CheckParams. The current implementation of allom_hmode=2 is a
   bit unusual because the minus sign of the Weibull function is incorporated
   in parameter p2 (meaning that p2 must be negative). Also, instead of aborting
   the run as soon as an inconsistency in parameters is spotted, the subroutine
   now continues to check other parameters, and report all the errors before
   stopping the run. This avoids users submitting FATES multiple times to get
   one inconsistency at a time.
  • Loading branch information
mpaiao committed Dec 6, 2023
1 parent 1874511 commit 416f70f
Show file tree
Hide file tree
Showing 5 changed files with 925 additions and 139 deletions.
15 changes: 11 additions & 4 deletions biogeochem/EDCanopyStructureMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ module EDCanopyStructureMod
use EDCohortDynamicsMod , only : InitPRTObject
use FatesAllometryMod , only : tree_lai
use FatesAllometryMod , only : tree_sai
use FatesAllometryMod , only : CrownDepth
use EDtypesMod , only : ed_site_type
use FatesPatchMod, only : fates_patch_type
use FatesCohortMod, only : fates_cohort_type
Expand Down Expand Up @@ -1527,6 +1528,7 @@ subroutine leaf_area_profile( currentSite )
real(r8) :: max_cheight ! top of cohort canopy (m)
real(r8) :: lai ! leaf area per canopy area
real(r8) :: sai ! stem area per canopy area
real(r8) :: crown_depth ! Current cohort's crown depth

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

Expand Down Expand Up @@ -1603,6 +1605,13 @@ subroutine leaf_area_profile( currentSite )
end if


!---~---
! Find current crown depth using the allometric function.
!---~---
call CrownDepth(currentCohort%height,currentCohort%pft,crown_depth)
!---~---


! --------------------------------------------------------------------------
! Whole layers. Make a weighted average of the leaf area in each layer
! before dividing it by the total area. Fill up layer for whole layers.
Expand All @@ -1616,12 +1625,10 @@ subroutine leaf_area_profile( currentSite )
! is obscured by snow.

layer_top_height = currentCohort%height - &
( real(iv-1,r8)/currentCohort%NV * currentCohort%height * &
prt_params%crown_depth_frac(currentCohort%pft) )
( real(iv-1,r8)/currentCohort%NV * crown_depth )

layer_bottom_height = currentCohort%height - &
( real(iv,r8)/currentCohort%NV * currentCohort%height * &
prt_params%crown_depth_frac(currentCohort%pft) )
( real(iv,r8)/currentCohort%NV * crown_depth )

fraction_exposed = 1.0_r8
if(currentSite%snow_depth > layer_top_height)then
Expand Down
Loading

0 comments on commit 416f70f

Please sign in to comment.