Skip to content

Commit

Permalink
Bug fix in new NGEE Arctic IM3 vegetation parameters
Browse files Browse the repository at this point in the history
New vegetation parameters in VegStructUpdateMod,
bendresist, vegshape, taper, and stocking (the last two
previously moved to pftvarcon) had been applied to each
column when they are pft specific variables. This commit
changes this such that one value of each parameter is expected
per PFT.

There are use cases where it may be desirable to vary these
at the column level (e.g., if there are not sufficient pfts
to capture things like sagebrush, with an expected bendresist = 1
vs Arctic shrubs, with an expected bendresist of ~0.5), but
this could also be solved by adding pfts.
  • Loading branch information
rfiorella committed Jul 12, 2024
1 parent 927462a commit b79f2d0
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 5 deletions.
10 changes: 5 additions & 5 deletions components/elm/src/biogeochem/VegStructUpdateMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -161,11 +161,11 @@ subroutine VegStructUpdate(num_soilp, filter_soilp, &
! taper and stocking density can be set as input variables now to
! change from default values set in pftvarcon.F90
if (spinup_state >= 1) then
htop(p) = ((3._r8 * deadstemc(p) * spinup_mortality_factor * taper(p) * taper(p))/ &
(SHR_CONST_PI * stocking(p) * dwood(ivt(p))))**(1._r8/3._r8)
htop(p) = ((3._r8 * deadstemc(p) * spinup_mortality_factor * taper(ivt(p)) * taper(ivt(p)))/ &
(SHR_CONST_PI * stocking(ivt(p)) * dwood(ivt(p))))**(1._r8/3._r8)
else
htop(p) = ((3._r8 * deadstemc(p) * taper(p) * taper(p))/ &
(SHR_CONST_PI * stocking(p) * dwood(ivt(p))))**(1._r8/3._r8)
htop(p) = ((3._r8 * deadstemc(p) * taper(ivt(p)) * taper(ivt(p)))/ &
(SHR_CONST_PI * stocking(ivt(p)) * dwood(ivt(p))))**(1._r8/3._r8)
end if

! Peter Thornton, 5/3/2004
Expand Down Expand Up @@ -237,7 +237,7 @@ subroutine VegStructUpdate(num_soilp, filter_soilp, &
! Liston and Hiemstra, 2011; Belke-Brea et al. 2020
if (ivt(p) > noveg .and. ivt(p) <= nbrdlf_dcd_brl_shrub ) then
ol = min( max(snow_depth(c)-hbot(p), 0._r8), htop(p)-hbot(p))
fb = 1._r8 - (ol / max(1.e-06_r8, bendresist(p) * (htop(p)-hbot(p)))) ** vegshape(p)
fb = 1._r8 - (ol / max(1.e-06_r8, bendresist(ivt(p)) * (htop(p)-hbot(p)))) ** vegshape(ivt(p))
else
fb = 1._r8 - max(min(snow_depth(c),0.2_r8),0._r8)/0.2_r8 ! 0.2m is assumed
!depth of snow required for complete burial of grasses
Expand Down
4 changes: 4 additions & 0 deletions components/elm/src/main/pftvarcon.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1047,6 +1047,10 @@ subroutine pftconrd
end do
call ncd_io('stocking', stocking, 'read', ncid, readvar=readv, posNOTonfile=.true.)
if (.not. readv ) stocking(:) = 1000._r8
! convert from stems/ha -> stems/m2
do i = 0, npft -1
stocking(i) = stocking(i) / 10000._r8
end do
call ncd_io('taper', taper, 'read', ncid, readvar=readv, posNOTonfile=.true.)
if (.not. readv ) then
taper(:) = 200._r8
Expand Down

0 comments on commit b79f2d0

Please sign in to comment.