From b79f2d0615c17852925aa607818dd19ee94a67bc Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Fri, 12 Jul 2024 07:31:45 -0600 Subject: [PATCH] Bug fix in new NGEE Arctic IM3 vegetation parameters 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. --- components/elm/src/biogeochem/VegStructUpdateMod.F90 | 10 +++++----- components/elm/src/main/pftvarcon.F90 | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/components/elm/src/biogeochem/VegStructUpdateMod.F90 b/components/elm/src/biogeochem/VegStructUpdateMod.F90 index f108fa76cc9b..279ecb306b81 100644 --- a/components/elm/src/biogeochem/VegStructUpdateMod.F90 +++ b/components/elm/src/biogeochem/VegStructUpdateMod.F90 @@ -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 @@ -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 diff --git a/components/elm/src/main/pftvarcon.F90 b/components/elm/src/main/pftvarcon.F90 index 0386c974f9a2..66bd67685346 100644 --- a/components/elm/src/main/pftvarcon.F90 +++ b/components/elm/src/main/pftvarcon.F90 @@ -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