From a26f91fb12f7bc404ba01351ca642d2d3717840d Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Wed, 18 Oct 2023 16:01:19 -0600 Subject: [PATCH 1/3] bug fix for ground heat flux sign in urban diagnostic --- drivers/wrf/module_sf_noahmpdrv.F | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/wrf/module_sf_noahmpdrv.F b/drivers/wrf/module_sf_noahmpdrv.F index 46e61a17..3497f4ef 100644 --- a/drivers/wrf/module_sf_noahmpdrv.F +++ b/drivers/wrf/module_sf_noahmpdrv.F @@ -3505,7 +3505,7 @@ SUBROUTINE noahmp_urban(sf_urban_physics, NSOIL, IVGTYP, ITIMESTEP, QFX(I,J) = FRC_URB2D(I,J) * LH_KINEMATIC_URB & + (1-FRC_URB2D(I,J))* QFX(I,J) ![kg/m/m/s] LH(I,J) = FRC_URB2D(I,J) * LH_URB + (1-FRC_URB2D(I,J)) * LH(I,J) ![W/m/m] - GRDFLX(I,J) = FRC_URB2D(I,J) * (G_URB) + (1-FRC_URB2D(I,J)) * GRDFLX(I,J) ![W/m/m] + GRDFLX(I,J) = FRC_URB2D(I,J) * (G_URB*(-1.0)) + (1-FRC_URB2D(I,J)) * GRDFLX(I,J) ![W/m/m] positive: downward direction TSK(I,J) = FRC_URB2D(I,J) * TS_URB + (1-FRC_URB2D(I,J)) * TSK(I,J) ![K] ! Q1 = QSFC(I,J)/(1.0+QSFC(I,J)) ! Q1 = FRC_URB2D(I,J) * QS_URB + (1-FRC_URB2D(I,J)) * Q1 ![-] @@ -3734,7 +3734,7 @@ SUBROUTINE noahmp_urban(sf_urban_physics, NSOIL, IVGTYP, ITIMESTEP, ! rename *_urb to sh_urb2d,lh_urb2d,g_urb2d,rn_urb2d - grdflx(i,j) = (1.-frc_urb2d(i,j))*grdflx_rural(i,j)+ frc_urb2d(i,j)*grdflx_urb(i,j) + grdflx(i,j) = (1.-frc_urb2d(i,j))*grdflx_rural(i,j)+ frc_urb2d(i,j)*grdflx_urb(i,j)*(-1.0) ! positive: downward direction qfx(i,j) = (1.-frc_urb2d(i,j))*qfx_rural(i,j) + qfx_urb(i,j) lh(i,j) = qfx(i,j)*xlv hfx(i,j) = hfx_urb(i,j) + (1-frc_urb2d(i,j))*hfx_rural(i,j) ![W/m/m] From 0fd17e50a3cbdb4ddd6ba00196927803f656fed0 Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Wed, 18 Oct 2023 16:57:31 -0600 Subject: [PATCH 2/3] bug fix for FVEG scaling for stomata & canopy interception --- src/module_sf_noahmplsm.F | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/module_sf_noahmplsm.F b/src/module_sf_noahmplsm.F index 23017dea..0a047e14 100644 --- a/src/module_sf_noahmplsm.F +++ b/src/module_sf_noahmplsm.F @@ -1447,7 +1447,7 @@ SUBROUTINE PRECIP_HEAT (parameters,ILOC ,JLOC ,VEGTYP ,DT ,UU ,VV ! --------------------------- liquid water ------------------------------ ! maximum canopy water - MAXLIQ = parameters%CH2OP * (ELAI+ ESAI) + MAXLIQ = FVEG * parameters%CH2OP * (ELAI+ ESAI) ! average interception and throughfall @@ -1477,7 +1477,7 @@ SUBROUTINE PRECIP_HEAT (parameters,ILOC ,JLOC ,VEGTYP ,DT ,UU ,VV ! --------------------------- canopy ice ------------------------------ ! for canopy ice - MAXSNO = 6.6*(0.27+46.0/BDFALL) * (ELAI+ ESAI) + MAXSNO = FVEG * 6.6*(0.27+46.0/BDFALL) * (ELAI+ ESAI) IF((ELAI+ ESAI) .GT. 0.0) THEN QINTS = FVEG * SNOW * FP @@ -3935,21 +3935,21 @@ SUBROUTINE VEGE_FLUX(parameters,NSNOW ,NSOIL ,ISNOW ,VEGTYP ,VEG , & IF(ITER == 1) THEN IF (OPT_CRS == 1) then ! Ball-Berry CALL STOMATA (parameters,VEGTYP,MPE ,PARSUN ,FOLN ,ILOC , JLOC , & !in - TV ,ESTV ,EAH ,SFCTMP,SFCPRS, & !in + TV ,ESTV ,EAH ,SFCTMP,SFCPRS, FVEG, & !in O2AIR ,CO2AIR,IGS ,BTRAN ,RB , & !in RSSUN ,PSNSUN) !out CALL STOMATA (parameters,VEGTYP,MPE ,PARSHA ,FOLN ,ILOC , JLOC , & !in - TV ,ESTV ,EAH ,SFCTMP,SFCPRS, & !in + TV ,ESTV ,EAH ,SFCTMP,SFCPRS, FVEG, & !in O2AIR ,CO2AIR,IGS ,BTRAN ,RB , & !in RSSHA ,PSNSHA) !out END IF IF (OPT_CRS == 2) then ! Jarvis - CALL CANRES (parameters,PARSUN,TV ,BTRAN ,EAH ,SFCPRS, & !in + CALL CANRES (parameters,PARSUN,TV ,BTRAN ,EAH ,SFCPRS, FVEG, & !in RSSUN ,PSNSUN,ILOC ,JLOC ) !out - CALL CANRES (parameters,PARSHA,TV ,BTRAN ,EAH ,SFCPRS, & !in + CALL CANRES (parameters,PARSHA,TV ,BTRAN ,EAH ,SFCPRS, FVEG, & !in RSSHA ,PSNSHA,ILOC ,JLOC ) !out END IF @@ -5003,7 +5003,7 @@ END SUBROUTINE ESAT !== begin stomata ================================================================================== SUBROUTINE STOMATA (parameters,VEGTYP ,MPE ,APAR ,FOLN ,ILOC , JLOC, & !in - TV ,EI ,EA ,SFCTMP ,SFCPRS , & !in + TV ,EI ,EA ,SFCTMP ,SFCPRS , FVEG, & !in O2 ,CO2 ,IGS ,BTRAN ,RB , & !in RS ,PSN ) !out ! -------------------------------------------------------------------------------------------------- @@ -5017,7 +5017,7 @@ SUBROUTINE STOMATA (parameters,VEGTYP ,MPE ,APAR ,FOLN ,ILOC , JLO REAL, INTENT(IN) :: IGS !growing season index (0=off, 1=on) REAL, INTENT(IN) :: MPE !prevents division by zero errors - + REAL, INTENT(IN) :: FVEG !vegetation greeness fraction REAL, INTENT(IN) :: TV !foliage temperature (k) REAL, INTENT(IN) :: EI !vapor pressure inside leaf (sat vapor press at tv) (pa) REAL, INTENT(IN) :: EA !vapor pressure of canopy air (pa) @@ -5076,6 +5076,7 @@ SUBROUTINE STOMATA (parameters,VEGTYP ,MPE ,APAR ,FOLN ,ILOC , JLO ! initialize RS=RSMAX and PSN=0 because will only do calculations ! for APAR > 0, in which case RS <= RSMAX and PSN >= 0 + APAR = APAR / max(FVEG,1.0e-6) ! scaling APAR back to stand scale CF = SFCPRS/(8.314*SFCTMP)*1.0e06 RS = 1.0/parameters%BP * CF PSN = 0.0 @@ -5135,7 +5136,7 @@ END SUBROUTINE STOMATA !== begin canres =================================================================================== - SUBROUTINE CANRES (parameters,PAR ,SFCTMP,RCSOIL ,EAH ,SFCPRS , & !in + SUBROUTINE CANRES (parameters,PAR ,SFCTMP,RCSOIL ,EAH ,SFCPRS , FVEG, & !in RC ,PSN ,ILOC ,JLOC ) !out ! -------------------------------------------------------------------------------------------------- @@ -5162,7 +5163,7 @@ SUBROUTINE CANRES (parameters,PAR ,SFCTMP,RCSOIL ,EAH ,SFCPRS , & !in REAL, INTENT(IN) :: SFCPRS !surface pressure (pa) REAL, INTENT(IN) :: EAH !water vapor pressure (pa) REAL, INTENT(IN) :: RCSOIL !soil moisture stress factor - + REAL, INTENT(IN) :: FVEG !vegetation greeness fraction !outputs REAL, INTENT(OUT) :: RC !canopy resistance per unit LAI @@ -5186,6 +5187,7 @@ SUBROUTINE CANRES (parameters,PAR ,SFCTMP,RCSOIL ,EAH ,SFCPRS , & !in RCS = 0.0 RCT = 0.0 RCQ = 0.0 + PAR = PAR / max(FVEG,1.0e-6) ! scaling PAR back to stand scale ! compute Q2 and Q2SAT @@ -6315,7 +6317,7 @@ SUBROUTINE CANWATER (parameters,VEGTYP ,DT , & !in ! --------------------------- liquid water ------------------------------ ! maximum canopy water - MAXLIQ = parameters%CH2OP * (ELAI+ ESAI) + MAXLIQ = FVEG * parameters%CH2OP * (ELAI+ ESAI) ! evaporation, transpiration, and dew @@ -6343,7 +6345,7 @@ SUBROUTINE CANWATER (parameters,VEGTYP ,DT , & !in ! --------------------------- canopy ice ------------------------------ ! for canopy ice - MAXSNO = 6.6*(0.27+46.0/BDFALL) * (ELAI+ ESAI) + MAXSNO = FVEG * 6.6*(0.27+46.0/BDFALL) * (ELAI+ ESAI) QSUBC = MIN(CANICE/DT,QSUBC) CANICE= MAX(0.0,CANICE + (QFROC-QSUBC)*DT) From 218eb5a7b41c62c700eeba798a71004720b55264 Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Wed, 18 Oct 2023 17:00:53 -0600 Subject: [PATCH 3/3] bug fix for snow combination layer index --- src/module_sf_noahmplsm.F | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/module_sf_noahmplsm.F b/src/module_sf_noahmplsm.F index 0a047e14..36ee06de 100644 --- a/src/module_sf_noahmplsm.F +++ b/src/module_sf_noahmplsm.F @@ -6656,7 +6656,7 @@ SUBROUTINE COMBINE (parameters,NSNOW ,NSOIL ,ILOC ,JLOC , & !in SNICE(J+1) = SNICE(J+1) + SNICE(J) DZSNSO(J+1) = DZSNSO(J+1) + DZSNSO(J) ELSE - IF (ISNOW_OLD < -1) THEN ! MB/KM: change to ISNOW + IF (ISNOW < -1) THEN ! MB/KM: change to ISNOW SNLIQ(J-1) = SNLIQ(J-1) + SNLIQ(J) SNICE(J-1) = SNICE(J-1) + SNICE(J) DZSNSO(J-1) = DZSNSO(J-1) + DZSNSO(J)