From c97112c749bf55cf0a1a96774c2b163d0341a289 Mon Sep 17 00:00:00 2001 From: Stefan Poll Date: Thu, 11 Jun 2026 23:25:05 +0200 Subject: [PATCH 1/5] add limiter to smp_l and psit to avoid excessive ET see #105 --- src/clm5/biogeophys/CanopyTemperatureMod.F90 | 5 +++-- src/clm5/biogeophys/SoilWaterMovementMod.F90 | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/clm5/biogeophys/CanopyTemperatureMod.F90 b/src/clm5/biogeophys/CanopyTemperatureMod.F90 index 7429fa130d..f17e1854fe 100644 --- a/src/clm5/biogeophys/CanopyTemperatureMod.F90 +++ b/src/clm5/biogeophys/CanopyTemperatureMod.F90 @@ -260,8 +260,9 @@ subroutine CanopyTemperature(bounds, & fac = max( fac, 0.01_r8 ) #ifdef COUP_OAS_PFL ! clm3.5/bld/usr.src/Biogeophysics1Mod.F90 - if (pfl_psi(c,1)>= 0.0_r8) psit = 0._r8 - if (pfl_psi(c,1) < 0.0_r8) psit = pfl_psi(c,1) +! if (pfl_psi(c,1)>= 0.0_r8) psit = 0._r8 +! if (pfl_psi(c,1) < 0.0_r8) psit = max(smpmin(c), pfl_psi(c,1)) + psit = max(smpmin(c), min(0._r8, pfl_psi(c,1))) #else psit = -sucsat(c,1) * fac ** (-bsw(c,1)) psit = max(smpmin(c), psit) diff --git a/src/clm5/biogeophys/SoilWaterMovementMod.F90 b/src/clm5/biogeophys/SoilWaterMovementMod.F90 index bc6c5c5ac8..f86212882a 100644 --- a/src/clm5/biogeophys/SoilWaterMovementMod.F90 +++ b/src/clm5/biogeophys/SoilWaterMovementMod.F90 @@ -1489,6 +1489,7 @@ subroutine soilwater_parflow(bounds, num_hydrologyc, & associate(& smp_l => soilstate_inst%smp_l_col , & ! Input: [real(r8) (:,:) ] soil matrix potential [mm] h2osoi_liq => waterstate_inst%h2osoi_liq_col , & ! Input: [real(r8) (:,:) ] liquid water (kg/m2) + smpmin => soilstate_inst%smpmin_col , & ! Input: [real(r8) (:) ] restriction for min of soil potential (mm) pfl_h2osoi_liq => waterstate_inst%pfl_h2osoi_liq_col , & ! Input: [real(r8) (:,:) ] ParFlow soil water (mm) pfl_psi => waterstate_inst%pfl_psi_col & ! Input: [real(r8) (:,:) ] ParFlow pressure head (mm) ) ! end associate statement @@ -1502,7 +1503,7 @@ subroutine soilwater_parflow(bounds, num_hydrologyc, & do j = 1, nlevgrnd h2osoi_liq(c,j) = pfl_h2osoi_liq(c,j) if (pfl_psi(c,j) <= 0) then - smp_l(c,j) = pfl_psi(c,j) + smp_l(c,j) = max(smpmin(c), pfl_psi(c,j)) end if end do end do From 6a23e64cf3794610dfed7a7c567e844d32ad17fc Mon Sep 17 00:00:00 2001 From: Stefan Poll Date: Thu, 11 Jun 2026 23:26:30 +0200 Subject: [PATCH 2/5] change smpmin_col to -1.e6 change limiter to lower value --- src/clm5/biogeophys/SoilStateInitTimeConstMod.F90 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/clm5/biogeophys/SoilStateInitTimeConstMod.F90 b/src/clm5/biogeophys/SoilStateInitTimeConstMod.F90 index 935e26c76a..42d07590c4 100644 --- a/src/clm5/biogeophys/SoilStateInitTimeConstMod.F90 +++ b/src/clm5/biogeophys/SoilStateInitTimeConstMod.F90 @@ -187,7 +187,11 @@ subroutine SoilStateInitTimeConst(bounds, soilstate_inst, nlfilename) begg = bounds%begg; endg= bounds%endg do c = begc,endc +#ifdef COUP_OAS_PFL + soilstate_inst%smpmin_col(c) = -1.e6_r8 +#else soilstate_inst%smpmin_col(c) = -1.e8_r8 +#endif end do ! -------------------------------------------------------------------- From f56440e9af54df6d1313e0893ba045a520624391 Mon Sep 17 00:00:00 2001 From: Stefan Poll Date: Thu, 11 Jun 2026 23:27:31 +0200 Subject: [PATCH 3/5] reduce log-file output avoid spamming in log file, thereby improve performance --- src/clm5/biogeophys/BalanceCheckMod.F90 | 4 ++++ src/clm5/main/lnd2atmMod.F90 | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/clm5/biogeophys/BalanceCheckMod.F90 b/src/clm5/biogeophys/BalanceCheckMod.F90 index 7ca412955a..a664391d99 100644 --- a/src/clm5/biogeophys/BalanceCheckMod.F90 +++ b/src/clm5/biogeophys/BalanceCheckMod.F90 @@ -356,6 +356,7 @@ subroutine BalanceCheck( bounds, & end do found = .false. +#ifndef COUP_OAS_PFL do c = bounds%begc, bounds%endc if (abs(errh2o(c)) > 1.e-9_r8) then found = .true. @@ -446,6 +447,7 @@ subroutine BalanceCheck( bounds, & #endif end if end if +#endif ! Snow balance check @@ -691,6 +693,7 @@ subroutine BalanceCheck( bounds, & ! Soil energy balance check +#ifndef COUP_OAS_PFL found = .false. do c = bounds%begc,bounds%endc if (col%active(c)) then @@ -714,6 +717,7 @@ subroutine BalanceCheck( bounds, & end if #endif end if +#endif end associate diff --git a/src/clm5/main/lnd2atmMod.F90 b/src/clm5/main/lnd2atmMod.F90 index 7d1d68602d..341235029c 100644 --- a/src/clm5/main/lnd2atmMod.F90 +++ b/src/clm5/main/lnd2atmMod.F90 @@ -472,7 +472,7 @@ subroutine lnd2atm(bounds, & do j = 1, nlevsoi if (lnd2atm_inst%qflx_parflow_grc(g,j) == spval) then lnd2atm_inst%qflx_parflow_grc(g,j) = 0._r8 - write(iulog,*)'WARNING: qflx_parflow_grc is nan at grid point ',g,' level',j,' replaced with 0.' +! write(iulog,*)'WARNING: qflx_parflow_grc is nan at grid point ',g,' level',j,' replaced with 0.' end if end do enddo From 25d7f77b8902d0e6835928897d67217893a7507c Mon Sep 17 00:00:00 2001 From: Stefan Poll Date: Thu, 30 Jul 2026 17:14:44 +0200 Subject: [PATCH 4/5] clean-up clm5/biogeophys/CanopyTemperatureMod.F90 --- src/clm5/biogeophys/CanopyTemperatureMod.F90 | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/clm5/biogeophys/CanopyTemperatureMod.F90 b/src/clm5/biogeophys/CanopyTemperatureMod.F90 index f17e1854fe..f2d22e3214 100644 --- a/src/clm5/biogeophys/CanopyTemperatureMod.F90 +++ b/src/clm5/biogeophys/CanopyTemperatureMod.F90 @@ -259,9 +259,6 @@ subroutine CanopyTemperature(bounds, & fac = min(1._r8, wx/watsat(c,1)) fac = max( fac, 0.01_r8 ) #ifdef COUP_OAS_PFL - ! clm3.5/bld/usr.src/Biogeophysics1Mod.F90 -! if (pfl_psi(c,1)>= 0.0_r8) psit = 0._r8 -! if (pfl_psi(c,1) < 0.0_r8) psit = max(smpmin(c), pfl_psi(c,1)) psit = max(smpmin(c), min(0._r8, pfl_psi(c,1))) #else psit = -sucsat(c,1) * fac ** (-bsw(c,1)) From 0d594ea8f46b4058c0c9d74a83d0f14a8026afe4 Mon Sep 17 00:00:00 2001 From: Stefan Poll Date: Thu, 30 Jul 2026 17:15:51 +0200 Subject: [PATCH 5/5] Revert "reduce log-file output" This reverts commit f56440e9af54df6d1313e0893ba045a520624391. --- src/clm5/biogeophys/BalanceCheckMod.F90 | 4 ---- src/clm5/main/lnd2atmMod.F90 | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/clm5/biogeophys/BalanceCheckMod.F90 b/src/clm5/biogeophys/BalanceCheckMod.F90 index a664391d99..7ca412955a 100644 --- a/src/clm5/biogeophys/BalanceCheckMod.F90 +++ b/src/clm5/biogeophys/BalanceCheckMod.F90 @@ -356,7 +356,6 @@ subroutine BalanceCheck( bounds, & end do found = .false. -#ifndef COUP_OAS_PFL do c = bounds%begc, bounds%endc if (abs(errh2o(c)) > 1.e-9_r8) then found = .true. @@ -447,7 +446,6 @@ subroutine BalanceCheck( bounds, & #endif end if end if -#endif ! Snow balance check @@ -693,7 +691,6 @@ subroutine BalanceCheck( bounds, & ! Soil energy balance check -#ifndef COUP_OAS_PFL found = .false. do c = bounds%begc,bounds%endc if (col%active(c)) then @@ -717,7 +714,6 @@ subroutine BalanceCheck( bounds, & end if #endif end if -#endif end associate diff --git a/src/clm5/main/lnd2atmMod.F90 b/src/clm5/main/lnd2atmMod.F90 index 341235029c..7d1d68602d 100644 --- a/src/clm5/main/lnd2atmMod.F90 +++ b/src/clm5/main/lnd2atmMod.F90 @@ -472,7 +472,7 @@ subroutine lnd2atm(bounds, & do j = 1, nlevsoi if (lnd2atm_inst%qflx_parflow_grc(g,j) == spval) then lnd2atm_inst%qflx_parflow_grc(g,j) = 0._r8 -! write(iulog,*)'WARNING: qflx_parflow_grc is nan at grid point ',g,' level',j,' replaced with 0.' + write(iulog,*)'WARNING: qflx_parflow_grc is nan at grid point ',g,' level',j,' replaced with 0.' end if end do enddo