From f5a16d13ccef07dab8f5f2b0d31d3dbe6adf4d57 Mon Sep 17 00:00:00 2001 From: Peter Schwartz Date: Fri, 7 Nov 2025 12:56:42 -0500 Subject: [PATCH 1/3] Use ieee intrinsics to avoid trapping ieee_inexact signals --- components/elm/src/biogeophys/SoilStateType.F90 | 10 ++++++---- components/elm/src/main/initVerticalMod.F90 | 6 +++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/components/elm/src/biogeophys/SoilStateType.F90 b/components/elm/src/biogeophys/SoilStateType.F90 index 79ab33fcb8ea..2f2579b2282f 100644 --- a/components/elm/src/biogeophys/SoilStateType.F90 +++ b/components/elm/src/biogeophys/SoilStateType.F90 @@ -331,6 +331,7 @@ subroutine InitCold(this, bounds) use SharedParamsMod , only : ParamsShareInst use FuncPedotransferMod , only : pedotransf, get_ipedof use RootBiophysMod , only : init_vegrootfr + use, intrinsic :: ieee_exceptions ! ! !ARGUMENTS: class(soilstate_type) :: this @@ -468,10 +469,11 @@ subroutine InitCold(this, bounds) ! Try to read soil information from the file. call ncd_io(ncid=ncid, varname='ZSOI', flag='read', data=zsoifl, dim1name=grlnd, readvar=readvar) if (.not. readvar ) then - ! Variable ZSOI not found, use the ELM parameters. - do j = 1, nlevsoifl - zsoifl(j) = scalez*(exp(zecoeff*(j-0.5_r8))-1._r8) !node depths - end do + call ieee_set_flag(ieee_all,.false.) + call ieee_set_halting_mode(ieee_inexact, .false.) + do j = 1, nlevgrnd + zsoi(j) = scalez*(exp(zecoeff*(dble(j)-0.5_r8))-1._r8) !node depths + enddo end if dzsoifl(1) = 0.5_r8*(zsoifl(1)+zsoifl(2)) !thickness b/n two interfaces diff --git a/components/elm/src/main/initVerticalMod.F90 b/components/elm/src/main/initVerticalMod.F90 index 27a089cc26d6..b40949e89e2c 100755 --- a/components/elm/src/main/initVerticalMod.F90 +++ b/components/elm/src/main/initVerticalMod.F90 @@ -44,6 +44,7 @@ module initVerticalMod !------------------------------------------------------------------------ subroutine initVertical(bounds, snow_depth, thick_wall, thick_roof) + use, intrinsic :: ieee_exceptions ! ! !ARGUMENTS: type(bounds_type) , intent(in) :: bounds @@ -170,8 +171,11 @@ subroutine initVertical(bounds, snow_depth, thick_wall, thick_roof) ! Soil layers not available from the input, and no additional layers needed. Use the ! default soil thickness settings. ! ----------------------------------------------------------------- + call ieee_set_flag(ieee_all,.false.) + call ieee_set_halting_mode(ieee_inexact, .false.) + do j = 1, nlevgrnd - zsoi(j) = scalez*(exp(zecoeff*(j-0.5_r8))-1._r8) !node depths + zsoi(j) = scalez*(exp(zecoeff*(dble(j)-0.5_r8))-1._r8) !node depths enddo end if deallocate(zsoi_in) From 57a57afb53c8fa4151cd3237d3c7348444e90dea Mon Sep 17 00:00:00 2001 From: Peter Schwartz Date: Fri, 7 Nov 2025 14:52:42 -0600 Subject: [PATCH 2/3] fix c/p mistake --- components/elm/src/biogeophys/SoilStateType.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/elm/src/biogeophys/SoilStateType.F90 b/components/elm/src/biogeophys/SoilStateType.F90 index 2f2579b2282f..ed20b4ba24dc 100644 --- a/components/elm/src/biogeophys/SoilStateType.F90 +++ b/components/elm/src/biogeophys/SoilStateType.F90 @@ -471,8 +471,8 @@ subroutine InitCold(this, bounds) if (.not. readvar ) then call ieee_set_flag(ieee_all,.false.) call ieee_set_halting_mode(ieee_inexact, .false.) - do j = 1, nlevgrnd - zsoi(j) = scalez*(exp(zecoeff*(dble(j)-0.5_r8))-1._r8) !node depths + do j = 1, nlevsoifl + zsoifl(j) = scalez*(exp(zecoeff*(dble(j)-0.5_r8))-1._r8) !node depths enddo end if From 1e05fe5f7b35366157ea11da6bba83a52bff3ee9 Mon Sep 17 00:00:00 2001 From: Peter Schwartz Date: Fri, 7 Nov 2025 15:16:01 -0600 Subject: [PATCH 3/3] add check in case compiler doesn't support inexact halting --- components/elm/src/biogeophys/SoilStateType.F90 | 6 ++++-- components/elm/src/main/initVerticalMod.F90 | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/components/elm/src/biogeophys/SoilStateType.F90 b/components/elm/src/biogeophys/SoilStateType.F90 index ed20b4ba24dc..aed21ffc739c 100644 --- a/components/elm/src/biogeophys/SoilStateType.F90 +++ b/components/elm/src/biogeophys/SoilStateType.F90 @@ -469,8 +469,10 @@ subroutine InitCold(this, bounds) ! Try to read soil information from the file. call ncd_io(ncid=ncid, varname='ZSOI', flag='read', data=zsoifl, dim1name=grlnd, readvar=readvar) if (.not. readvar ) then - call ieee_set_flag(ieee_all,.false.) - call ieee_set_halting_mode(ieee_inexact, .false.) + if (ieee_support_halting(ieee_inexact)) then + call ieee_set_flag(ieee_all,.false.) + call ieee_set_halting_mode(ieee_inexact, .false.) + end if do j = 1, nlevsoifl zsoifl(j) = scalez*(exp(zecoeff*(dble(j)-0.5_r8))-1._r8) !node depths enddo diff --git a/components/elm/src/main/initVerticalMod.F90 b/components/elm/src/main/initVerticalMod.F90 index b40949e89e2c..642579331a98 100755 --- a/components/elm/src/main/initVerticalMod.F90 +++ b/components/elm/src/main/initVerticalMod.F90 @@ -171,8 +171,10 @@ subroutine initVertical(bounds, snow_depth, thick_wall, thick_roof) ! Soil layers not available from the input, and no additional layers needed. Use the ! default soil thickness settings. ! ----------------------------------------------------------------- - call ieee_set_flag(ieee_all,.false.) - call ieee_set_halting_mode(ieee_inexact, .false.) + if (ieee_support_halting(ieee_inexact)) then + call ieee_set_flag(ieee_all,.false.) + call ieee_set_halting_mode(ieee_inexact, .false.) + end if do j = 1, nlevgrnd zsoi(j) = scalez*(exp(zecoeff*(dble(j)-0.5_r8))-1._r8) !node depths