From 4329b9fa4230e7fc4e53e343bbe968a4a6605c39 Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Thu, 17 Dec 2020 15:39:21 -0700 Subject: [PATCH 01/10] Add snow retention at the snowpack bottom to be consistent with NWM updates, along with update for MPTABLE --- phys/module_sf_noahmpdrv.F | 3 ++- phys/module_sf_noahmplsm.F | 25 +++++++++++++++++++++++-- run/MPTABLE.TBL | 1 + 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/phys/module_sf_noahmpdrv.F b/phys/module_sf_noahmpdrv.F index f77b959845..fe75b7a5b6 100644 --- a/phys/module_sf_noahmpdrv.F +++ b/phys/module_sf_noahmpdrv.F @@ -1200,7 +1200,8 @@ SUBROUTINE TRANSFER_MP_PARAMETERS(VEGTYPE,SOILTYPE,SLOPETYPE,SOILCOLOR,CROPTYPE, parameters%FSATMX = FSATMX_TABLE parameters%Z0SNO = Z0SNO_TABLE parameters%SSI = SSI_TABLE - parameters%SWEMX = SWEMX_TABLE + parameters%SNOW_RET_FAC = SNOW_RET_FAC_TABLE + parameters%SWEMX = SWEMX_TABLE parameters%TAU0 = TAU0_TABLE parameters%GRAIN_GROWTH = GRAIN_GROWTH_TABLE parameters%EXTRA_GROWTH = EXTRA_GROWTH_TABLE diff --git a/phys/module_sf_noahmplsm.F b/phys/module_sf_noahmplsm.F index 9686a403c6..c295f8f918 100644 --- a/phys/module_sf_noahmplsm.F +++ b/phys/module_sf_noahmplsm.F @@ -291,6 +291,7 @@ MODULE MODULE_SF_NOAHMPLSM REAL :: FSATMX !maximum surface saturated fraction (global mean) REAL :: Z0SNO !snow surface roughness length (m) (0.002) REAL :: SSI !liquid water holding capacity for snowpack (m3/m3) + REAL :: SNOW_RET_FAC !snowpack water release timescale factor (1/s) REAL :: SWEMX !new snow mass to fully cover old snow (mm) REAL :: TAU0 !tau0 from Yang97 eqn. 10a REAL :: GRAIN_GROWTH !growth from vapor diffusion Yang97 eqn. 10b @@ -5494,6 +5495,7 @@ SUBROUTINE PHASECHANGE (parameters,NSNOW ,NSOIL ,ISNOW ,DT ,FACT , SNEQV = MAX(0.,TEMP1-XM(1)) PROPOR = SNEQV/TEMP1 SNOWH = MAX(0.,PROPOR * SNOWH) + SNOWH = MIN(MAX(SNOWH,SNEQV/500.0),SNEQV/50.0) ! limit adjustment to a reasonable density HEATR = HM(1) - HFUS*(TEMP1-SNEQV)/DT IF (HEATR > 0.) THEN XM(1) = HEATR*DT/HFUS @@ -6330,10 +6332,12 @@ SUBROUTINE COMBINE (parameters,NSNOW ,NSOIL ,ILOC ,JLOC , & !in IF(J /= 0) THEN SNLIQ(J+1) = SNLIQ(J+1) + SNLIQ(J) 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 SNLIQ(J-1) = SNLIQ(J-1) + SNLIQ(J) SNICE(J-1) = SNICE(J-1) + SNICE(J) + DZSNSO(J-1) = DZSNSO(J-1) + DZSNSO(J) ELSE IF(SNICE(J) >= 0.) THEN PONDING1 = SNLIQ(J) ! ISNOW WILL GET SET TO ZERO BELOW; PONDING1 WILL GET @@ -6741,6 +6745,7 @@ SUBROUTINE COMPACT (parameters,NSNOW ,NSOIL ,DT ,STC ,SNICE , & !in ! The change in DZ due to compaction DZSNSO(J) = DZSNSO(J)*(1.+PDZDTC) + DZSNSO(J) = max(DZSNSO(J),SNICE(J)/DENICE + SNLIQ(J)/DENH2O) END IF ! Pressure of overlying snow @@ -6803,6 +6808,7 @@ SUBROUTINE SNOWH2O (parameters,NSNOW ,NSOIL ,DT ,QSNFRO ,QSNSUB , & !in REAL, DIMENSION(-NSNOW+1:0) :: EPORE !effective porosity = porosity - VOL_ICE REAL :: PROPOR, TEMP REAL :: PONDING1, PONDING2 + REAL, PARAMETER :: max_liq_mass_fraction = 0.4 ! ---------------------------------------------------------------------- !for the case when SNEQV becomes '0' after 'COMBINE' @@ -6825,6 +6831,7 @@ SUBROUTINE SNOWH2O (parameters,NSNOW ,NSOIL ,DT ,QSNFRO ,QSNSUB , & !in SNEQV = SNEQV - QSNSUB*DT + QSNFRO*DT PROPOR = SNEQV/TEMP SNOWH = MAX(0.,PROPOR * SNOWH) + SNOWH = MIN(MAX(SNOWH,SNEQV/500.0),SNEQV/50.0) ! limit adjustment to a reasonable density IF(SNEQV < 0.) THEN SICE(1) = SICE(1) + SNEQV/(DZSNSO(1)*1000.) @@ -6876,11 +6883,22 @@ SUBROUTINE SNOWH2O (parameters,NSNOW ,NSOIL ,DT ,QSNFRO ,QSNSUB , & !in SNLIQ(J) = SNLIQ(J) + QIN VOL_LIQ(J) = SNLIQ(J)/(DZSNSO(J)*DENH2O) QOUT = MAX(0.,(VOL_LIQ(J)-parameters%SSI*EPORE(J))*DZSNSO(J)) + IF(J == 0) THEN + QOUT = MAX((VOL_LIQ(J)- EPORE(J))*DZSNSO(J) , parameters%SNOW_RET_FAC*DT*QOUT) + END IF QOUT = QOUT*DENH2O SNLIQ(J) = SNLIQ(J) - QOUT + IF((SNLIQ(J)/(SNICE(J)+SNLIQ(J))) > max_liq_mass_fraction) THEN + QOUT = QOUT + (SNLIQ(J) - max_liq_mass_fraction/(1.0 - max_liq_mass_fraction)*SNICE(J)) + SNLIQ(J) = max_liq_mass_fraction/(1.0 - max_liq_mass_fraction)*SNICE(J) + ENDIF QIN = QOUT END DO + DO J = ISNOW+1, 0 + DZSNSO(J) = MAX(DZSNSO(J),SNLIQ(J)/DENH2O + SNICE(J)/DENICE) + END DO + ! Liquid water from snow bottom to soil QSNBOT = QOUT / DT ! mm/s @@ -9269,6 +9287,7 @@ MODULE NOAHMP_TABLES REAL :: FSATMX_TABLE !maximum surface saturated fraction (global mean) REAL :: Z0SNO_TABLE !snow surface roughness length (m) (0.002) REAL :: SSI_TABLE !liquid water holding capacity for snowpack (m3/m3) (0.03) + REAL :: SNOW_RET_FAC_TABLE !snowpack water release timescale factor (1/s) REAL :: SWEMX_TABLE !new snow mass to fully cover old snow (mm) REAL :: TAU0_TABLE !tau0 from Yang97 eqn. 10a REAL :: GRAIN_GROWTH_TABLE !growth from vapor diffusion Yang97 eqn. 10b @@ -9780,12 +9799,12 @@ subroutine read_mp_global_parameters() integer :: ierr logical :: file_named - REAL :: CO2,O2,TIMEAN,FSATMX,Z0SNO,SSI, & + REAL :: CO2,O2,TIMEAN,FSATMX,Z0SNO,SSI,SNOW_RET_FAC,& SWEMX,TAU0,GRAIN_GROWTH,EXTRA_GROWTH,DIRT_SOOT,& BATS_COSZ,BATS_VIS_NEW,BATS_NIR_NEW,BATS_VIS_AGE,BATS_NIR_AGE,BATS_VIS_DIR,BATS_NIR_DIR,& RSURF_SNOW,RSURF_EXP - NAMELIST / noahmp_global_parameters / CO2,O2,TIMEAN,FSATMX,Z0SNO,SSI, & + NAMELIST / noahmp_global_parameters / CO2,O2,TIMEAN,FSATMX,Z0SNO,SSI,SNOW_RET_FAC, & SWEMX,TAU0,GRAIN_GROWTH,EXTRA_GROWTH,DIRT_SOOT,& BATS_COSZ,BATS_VIS_NEW,BATS_NIR_NEW,BATS_VIS_AGE,BATS_NIR_AGE,BATS_VIS_DIR,BATS_NIR_DIR,& RSURF_SNOW,RSURF_EXP @@ -9798,6 +9817,7 @@ subroutine read_mp_global_parameters() FSATMX_TABLE = -1.E36 Z0SNO_TABLE = -1.E36 SSI_TABLE = -1.E36 +SNOW_RET_FAC_TABLE = -1.E36 SWEMX_TABLE = -1.E36 TAU0_TABLE = -1.E36 GRAIN_GROWTH_TABLE = -1.E36 @@ -9834,6 +9854,7 @@ subroutine read_mp_global_parameters() FSATMX_TABLE = FSATMX Z0SNO_TABLE = Z0SNO SSI_TABLE = SSI +SNOW_RET_FAC_TABLE = SNOW_RET_FAC SWEMX_TABLE = SWEMX TAU0_TABLE = TAU0 GRAIN_GROWTH_TABLE = GRAIN_GROWTH diff --git a/run/MPTABLE.TBL b/run/MPTABLE.TBL index be26e9b248..ca5fac2fda 100644 --- a/run/MPTABLE.TBL +++ b/run/MPTABLE.TBL @@ -327,6 +327,7 @@ Z0SNO = 0.002 !snow surface roughness length (m) (0.002) SSI = 0.03 !liquid water holding capacity for snowpack (m3/m3) (0.03) + SNOW_RET_FAC = 5.e-5 !snowpack water release timescale factor (1/s) SWEMX = 1.00 !new snow mass to fully cover old snow (mm) !equivalent to 10mm depth (density = 100 kg/m3) TAU0 = 1.e6 !tau0 from Yang97 eqn. 10a From 575a45070249b153df2292b34e2d7d95539e2096 Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Thu, 17 Dec 2020 15:59:44 -0700 Subject: [PATCH 02/10] Modify CWPVT parameter values to be vegetation dependent in MPTABLE based on Goudriaan1977 --- run/MPTABLE.TBL | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/run/MPTABLE.TBL b/run/MPTABLE.TBL index ca5fac2fda..83e9f81507 100644 --- a/run/MPTABLE.TBL +++ b/run/MPTABLE.TBL @@ -76,8 +76,8 @@ TAUS_NIR=0.00, 0.380, 0.380, 0.380, 0.380, 0.380, 0.380, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.380, 0.001, 0.000, 0.380, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, XL = 0.000, -0.30, -0.30, -0.30, -0.30, -0.30, -0.30, 0.010, 0.250, 0.010, 0.250, 0.010, 0.010, 0.010, 0.250, 0.000, -0.30, 0.250, 0.000, -0.30, 0.250, 0.250, 0.250, 0.000, 0.250, 0.000, 0.000, -! CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, - CWPVT = 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, + ! make CWPVT vegetation dependent according to J. Goudriaan, Crop Micrometeorology: A Simulation Study (Simulation monographs), 1977). C. He, 12/17/2020 + CWPVT = 0.18, 1.67, 1.67, 1.67, 1.67, 0.5, 5.0, 1.0, 2.0, 1.0, 0.67, 0.18, 0.67, 0.18, 0.29, 0.18, 1.67, 0.67, 0.18, 1.67, 0.67, 1.00, 0.18, 0.18, 0.18, 0.18, 0.18, C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, @@ -220,8 +220,8 @@ TAUS_NIR=0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.380, 0.1905, 0.380, 0.000, 0.380, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, XL = 0.010, 0.010, 0.010, 0.250, 0.250, 0.010, 0.010, 0.010, 0.010, -0.30, -0.025, -0.30, 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, 0.250, 0.250, -! CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, - CWPVT = 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, +! make CWPVT vegetation dependent according to J. Goudriaan, Crop Micrometeorology: A Simulation Study (Simulation monographs), 1977). C. He, 12/17/2020 + CWPVT = 0.18, 0.67, 0.18, 0.67, 0.29, 1.0, 2.0, 1.3, 1.0, 5.0, 1.17, 1.67, 1.67, 1.67, 0.18, 0.18, 0.18, 0.67, 1.0, 0.18, C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, From fb13ed879efb475717a0c623bc6692a5fb86a3d2 Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Thu, 17 Dec 2020 21:04:30 -0700 Subject: [PATCH 03/10] Bring hard-coded snow emissivity of 1.0 to a global tunable MPTABLE parameter, and set to 0.95 to improve surface temperature simulation --- phys/module_sf_noahmpdrv.F | 1 + phys/module_sf_noahmplsm.F | 16 ++++++++++------ run/MPTABLE.TBL | 1 + 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/phys/module_sf_noahmpdrv.F b/phys/module_sf_noahmpdrv.F index fe75b7a5b6..833417f78d 100644 --- a/phys/module_sf_noahmpdrv.F +++ b/phys/module_sf_noahmpdrv.F @@ -1201,6 +1201,7 @@ SUBROUTINE TRANSFER_MP_PARAMETERS(VEGTYPE,SOILTYPE,SLOPETYPE,SOILCOLOR,CROPTYPE, parameters%Z0SNO = Z0SNO_TABLE parameters%SSI = SSI_TABLE parameters%SNOW_RET_FAC = SNOW_RET_FAC_TABLE + parameters%SNOW_EMIS = SNOW_EMIS_TABLE parameters%SWEMX = SWEMX_TABLE parameters%TAU0 = TAU0_TABLE parameters%GRAIN_GROWTH = GRAIN_GROWTH_TABLE diff --git a/phys/module_sf_noahmplsm.F b/phys/module_sf_noahmplsm.F index c295f8f918..f9de5773f3 100644 --- a/phys/module_sf_noahmplsm.F +++ b/phys/module_sf_noahmplsm.F @@ -292,6 +292,7 @@ MODULE MODULE_SF_NOAHMPLSM REAL :: Z0SNO !snow surface roughness length (m) (0.002) REAL :: SSI !liquid water holding capacity for snowpack (m3/m3) REAL :: SNOW_RET_FAC !snowpack water release timescale factor (1/s) + REAL :: SNOW_EMIS !snow emissivity REAL :: SWEMX !new snow mass to fully cover old snow (mm) REAL :: TAU0 !tau0 from Yang97 eqn. 10a REAL :: GRAIN_GROWTH !growth from vapor diffusion Yang97 eqn. 10b @@ -1901,9 +1902,9 @@ SUBROUTINE ENERGY (parameters,ICE ,VEGTYP ,IST ,NSNOW ,NSOIL , & !in EMV = 1. - EXP(-(ELAI+ESAI)/1.0) IF (ICE == 1) THEN - EMG = 0.98*(1.-FSNO) + 1.0*FSNO + EMG = 0.98*(1.-FSNO) + parameters%SNOW_EMIS*FSNO ! move hard-coded snow emissivity as a global parameter to MPTABLE ELSE - EMG = parameters%EG(IST)*(1.-FSNO) + 1.0*FSNO + EMG = parameters%EG(IST)*(1.-FSNO) + parameters%SNOW_EMIS*FSNO END IF ! soil moisture factor controlling stomatal resistance @@ -9287,7 +9288,8 @@ MODULE NOAHMP_TABLES REAL :: FSATMX_TABLE !maximum surface saturated fraction (global mean) REAL :: Z0SNO_TABLE !snow surface roughness length (m) (0.002) REAL :: SSI_TABLE !liquid water holding capacity for snowpack (m3/m3) (0.03) - REAL :: SNOW_RET_FAC_TABLE !snowpack water release timescale factor (1/s) + REAL :: SNOW_RET_FAC_TABLE !snowpack water release timescale factor (1/s) + REAL :: SNOW_EMIS_TABLE!snow emissivity REAL :: SWEMX_TABLE !new snow mass to fully cover old snow (mm) REAL :: TAU0_TABLE !tau0 from Yang97 eqn. 10a REAL :: GRAIN_GROWTH_TABLE !growth from vapor diffusion Yang97 eqn. 10b @@ -9799,12 +9801,12 @@ subroutine read_mp_global_parameters() integer :: ierr logical :: file_named - REAL :: CO2,O2,TIMEAN,FSATMX,Z0SNO,SSI,SNOW_RET_FAC,& + REAL :: CO2,O2,TIMEAN,FSATMX,Z0SNO,SSI,SNOW_RET_FAC,SNOW_EMIS,& SWEMX,TAU0,GRAIN_GROWTH,EXTRA_GROWTH,DIRT_SOOT,& BATS_COSZ,BATS_VIS_NEW,BATS_NIR_NEW,BATS_VIS_AGE,BATS_NIR_AGE,BATS_VIS_DIR,BATS_NIR_DIR,& RSURF_SNOW,RSURF_EXP - NAMELIST / noahmp_global_parameters / CO2,O2,TIMEAN,FSATMX,Z0SNO,SSI,SNOW_RET_FAC, & + NAMELIST / noahmp_global_parameters / CO2,O2,TIMEAN,FSATMX,Z0SNO,SSI,SNOW_RET_FAC,SNOW_EMIS,& SWEMX,TAU0,GRAIN_GROWTH,EXTRA_GROWTH,DIRT_SOOT,& BATS_COSZ,BATS_VIS_NEW,BATS_NIR_NEW,BATS_VIS_AGE,BATS_NIR_AGE,BATS_VIS_DIR,BATS_NIR_DIR,& RSURF_SNOW,RSURF_EXP @@ -9818,7 +9820,8 @@ subroutine read_mp_global_parameters() Z0SNO_TABLE = -1.E36 SSI_TABLE = -1.E36 SNOW_RET_FAC_TABLE = -1.E36 - SWEMX_TABLE = -1.E36 + SNOW_EMIS_TABLE = -1.E36 + SWEMX_TABLE = -1.E36 TAU0_TABLE = -1.E36 GRAIN_GROWTH_TABLE = -1.E36 EXTRA_GROWTH_TABLE = -1.E36 @@ -9855,6 +9858,7 @@ subroutine read_mp_global_parameters() Z0SNO_TABLE = Z0SNO SSI_TABLE = SSI SNOW_RET_FAC_TABLE = SNOW_RET_FAC + SNOW_EMIS_TABLE = SNOW_EMIS SWEMX_TABLE = SWEMX TAU0_TABLE = TAU0 GRAIN_GROWTH_TABLE = GRAIN_GROWTH diff --git a/run/MPTABLE.TBL b/run/MPTABLE.TBL index 83e9f81507..f1b87df3e1 100644 --- a/run/MPTABLE.TBL +++ b/run/MPTABLE.TBL @@ -328,6 +328,7 @@ Z0SNO = 0.002 !snow surface roughness length (m) (0.002) SSI = 0.03 !liquid water holding capacity for snowpack (m3/m3) (0.03) SNOW_RET_FAC = 5.e-5 !snowpack water release timescale factor (1/s) + SNOW_EMIS = 0.95 !snow emissivity (bring from hard-coded value of 1.0 to here) SWEMX = 1.00 !new snow mass to fully cover old snow (mm) !equivalent to 10mm depth (density = 100 kg/m3) TAU0 = 1.e6 !tau0 from Yang97 eqn. 10a From d8831310f7effcd18ba2134bc89aaea0e661069d Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Thu, 17 Dec 2020 22:04:38 -0700 Subject: [PATCH 04/10] Bring hard-coded 2.5*z0 (z0=0.002m) constant in snow cover formulation to vegetation-dependent tunable SCFFAC parameter in MPTABLE --- phys/module_sf_noahmpdrv.F | 1 + phys/module_sf_noahmplsm.F | 13 +++++++++---- run/MPTABLE.TBL | 4 ++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/phys/module_sf_noahmpdrv.F b/phys/module_sf_noahmpdrv.F index 833417f78d..91efa547e9 100644 --- a/phys/module_sf_noahmpdrv.F +++ b/phys/module_sf_noahmpdrv.F @@ -1086,6 +1086,7 @@ SUBROUTINE TRANSFER_MP_PARAMETERS(VEGTYPE,SOILTYPE,SLOPETYPE,SOILCOLOR,CROPTYPE, parameters%DEN = DEN_TABLE(VEGTYPE) !tree density (no. of trunks per m2) parameters%RC = RC_TABLE(VEGTYPE) !tree crown radius (m) parameters%MFSNO = MFSNO_TABLE(VEGTYPE) !snowmelt m parameter () + parameters%SCFFAC = SCFFAC_TABLE(VEGTYPE) !snow cover factor (originally hard-coded 2.5*z0 in SCF formulation) parameters%SAIM = SAIM_TABLE(VEGTYPE,:) !monthly stem area index, one-sided parameters%LAIM = LAIM_TABLE(VEGTYPE,:) !monthly leaf area index, one-sided parameters%SLA = SLA_TABLE(VEGTYPE) !single-side leaf area per Kg [m2/kg] diff --git a/phys/module_sf_noahmplsm.F b/phys/module_sf_noahmplsm.F index f9de5773f3..504fafefea 100644 --- a/phys/module_sf_noahmplsm.F +++ b/phys/module_sf_noahmplsm.F @@ -219,6 +219,7 @@ MODULE MODULE_SF_NOAHMPLSM REAL :: DEN !tree density (no. of trunks per m2) REAL :: RC !tree crown radius (m) REAL :: MFSNO !snowmelt m parameter () + REAL :: SCFFAC !snow cover factor (originally hard-coded 2.5*z0 in SCF formulation) REAL :: SAIM(12) !monthly stem area index, one-sided REAL :: LAIM(12) !monthly leaf area index, one-sided REAL :: SLA !single-side leaf area per Kg [m2/kg] @@ -1833,7 +1834,8 @@ SUBROUTINE ENERGY (parameters,ICE ,VEGTYP ,IST ,NSNOW ,NSOIL , & !in IF(SNOWH.GT.0.) THEN BDSNO = SNEQV / SNOWH FMELT = (BDSNO/100.)**parameters%MFSNO - FSNO = TANH( SNOWH /(2.5* Z0 * FMELT)) + !FSNO = TANH( SNOWH /(2.5* Z0 * FMELT)) + FSNO = TANH( SNOWH /(parameters%SCFFAC * FMELT)) ! C.He: bring hard-coded 2.5*z0 to MPTABLE tunable parameter SCFFAC ENDIF ! ground roughness length @@ -9197,6 +9199,7 @@ MODULE NOAHMP_TABLES REAL :: DEN_TABLE(MVT) !tree density (no. of trunks per m2) REAL :: RC_TABLE(MVT) !tree crown radius (m) REAL :: MFSNO_TABLE(MVT) !snowmelt curve parameter () + REAL :: SCFFAC_TABLE(MVT) !snow cover factor (replace original hard-coded 2.5*z0 in SCF formulation) REAL :: SAIM_TABLE(MVT,12) !monthly stem area index, one-sided REAL :: LAIM_TABLE(MVT,12) !monthly leaf area index, one-sided REAL :: SLA_TABLE(MVT) !single-side leaf area per Kg [m2/kg] @@ -9433,7 +9436,7 @@ subroutine read_mp_veg_parameters(DATASET_IDENTIFIER) LAI_JUL,LAI_AUG,LAI_SEP,LAI_OCT,LAI_NOV,LAI_DEC REAL, DIMENSION(MVT) :: RHOL_VIS, RHOL_NIR, RHOS_VIS, RHOS_NIR, & TAUL_VIS, TAUL_NIR, TAUS_VIS, TAUS_NIR - REAL, DIMENSION(MVT) :: CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, MFSNO, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, & + REAL, DIMENSION(MVT) :: CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, MFSNO, SCFFAC, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, & AVCMX, AQE, LTOVRC, DILEFC, DILEFW, RMF25 , SLA , FRAGR , TMIN , VCMX25, TDLEF , & BP, MP, QE25, RMS25, RMR25, ARM, FOLNMX, WDPOOL, WRRAT, MRP, NROOT, RGL, RS, HS, TOPT, RSMAX, & SLAREA, EPS1, EPS2, EPS3, EPS4, EPS5 @@ -9441,7 +9444,7 @@ subroutine read_mp_veg_parameters(DATASET_IDENTIFIER) NAMELIST / noahmp_usgs_veg_categories / VEG_DATASET_DESCRIPTION, NVEG NAMELIST / noahmp_usgs_parameters / ISURBAN, ISWATER, ISBARREN, ISICE, ISCROP, EBLFOREST, NATURAL, & LOW_DENSITY_RESIDENTIAL, HIGH_DENSITY_RESIDENTIAL, HIGH_INTENSITY_INDUSTRIAL, & - CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, MFSNO, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, AVCMX, AQE, & + CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, MFSNO, SCFFAC, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, AVCMX, AQE, & LTOVRC, DILEFC, DILEFW, RMF25 , SLA , FRAGR , TMIN , VCMX25, TDLEF , BP, MP, QE25, RMS25, RMR25, ARM, & FOLNMX, WDPOOL, WRRAT, MRP, NROOT, RGL, RS, HS, TOPT, RSMAX, & SAI_JAN, SAI_FEB, SAI_MAR, SAI_APR, SAI_MAY, SAI_JUN,SAI_JUL,SAI_AUG,SAI_SEP,SAI_OCT,SAI_NOV,SAI_DEC, & @@ -9451,7 +9454,7 @@ subroutine read_mp_veg_parameters(DATASET_IDENTIFIER) NAMELIST / noahmp_modis_veg_categories / VEG_DATASET_DESCRIPTION, NVEG NAMELIST / noahmp_modis_parameters / ISURBAN, ISWATER, ISBARREN, ISICE, ISCROP, EBLFOREST, NATURAL, & LOW_DENSITY_RESIDENTIAL, HIGH_DENSITY_RESIDENTIAL, HIGH_INTENSITY_INDUSTRIAL, & - CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, MFSNO, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, AVCMX, AQE, & + CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, MFSNO, SCFFAC, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, AVCMX, AQE, & LTOVRC, DILEFC, DILEFW, RMF25 , SLA , FRAGR , TMIN , VCMX25, TDLEF , BP, MP, QE25, RMS25, RMR25, ARM, & FOLNMX, WDPOOL, WRRAT, MRP, NROOT, RGL, RS, HS, TOPT, RSMAX, & SAI_JAN, SAI_FEB, SAI_MAR, SAI_APR, SAI_MAY, SAI_JUN,SAI_JUL,SAI_AUG,SAI_SEP,SAI_OCT,SAI_NOV,SAI_DEC, & @@ -9467,6 +9470,7 @@ subroutine read_mp_veg_parameters(DATASET_IDENTIFIER) DEN_TABLE = -1.E36 RC_TABLE = -1.E36 MFSNO_TABLE = -1.E36 + SCFFAC_TABLE = -1.E36 RHOL_TABLE = -1.E36 RHOS_TABLE = -1.E36 TAUL_TABLE = -1.E36 @@ -9562,6 +9566,7 @@ subroutine read_mp_veg_parameters(DATASET_IDENTIFIER) DEN_TABLE(1:NVEG) = DEN(1:NVEG) RC_TABLE(1:NVEG) = RC(1:NVEG) MFSNO_TABLE(1:NVEG) = MFSNO(1:NVEG) + SCFFAC_TABLE(1:NVEG) = SCFFAC(1:NVEG) XL_TABLE(1:NVEG) = XL(1:NVEG) CWPVT_TABLE(1:NVEG) = CWPVT(1:NVEG) C3PSN_TABLE(1:NVEG) = C3PSN(1:NVEG) diff --git a/run/MPTABLE.TBL b/run/MPTABLE.TBL index f1b87df3e1..8be569f663 100644 --- a/run/MPTABLE.TBL +++ b/run/MPTABLE.TBL @@ -54,6 +54,8 @@ DEN = 0.01, 25.0, 25.0, 25.0, 25.0, 25.0, 100., 10.0, 10.0, 0.02, 0.10, 0.28, 0.02, 0.28, 0.10, 0.01, 10.0, 0.10, 0.01, 1.00, 1.00, 1.00, 1.00, 0.00, 0.01, 0.01, 0.01, RC = 1.00, 0.08, 0.08, 0.08, 0.08, 0.08, 0.03, 0.12, 0.12, 3.00, 1.40, 1.20, 3.60, 1.20, 1.40, 0.01, 0.10, 1.40, 0.01, 0.30, 0.30, 0.30, 0.30, 0.00, 0.01, 0.01, 0.01, MFSNO = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, +! C. He 12/17/2020: snow cover factor (m) in SCF formulation to replace the original constant 2.5*z0,z0=0.002m + SCFFAC= 0.021, 0.007, 0.007, 0.007, 0.013, 0.013, 0.010, 0.009, 0.008, 0.010, 0.005, 0.005, 0.005, 0.005, 0.005, 0.015, 0.010, 0.010, 0.008, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, ! Row 1: Vis ! Row 2: Near IR @@ -198,6 +200,8 @@ DEN = 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, 10.0, 10.0, 0.02, 100., 5.05, 25.0, 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, 1.00, 1.00, RC = 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, 0.30, 0.30, MFSNO = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, +! C. He 12/17/2020: snow cover factor (m) in SCF formulation to replace the original constant 2.5*z0,z0=0.002m + SCFFAC = 0.005, 0.005, 0.005, 0.005, 0.005, 0.008, 0.008, 0.010, 0.010, 0.010, 0.010, 0.007, 0.021, 0.013, 0.015, 0.008, 0.015, 0.015, 0.015, 0.015, ! Row 1: Vis ! Row 2: Near IR From de1e03587e4339cbcc5177c508fba5485fa4029f Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Thu, 17 Dec 2020 22:22:00 -0700 Subject: [PATCH 05/10] Update MFSNO with optimized vegetation-dependent values based on SNOTEL SWE & MODIS SCF & surface albedo comparison --- phys/module_sf_noahmpdrv.F | 2 +- phys/module_sf_noahmplsm.F | 4 ++-- run/MPTABLE.TBL | 12 ++++++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/phys/module_sf_noahmpdrv.F b/phys/module_sf_noahmpdrv.F index 91efa547e9..96901f3dc6 100644 --- a/phys/module_sf_noahmpdrv.F +++ b/phys/module_sf_noahmpdrv.F @@ -1086,7 +1086,7 @@ SUBROUTINE TRANSFER_MP_PARAMETERS(VEGTYPE,SOILTYPE,SLOPETYPE,SOILCOLOR,CROPTYPE, parameters%DEN = DEN_TABLE(VEGTYPE) !tree density (no. of trunks per m2) parameters%RC = RC_TABLE(VEGTYPE) !tree crown radius (m) parameters%MFSNO = MFSNO_TABLE(VEGTYPE) !snowmelt m parameter () - parameters%SCFFAC = SCFFAC_TABLE(VEGTYPE) !snow cover factor (originally hard-coded 2.5*z0 in SCF formulation) + parameters%SCFFAC = SCFFAC_TABLE(VEGTYPE) !snow cover factor (m) (originally hard-coded 2.5*z0 in SCF formulation) parameters%SAIM = SAIM_TABLE(VEGTYPE,:) !monthly stem area index, one-sided parameters%LAIM = LAIM_TABLE(VEGTYPE,:) !monthly leaf area index, one-sided parameters%SLA = SLA_TABLE(VEGTYPE) !single-side leaf area per Kg [m2/kg] diff --git a/phys/module_sf_noahmplsm.F b/phys/module_sf_noahmplsm.F index 504fafefea..1b106466d2 100644 --- a/phys/module_sf_noahmplsm.F +++ b/phys/module_sf_noahmplsm.F @@ -219,7 +219,7 @@ MODULE MODULE_SF_NOAHMPLSM REAL :: DEN !tree density (no. of trunks per m2) REAL :: RC !tree crown radius (m) REAL :: MFSNO !snowmelt m parameter () - REAL :: SCFFAC !snow cover factor (originally hard-coded 2.5*z0 in SCF formulation) + REAL :: SCFFAC !snow cover factor (m) (originally hard-coded 2.5*z0 in SCF formulation) REAL :: SAIM(12) !monthly stem area index, one-sided REAL :: LAIM(12) !monthly leaf area index, one-sided REAL :: SLA !single-side leaf area per Kg [m2/kg] @@ -9199,7 +9199,7 @@ MODULE NOAHMP_TABLES REAL :: DEN_TABLE(MVT) !tree density (no. of trunks per m2) REAL :: RC_TABLE(MVT) !tree crown radius (m) REAL :: MFSNO_TABLE(MVT) !snowmelt curve parameter () - REAL :: SCFFAC_TABLE(MVT) !snow cover factor (replace original hard-coded 2.5*z0 in SCF formulation) + REAL :: SCFFAC_TABLE(MVT) !snow cover factor (m) (replace original hard-coded 2.5*z0 in SCF formulation) REAL :: SAIM_TABLE(MVT,12) !monthly stem area index, one-sided REAL :: LAIM_TABLE(MVT,12) !monthly leaf area index, one-sided REAL :: SLA_TABLE(MVT) !single-side leaf area per Kg [m2/kg] diff --git a/run/MPTABLE.TBL b/run/MPTABLE.TBL index 8be569f663..0c2f7f32f2 100644 --- a/run/MPTABLE.TBL +++ b/run/MPTABLE.TBL @@ -53,8 +53,10 @@ HVB = 1.00, 0.10, 0.10, 0.10, 0.10, 0.15, 0.05, 0.10, 0.10, 0.10, 11.5, 7.00, 8.00, 8.50, 10.0, 0.00, 0.05, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, DEN = 0.01, 25.0, 25.0, 25.0, 25.0, 25.0, 100., 10.0, 10.0, 0.02, 0.10, 0.28, 0.02, 0.28, 0.10, 0.01, 10.0, 0.10, 0.01, 1.00, 1.00, 1.00, 1.00, 0.00, 0.01, 0.01, 0.01, RC = 1.00, 0.08, 0.08, 0.08, 0.08, 0.08, 0.03, 0.12, 0.12, 3.00, 1.40, 1.20, 3.60, 1.20, 1.40, 0.01, 0.10, 1.40, 0.01, 0.30, 0.30, 0.30, 0.30, 0.00, 0.01, 0.01, 0.01, - MFSNO = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, -! C. He 12/17/2020: snow cover factor (m) in SCF formulation to replace the original constant 2.5*z0,z0=0.002m +!MFSNO = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, +! C. He 12/17/2020: optimized MFSNO values dependent on land type based on evaluation with SNOTEL SWE and MODIS SCF, surface albedo + MFSNO = 4.00, 3.00, 3.00, 3.00, 4.00, 4.00, 2.00, 2.00, 2.00, 2.00, 1.00, 1.00, 1.00, 1.00, 1.00, 3.00, 3.00, 3.00, 3.00, 3.50, 3.50, 3.50, 3.50, 2.50, 3.50, 3.50, 3.50, +! C. He 12/17/2020: optimized snow cover factor (m) in SCF formulation to replace original constant 2.5*z0,z0=0.002m, based on evaluation with SNOTEL SWE and MODIS SCF, surface albedo SCFFAC= 0.021, 0.007, 0.007, 0.007, 0.013, 0.013, 0.010, 0.009, 0.008, 0.010, 0.005, 0.005, 0.005, 0.005, 0.005, 0.015, 0.010, 0.010, 0.008, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, ! Row 1: Vis @@ -199,8 +201,10 @@ HVB = 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, 0.10, 0.10, 0.10, 0.05, 0.10, 0.10, 1.00, 0.10, 0.00, 0.00, 0.00, 0.30, 0.20, 0.10, DEN = 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, 10.0, 10.0, 0.02, 100., 5.05, 25.0, 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, 1.00, 1.00, RC = 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, 0.30, 0.30, - MFSNO = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, -! C. He 12/17/2020: snow cover factor (m) in SCF formulation to replace the original constant 2.5*z0,z0=0.002m +!MFSNO = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, +! C. He 12/17/2020: optimized MFSNO values dependent on land type based on evaluation with SNOTEL SWE and MODIS SCF, surface albedo + MFSNO = 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, 2.00, 2.00, 2.00, 2.00, 3.00, 3.00, 4.00, 4.00, 2.50, 3.00, 3.00, 3.50, 3.50, 3.50, +! C. He 12/17/2020: optimized snow cover factor (m) in SCF formulation to replace original constant 2.5*z0,z0=0.002m, based on evaluation with SNOTEL SWE and MODIS SCF, surface albedo SCFFAC = 0.005, 0.005, 0.005, 0.005, 0.005, 0.008, 0.008, 0.010, 0.010, 0.010, 0.010, 0.007, 0.021, 0.013, 0.015, 0.008, 0.015, 0.015, 0.015, 0.015, ! Row 1: Vis From 7f799a6e900eca622e85bfdf013cb099f10ee14e Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Fri, 18 Dec 2020 16:17:16 -0700 Subject: [PATCH 06/10] Add wet-bulb temperature snow-rain partitioning scheme for OPT_SNF=5based on Wang et al. 2019 GRL --- phys/module_sf_noahmplsm.F | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/phys/module_sf_noahmplsm.F b/phys/module_sf_noahmplsm.F index 1b106466d2..1da33356bf 100644 --- a/phys/module_sf_noahmplsm.F +++ b/phys/module_sf_noahmplsm.F @@ -142,7 +142,8 @@ MODULE MODULE_SF_NOAHMPLSM ! 2 -> BATS: when SFCTMP SFCTMP < TFRZ ! 4 -> Use WRF microphysics output - + ! 5 -> Use wetbulb temperature (Wang et al., 2019 GRL) C.He, 12/18/2020 + INTEGER :: OPT_TBOT ! options for lower boundary condition of soil temperature ! 1 -> zero heat flux from bottom (ZBOT and TBOT not used) ! **2 -> TBOT at ZBOT (8m) read from a file (original Noah) @@ -928,6 +929,15 @@ SUBROUTINE ATM (parameters,SFCPRS ,SFCTMP ,Q2 , REAL :: PRCP_FROZEN !total frozen precipitation [mm/s] ! MB/AN : v3.7 REAL, PARAMETER :: RHO_GRPL = 500.0 ! graupel bulk density [kg/m3] ! MB/AN : v3.7 REAL, PARAMETER :: RHO_HAIL = 917.0 ! hail bulk density [kg/m3] ! MB/AN : v3.7 +! wet-bulb scheme Wang et al., 2019 GRL, C.He, 12/18/2020 + REAL :: ESATAIR ! saturated vapor pressure of air + REAL :: LATHEA ! latent heat of vapor/sublimation + REAL :: GAMMA_b ! (cp*p)/(eps*L) + REAL :: TDC ! air temperature [C] + REAL :: TWET ! wetbulb temperature + INTEGER :: ITER + INTEGER, PARAMETER :: NITER = 10 ! iterations for Twet calculation + ! -------------------------------------------------------------------------------------------------- !jref: seems like PAIR should be P1000mb?? @@ -1017,6 +1027,23 @@ SUBROUTINE ATM (parameters,SFCPRS ,SFCTMP ,Q2 , ENDIF +! wet-bulb scheme (Wang et al., 2019 GRL), C.He, 12/18/2020 + IF(OPT_SNF == 5) THEN + TDC = MIN( 50., MAX(-50.,(SFCTMP-TFRZ)) ) !Kelvin to degree Celsius with limit -50 to +50 + IF (SFCTMP > TFRZ) THEN + LATHEA = HVAP + ELSE + LATHEA = HSUB + END IF + GAMMA_b = CPAIR*SFCPRS/(0.622*LATHEA) + TWET = TDC - 5. ! first guess wetbulb temperature + DO ITER = 1, NITER + ESATAIR = 610.8 * EXP((17.27*TWET)/(237.3+TWET)) + TWET = TWET - (ESATAIR-EAIR)/ GAMMA_b ! Wang et al., 2019 GRL Eq.2 + END DO + FPICE = 1.0/(1.0+6.99E-5*exp(2.0*(TWET+3.97))) ! Wang et al., 2019 GRL Eq. 1 + ENDIF + RAIN = PRCP * (1.-FPICE) SNOW = PRCP * FPICE From 004eeda74e094d3f74f37851d7bab760e2c8e915 Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Wed, 23 Dec 2020 09:11:08 -0700 Subject: [PATCH 07/10] Fix RB issue of value range in RAGRB for leaf resistence, now using more realistic range (5~50) --- phys/module_sf_noahmplsm.F | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/phys/module_sf_noahmplsm.F b/phys/module_sf_noahmplsm.F index 1da33356bf..0daae090e4 100644 --- a/phys/module_sf_noahmplsm.F +++ b/phys/module_sf_noahmplsm.F @@ -4364,7 +4364,8 @@ SUBROUTINE RAGRB(parameters,ITER ,VAI ,RHOAIR ,HG ,TAH , & !in TMPRB = CWPC*50. / (1. - EXP(-CWPC/2.)) RB = TMPRB * SQRT(parameters%DLEAF/UC) - RB = MAX(RB,100.0) + RB = MIN(MAX(RB, 5.0),50.0) ! limit RB to 5~50 +! RB = MAX(RB,100.0) ! typically RB<50,so this leads to constant RB of 100 ! RB = 200 END SUBROUTINE RAGRB From 8ff1bd33ab4c36f6d5d8acfc6f675c54aa52f2de Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Wed, 23 Dec 2020 09:44:09 -0700 Subject: [PATCH 08/10] Some formatting changes --- phys/module_sf_noahmplsm.F | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phys/module_sf_noahmplsm.F b/phys/module_sf_noahmplsm.F index 0daae090e4..6032dfacc7 100644 --- a/phys/module_sf_noahmplsm.F +++ b/phys/module_sf_noahmplsm.F @@ -9168,7 +9168,7 @@ subroutine noahmp_options(idveg ,iopt_crs ,iopt_btr ,iopt_run ,iopt_sfc ! 1 -> semi-implicit; 2 -> full implicit (original Noah) INTEGER, INTENT(IN) :: iopt_rsf !surface resistance (1->Sakaguchi/Zeng; 2->Seller; 3->mod Sellers; 4->1+snow) INTEGER, INTENT(IN) :: iopt_soil !soil parameters set-up option - INTEGER, INTENT(IN) :: iopt_pedo !pedo-transfer function + INTEGER, INTENT(IN) :: iopt_pedo !pedo-transfer function (1->Saxton and Rawls) INTEGER, INTENT(IN) :: iopt_crop !crop model option (0->none; 1->Liu et al.; 2->Gecros) ! ------------------------------------------------------------------------------------------------- From 9b09e339aa4b2f2c0fabff4a05f7ee65385536a2 Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Mon, 15 Feb 2021 10:59:54 -0700 Subject: [PATCH 09/10] Bug Fix for the maximum SWE threshold in noahmpdrv file to be consistent with noahmplsm file --- phys/module_sf_noahmpdrv.F | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/phys/module_sf_noahmpdrv.F b/phys/module_sf_noahmpdrv.F index 96901f3dc6..36a2d47fdb 100644 --- a/phys/module_sf_noahmpdrv.F +++ b/phys/module_sf_noahmpdrv.F @@ -1562,7 +1562,7 @@ SUBROUTINE NOAHMP_INIT ( MMINLU, SNOW , SNOWH , CANWAT , ISLTYP , IVGTYP, XLAT ENDIF - ! Check if snow/snowh are consistent and cap SWE at 2000mm; + ! Check if snow/snowh are consistent and cap SWE at 5000mm; ! the Noah-MP code does it internally but if we don't do it here, problems ensue DO J = jts,jtf DO I = its,itf @@ -1571,9 +1571,9 @@ SUBROUTINE NOAHMP_INIT ( MMINLU, SNOW , SNOWH , CANWAT , ISLTYP , IVGTYP, XLAT ,i,j,snow(i,j),snowh(i,j) CALL wrf_message(err_message) ENDIF - IF ( SNOW( i,j ) > 2000. ) THEN - SNOWH(I,J) = SNOWH(I,J) * 2000. / SNOW(I,J) ! SNOW in mm and SNOWH in m - SNOW (I,J) = 2000. ! cap SNOW at 2000, maintain density + IF ( SNOW( i,j ) > 5000. ) THEN + SNOWH(I,J) = SNOWH(I,J) * 5000. / SNOW(I,J) ! SNOW in mm and SNOWH in m + SNOW (I,J) = 5000. ! cap SNOW at 5000, maintain density ENDIF ENDDO ENDDO From 143e43cf0fe40843de1a6f8f4fca1ec1e821b23c Mon Sep 17 00:00:00 2001 From: cenlinhe Date: Mon, 22 Feb 2021 13:59:27 -0700 Subject: [PATCH 10/10] Bug fix for SCFFAC values in MPTABLE & some format changes --- phys/module_sf_noahmplsm.F | 6 ++---- run/MPTABLE.TBL | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/phys/module_sf_noahmplsm.F b/phys/module_sf_noahmplsm.F index 6032dfacc7..0108871193 100644 --- a/phys/module_sf_noahmplsm.F +++ b/phys/module_sf_noahmplsm.F @@ -142,7 +142,7 @@ MODULE MODULE_SF_NOAHMPLSM ! 2 -> BATS: when SFCTMP SFCTMP < TFRZ ! 4 -> Use WRF microphysics output - ! 5 -> Use wetbulb temperature (Wang et al., 2019 GRL) C.He, 12/18/2020 + ! 5 -> Use wetbulb temperature (Wang et al., 2019 GRL) C.He, 12/18/2020 INTEGER :: OPT_TBOT ! options for lower boundary condition of soil temperature ! 1 -> zero heat flux from bottom (ZBOT and TBOT not used) @@ -4364,9 +4364,7 @@ SUBROUTINE RAGRB(parameters,ITER ,VAI ,RHOAIR ,HG ,TAH , & !in TMPRB = CWPC*50. / (1. - EXP(-CWPC/2.)) RB = TMPRB * SQRT(parameters%DLEAF/UC) - RB = MIN(MAX(RB, 5.0),50.0) ! limit RB to 5~50 -! RB = MAX(RB,100.0) ! typically RB<50,so this leads to constant RB of 100 -! RB = 200 + RB = MIN(MAX(RB, 5.0),50.0) ! limit RB to 5-50, typically RB<50 END SUBROUTINE RAGRB diff --git a/run/MPTABLE.TBL b/run/MPTABLE.TBL index 0c2f7f32f2..72fdb0087f 100644 --- a/run/MPTABLE.TBL +++ b/run/MPTABLE.TBL @@ -57,7 +57,7 @@ ! C. He 12/17/2020: optimized MFSNO values dependent on land type based on evaluation with SNOTEL SWE and MODIS SCF, surface albedo MFSNO = 4.00, 3.00, 3.00, 3.00, 4.00, 4.00, 2.00, 2.00, 2.00, 2.00, 1.00, 1.00, 1.00, 1.00, 1.00, 3.00, 3.00, 3.00, 3.00, 3.50, 3.50, 3.50, 3.50, 2.50, 3.50, 3.50, 3.50, ! C. He 12/17/2020: optimized snow cover factor (m) in SCF formulation to replace original constant 2.5*z0,z0=0.002m, based on evaluation with SNOTEL SWE and MODIS SCF, surface albedo - SCFFAC= 0.021, 0.007, 0.007, 0.007, 0.013, 0.013, 0.010, 0.009, 0.008, 0.010, 0.005, 0.005, 0.005, 0.005, 0.005, 0.015, 0.010, 0.010, 0.008, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, + SCFFAC= 0.042, 0.014, 0.014, 0.014, 0.026, 0.026, 0.020, 0.018, 0.016, 0.020, 0.008, 0.008, 0.008, 0.008, 0.008, 0.030, 0.020, 0.020, 0.016, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, ! Row 1: Vis ! Row 2: Near IR @@ -205,7 +205,7 @@ ! C. He 12/17/2020: optimized MFSNO values dependent on land type based on evaluation with SNOTEL SWE and MODIS SCF, surface albedo MFSNO = 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, 2.00, 2.00, 2.00, 2.00, 3.00, 3.00, 4.00, 4.00, 2.50, 3.00, 3.00, 3.50, 3.50, 3.50, ! C. He 12/17/2020: optimized snow cover factor (m) in SCF formulation to replace original constant 2.5*z0,z0=0.002m, based on evaluation with SNOTEL SWE and MODIS SCF, surface albedo - SCFFAC = 0.005, 0.005, 0.005, 0.005, 0.005, 0.008, 0.008, 0.010, 0.010, 0.010, 0.010, 0.007, 0.021, 0.013, 0.015, 0.008, 0.015, 0.015, 0.015, 0.015, + SCFFAC = 0.008, 0.008, 0.008, 0.008, 0.008, 0.016, 0.016, 0.020, 0.020, 0.020, 0.020, 0.014, 0.042, 0.026, 0.030, 0.016, 0.030, 0.030, 0.030, 0.030, ! Row 1: Vis ! Row 2: Near IR