From 3cef6b80c8b3edc6f4508825c3c163fd513b0dee Mon Sep 17 00:00:00 2001 From: Chonggang Xu Date: Thu, 7 May 2026 15:22:25 -0600 Subject: [PATCH 1/5] update the petiole length parameter to match the scaling from updated to match the scaling for conduit width from Olson 2020 --- biogeophys/FatesPlantHydraulicsMod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/biogeophys/FatesPlantHydraulicsMod.F90 b/biogeophys/FatesPlantHydraulicsMod.F90 index 1672ec5ff8..e32f43f6c0 100644 --- a/biogeophys/FatesPlantHydraulicsMod.F90 +++ b/biogeophys/FatesPlantHydraulicsMod.F90 @@ -4620,7 +4620,7 @@ function xylemtaper(pexp, dz) result(chi_tapnotap) ! ! !LOCAL VARIABLES: real(r8) :: qexp ! total conductance exponent (as in Fig. 2b of Savage et al. (2010) minus a0 term - real(r8) :: lN=0.005_r8 ! petiole length[m] + real(r8) :: lN=0.15_r8 ! petiole length[m], updated to match the scaling for conduit width from Olson 2020 (https://nph.onlinelibrary.wiley.com/doi/10.1111/nph.16961) real(r8) :: n_ext=2._r8 ! number of daughter branches per parent branch, assumed constant throughout tree (self-similarity) [-] real(r8) :: big_n ! number of branching levels (allowed here to take on non-integer values): increases with tree size [-] real(r8) :: r0rN ! ratio of stem radius to terminal twig radius; r.ext0/r.extN (x-axis of Savage et al. (2010) Fig 2a)[-] From edfafc6f50a963e026acf503f720ce5044339dbc Mon Sep 17 00:00:00 2001 From: Chonggang Xu Date: Fri, 8 May 2026 13:40:59 -0600 Subject: [PATCH 2/5] add the new xylem taper function based on Olson 2020 --- biogeophys/FatesPlantHydraulicsMod.F90 | 46 ++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/biogeophys/FatesPlantHydraulicsMod.F90 b/biogeophys/FatesPlantHydraulicsMod.F90 index e32f43f6c0..52d5fb2353 100644 --- a/biogeophys/FatesPlantHydraulicsMod.F90 +++ b/biogeophys/FatesPlantHydraulicsMod.F90 @@ -4596,7 +4596,7 @@ end subroutine shellGeom ! ===================================================================================== -function xylemtaper(pexp, dz) result(chi_tapnotap) +function xylemtaper_Savage(pexp, dz) result(chi_tapnotap) use FatesConstantsMod, only : pi => pi_const @@ -4654,8 +4654,50 @@ function xylemtaper(pexp, dz) result(chi_tapnotap) return -end function xylemtaper +end function xylemtaper_Savage +# ===================================================================================== +# xylem hydraulic conductance following scaling for conduit width from Olson 2020 (https://nph.onlinelibrary.wiley.com/doi/10.1111/nph.16961) +function xylemtaper(a, L) result(ratio) + + implicit none + + real(r8), intent(in) :: a ! taper exponent + real(r8), intent(in) :: L ! distance from branch tip (m) + real(r8) :: ratio + + real(r8), parameter :: x0 = 0.005_r8 ! finite cutoff (m) at petiole, to prevent singularity in function at L=0. + real(r8), parameter :: eps = 1.e-8_r8 + + real(r8) :: Leff + real(r8) :: expo + real(r8) :: denom + + !------------------------------------------------------------ + ! Enforce finite cutoff + !------------------------------------------------------------ + Leff = max(L, x0 * (1._r8 + eps)) + !------------------------------------------------------------ + ! No taper case + !------------------------------------------------------------ + if (a <= 0._r8) then + ratio = 1._r8 + return + end if + + !------------------------------------------------------------ + ! Critical case: a = 1/4 + !------------------------------------------------------------ + if (abs(a - 0.25_r8) < eps) then + ratio = (Leff - x0) / log(Leff / x0) + else + expo = 1._r8 - 4._r8 * a + denom = Leff**expo - x0**expo + + ratio = (Leff - x0) * expo / denom + end if + +end function xylemtaper ! ===================================================================================== subroutine Hydraulics_Tridiagonal(a, b, c, r, u, ierr) From 1d2295e9855ff90dfb66e7160a9779b3d0399570 Mon Sep 17 00:00:00 2001 From: Chonggang Xu Date: Fri, 8 May 2026 13:48:01 -0600 Subject: [PATCH 3/5] update the default xylem taper exponent to 0.2 based on Olson 2020 --- parameter_files/fates_params_default.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parameter_files/fates_params_default.json b/parameter_files/fates_params_default.json index 1e799f8f1f..2ad80e324d 100644 --- a/parameter_files/fates_params_default.json +++ b/parameter_files/fates_params_default.json @@ -721,7 +721,7 @@ "dims": ["fates_pft"], "long_name": "xylem taper exponent", "units": "unitless", - "data": [0.333, 0.333, 0.333, 0.333, 0.333, 0.333, 0.333, 0.333, 0.333, 0.333, 0.333, 0.333, 0.333, 0.333] + "data": [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2] }, "fates_hydro_pinot_node": { "dtype": "float", From c246ca3bb3a8d9b2aca1d77d52ea61669ac042c9 Mon Sep 17 00:00:00 2001 From: Chonggang Xu Date: Fri, 8 May 2026 14:49:18 -0600 Subject: [PATCH 4/5] add the measurement distance to adjust for the ratio --- biogeophys/FatesPlantHydraulicsMod.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/biogeophys/FatesPlantHydraulicsMod.F90 b/biogeophys/FatesPlantHydraulicsMod.F90 index 52d5fb2353..89ccfb0850 100644 --- a/biogeophys/FatesPlantHydraulicsMod.F90 +++ b/biogeophys/FatesPlantHydraulicsMod.F90 @@ -4667,6 +4667,7 @@ function xylemtaper(a, L) result(ratio) real(r8), parameter :: x0 = 0.005_r8 ! finite cutoff (m) at petiole, to prevent singularity in function at L=0. real(r8), parameter :: eps = 1.e-8_r8 + real(r8), parameter :: xref = 0.6_r8 ! measurement distance from branch tip (m) real(r8) :: Leff real(r8) :: expo @@ -4689,10 +4690,10 @@ function xylemtaper(a, L) result(ratio) ! Critical case: a = 1/4 !------------------------------------------------------------ if (abs(a - 0.25_r8) < eps) then - ratio = (Leff - x0) / log(Leff / x0) + ratio = (Leff - x0) / (xref * log(Leff / x0)) else expo = 1._r8 - 4._r8 * a - denom = Leff**expo - x0**expo + denom = xref**(4._r8 * a) * (Leff**expo - x0**expo) ratio = (Leff - x0) * expo / denom end if From a32de7980bcd41d291bebcf335c0e2a366d47ff3 Mon Sep 17 00:00:00 2001 From: Chonggang Xu Date: Thu, 14 May 2026 10:34:42 -0600 Subject: [PATCH 5/5] update the comment --- biogeophys/FatesPlantHydraulicsMod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/biogeophys/FatesPlantHydraulicsMod.F90 b/biogeophys/FatesPlantHydraulicsMod.F90 index 89ccfb0850..1b2b18419b 100644 --- a/biogeophys/FatesPlantHydraulicsMod.F90 +++ b/biogeophys/FatesPlantHydraulicsMod.F90 @@ -4655,8 +4655,8 @@ function xylemtaper_Savage(pexp, dz) result(chi_tapnotap) return end function xylemtaper_Savage -# ===================================================================================== -# xylem hydraulic conductance following scaling for conduit width from Olson 2020 (https://nph.onlinelibrary.wiley.com/doi/10.1111/nph.16961) +! ===================================================================================== +! xylem hydraulic conductance following scaling for conduit width from Olson 2020 (https://nph.onlinelibrary.wiley.com/doi/10.1111/nph.16961) function xylemtaper(a, L) result(ratio) implicit none