From 9ea4b6e937edf43ed984dae27f0ee340dc417275 Mon Sep 17 00:00:00 2001 From: Dave Gill Date: Thu, 27 Jan 2022 23:18:46 -0700 Subject: [PATCH 1/3] NoahMP unary operator bug fix 2 TYPE: bug fix SOURCE: Patricia Balle (HPE), internal DESCRIPTION OF CHANGES: Problem: Several _more_ occurrences of `a * -b` were caught by the Cray compiler. Solution: As before, the standard requires parentheses: `a * (-b)`. LIST OF MODIFIED FILES: modified: module_sf_noahmplsm.F --- src/module_sf_noahmplsm.F | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/module_sf_noahmplsm.F b/src/module_sf_noahmplsm.F index dba96cc7..0de2e1f1 100644 --- a/src/module_sf_noahmplsm.F +++ b/src/module_sf_noahmplsm.F @@ -8493,7 +8493,7 @@ SUBROUTINE SMITH_PARLANGE_INFIL(parameters,NSOIL,ZSOIL,SMC,SICE,QINSUR,FACC,FSUR CALL WDFCND2 (parameters,WDF,WCND,parameters%SMCWLT(ISOIL),0.0,ISOIL) ! Maximum infiltrability based on the Eq. 6.25. (m/s) - JJ = parameters%GDVIC * (parameters%SMCMAX(ISOIL) - parameters%SMCWLT(ISOIL)) * -1.0 * ZSOIL(ISOIL) + JJ = parameters%GDVIC * (parameters%SMCMAX(ISOIL) - parameters%SMCWLT(ISOIL)) * (-1.0) * ZSOIL(ISOIL) FSUR = parameters%DKSAT(ISOIL) + (GAM * (parameters%DKSAT(ISOIL) - WCND) / (EXP(GAM * FACC / JJ) -1.0)) ! infiltration rate at surface @@ -8510,7 +8510,7 @@ SUBROUTINE SMITH_PARLANGE_INFIL(parameters,NSOIL,ZSOIL,SMC,SICE,QINSUR,FACC,FSUR CALL WDFCND2 (parameters,WDF,WCND,SMC(ISOIL),SICE(ISOIL),ISOIL) ! Maximum infiltrability based on the Eq. 6.25. (m/s) - JJ = parameters%GDVIC * max(0.0,(parameters%SMCMAX(ISOIL) - SMC(ISOIL))) * -1.0 * ZSOIL(ISOIL) + JJ = parameters%GDVIC * max(0.0,(parameters%SMCMAX(ISOIL) - SMC(ISOIL))) * (-1.0) * ZSOIL(ISOIL) IF(JJ == 0.0)THEN ! infiltration at surface == saturated hydraulic conductivity FSUR = WCND @@ -8571,7 +8571,7 @@ SUBROUTINE GREEN_AMPT_INFIL(parameters,NSOIL,ZSOIL,SMC,SICE,QINSUR,FACC,FSUR,INF CALL WDFCND2 (parameters,WDF,WCND,parameters%SMCWLT(ISOIL),0.0,ISOIL) ! Maximum infiltrability based on the Eq. 6.25. (m/s) - JJ = parameters%GDVIC * (parameters%SMCMAX(ISOIL) - parameters%SMCWLT(ISOIL)) * -1.0 * ZSOIL(ISOIL) + JJ = parameters%GDVIC * (parameters%SMCMAX(ISOIL) - parameters%SMCWLT(ISOIL)) * (-1.0) * ZSOIL(ISOIL) FSUR = parameters%DKSAT(ISOIL) + ((JJ/1E-05) * (parameters%DKSAT(ISOIL) - WCND)) !maximum infiltration rate at surface @@ -8583,7 +8583,7 @@ SUBROUTINE GREEN_AMPT_INFIL(parameters,NSOIL,ZSOIL,SMC,SICE,QINSUR,FACC,FSUR,INF CALL WDFCND2 (parameters,WDF,WCND,SMC(ISOIL),SICE(ISOIL),ISOIL) ! Maximum infiltrability based on the Eq. 6.25. (m/s) - JJ = parameters%GDVIC * max(0.0,(parameters%SMCMAX(ISOIL) - SMC(ISOIL))) * -1.0 * ZSOIL(ISOIL) + JJ = parameters%GDVIC * max(0.0,(parameters%SMCMAX(ISOIL) - SMC(ISOIL))) * (-1.0) * ZSOIL(ISOIL) FSUR = parameters%DKSAT(ISOIL) + ((JJ/FACC) * (parameters%DKSAT(ISOIL) - WCND)) ! infiltration rate at surface From 074bebe55aeec914981d4e716a5e5f4ec00ff005 Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Wed, 9 Feb 2022 19:57:05 -0700 Subject: [PATCH 2/3] bug fix for mod() in if statement for soilstep --- drivers/wrf/module_sf_noahmpdrv.F | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/wrf/module_sf_noahmpdrv.F b/drivers/wrf/module_sf_noahmpdrv.F index 7a0f0ab5..ee4c4b77 100644 --- a/drivers/wrf/module_sf_noahmpdrv.F +++ b/drivers/wrf/module_sf_noahmpdrv.F @@ -646,8 +646,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN calculate_soil = .false. soil_update_steps = nint(soiltstep/DT) ! 3600 = 1 hour soil_update_steps = max(soil_update_steps,1) - if( soil_update_steps == 1 .or. & - (soil_update_steps > 1 .and. mod(itimestep,soil_update_steps) == 1) ) then + if ( soil_update_steps == 1 ) then ACC_SSOILXY = 0.0 ACC_QINSURXY = 0.0 ACC_QSEVAXY = 0.0 @@ -658,6 +657,19 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN ACC_ETRANXY = 0.0 ACC_EDIRXY = 0.0 end if + if ( soil_update_steps > 1 ) then + if ( mod(itimestep,soil_update_steps) == 1 ) then + ACC_SSOILXY = 0.0 + ACC_QINSURXY = 0.0 + ACC_QSEVAXY = 0.0 + ACC_ETRANIXY = 0.0 + ACC_DWATERXY = 0.0 + ACC_PRCPXY = 0.0 + ACC_ECANXY = 0.0 + ACC_ETRANXY = 0.0 + ACC_EDIRXY = 0.0 + end if + end if if (mod(itimestep,soil_update_steps) == 0) calculate_soil = .true. ! end soil timestep From 097efab47ad9e9899d298646088f7a2ccd8dbbf9 Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Thu, 17 Mar 2022 17:24:58 -0600 Subject: [PATCH 3/3] bug fix for SICE in sprinkler irrigation --- src/module_sf_noahmplsm.F | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/module_sf_noahmplsm.F b/src/module_sf_noahmplsm.F index 0de2e1f1..e9fad26b 100644 --- a/src/module_sf_noahmplsm.F +++ b/src/module_sf_noahmplsm.F @@ -925,7 +925,7 @@ SUBROUTINE NOAHMP_SFLX (parameters, & ! call sprinkler irrigation before CANWAT/PRECIP_HEAT to have canopy interception IF((CROPLU .EQV. .TRUE.) .AND. (IRAMTSI .GT. 0.0)) THEN - CALL SPRINKLER_IRRIGATION(parameters,NSOIL,DT,SH2O,SMC,SICE,& !in + CALL SPRINKLER_IRRIGATION(parameters,NSOIL,DT,SH2O,SMC, & !in SFCTMP,UU,VV,EAIR,SIFAC, & !in IRAMTSI,IREVPLOS,IRSIRATE) !inout RAIN = RAIN + (IRSIRATE*1000.0/DT) ![mm/s] @@ -9349,7 +9349,7 @@ END SUBROUTINE TRIGGER_IRRIGATION !============================================================================================================ - SUBROUTINE SPRINKLER_IRRIGATION(parameters,NSOIL,DT,SH2O,SMC,SICE,& !in + SUBROUTINE SPRINKLER_IRRIGATION(parameters,NSOIL,DT,SH2O,SMC, & !in T2,WINDU,WINDV,EAIR,SIFAC, & !in IRAMTSI,IREVPLOS,IRSIRATE) !inout !--------------------------------------------------------------------------------------------- @@ -9369,7 +9369,6 @@ SUBROUTINE SPRINKLER_IRRIGATION(parameters,NSOIL,DT,SH2O,SMC,SICE,& !in REAL, INTENT(IN) :: DT REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SH2O REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SMC - REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SICE REAL, INTENT(IN) :: T2 REAL, INTENT(IN) :: WINDU REAL, INTENT(IN) :: WINDV @@ -9380,12 +9379,17 @@ SUBROUTINE SPRINKLER_IRRIGATION(parameters,NSOIL,DT,SH2O,SMC,SICE,& !in REAL, INTENT(INOUT) :: IREVPLOS !loss of irrigation water to evaporation,sprinkler [m/timestep] REAL, INTENT(INOUT) :: IRSIRATE !rate of irrigation by sprinkler [m/timestep] ! local + REAL, DIMENSION(1:NSOIL) :: SICE REAL :: FSUR !infiltration rate [m/s] REAL :: TEMP_RATE REAL :: WINDSPEED REAL :: IRRLOSS !temporary var for irr loss [%] REAL :: ESAT1 !------------------------------------------------------------------------------------------- + + ! compute soil ice content + SICE(:) = MAX(0.0, SMC(:) - SH2O(:)) + ! estimate infiltration rate based on Philips Eq. CALL IRR_PHILIP_INFIL(parameters,SMC,SH2O,SICE,DT,NSOIL,FSUR) ! irrigation rate of sprinkler