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 diff --git a/src/module_sf_noahmplsm.F b/src/module_sf_noahmplsm.F index dba96cc7..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] @@ -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 @@ -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