diff --git a/cime_config/tests.py b/cime_config/tests.py index dddbae8bfff1..75187af0104f 100644 --- a/cime_config/tests.py +++ b/cime_config/tests.py @@ -94,7 +94,8 @@ "SMS.r05_r05.IELM.elm-topounit", "ERS.ELM_USRDAT.I1850ELM.elm-usrdat", "ERS.f09_f09.IELM.elm-lnd_rof_2way", - "ERS.r05_r05.IELM.elm-V2_ELM_MOSART_features" + "ERS.r05_r05.IELM.elm-V2_ELM_MOSART_features", + "ERS.ELM_USRDAT.IELM.elm-surface_water_dynamics" ) }, diff --git a/components/elm/bld/ELMBuildNamelist.pm b/components/elm/bld/ELMBuildNamelist.pm index 3a453214343a..d93295ef9b03 100755 --- a/components/elm/bld/ELMBuildNamelist.pm +++ b/components/elm/bld/ELMBuildNamelist.pm @@ -2385,6 +2385,7 @@ sub setup_logic_demand { $settings{'use_snicar_ad'} = $nl_flags->{'use_snicar_ad'}; $settings{'use_century_decomp'} = $nl_flags->{'use_century_decomp'}; $settings{'use_crop'} = $nl_flags->{'use_crop'}; + $settings{'use_modified_infil'} = $nl_flags->{'use_modified_infil'}; my $demand = $nl->get_value('clm_demand'); if (defined($demand)) { diff --git a/components/elm/bld/namelist_files/namelist_definition.xml b/components/elm/bld/namelist_files/namelist_definition.xml index fc563e9a3dd3..afea91ca3d95 100644 --- a/components/elm/bld/namelist_files/namelist_definition.xml +++ b/components/elm/bld/namelist_files/namelist_definition.xml @@ -1993,6 +1993,15 @@ Toggle to turn on the soil erosion model. Toggle to turn on the soil erosion and OM pools feedback. + + + + + +Toggle to use modifed infiltration scheme in h2osfc . + + diff --git a/components/elm/cime_config/testdefs/testmods_dirs/elm/surface_water_dynamics/shell_commands b/components/elm/cime_config/testdefs/testmods_dirs/elm/surface_water_dynamics/shell_commands new file mode 100644 index 000000000000..69e3e987baa1 --- /dev/null +++ b/components/elm/cime_config/testdefs/testmods_dirs/elm/surface_water_dynamics/shell_commands @@ -0,0 +1,10 @@ +./xmlchange DATM_MODE=CLMMOSARTTEST + +./xmlchange LND_DOMAIN_FILE=domain.lnd.nldas2_0224x0464_c110415.nc +./xmlchange ATM_DOMAIN_FILE=domain.lnd.nldas2_0224x0464_c110415.nc +./xmlchange LND_DOMAIN_PATH="\$DIN_LOC_ROOT/share/domains/domain.clm" +./xmlchange ATM_DOMAIN_PATH="\$DIN_LOC_ROOT/share/domains/domain.clm" + +./xmlchange -file env_run.xml -id DATM_CLMNCEP_YR_END -val 2000 +./xmlchange -file env_run.xml -id DATM_CLMNCEP_YR_START -val 2000 +./xmlchange -file env_run.xml -id DATM_CLMNCEP_YR_ALIGN -val 1 \ No newline at end of file diff --git a/components/elm/cime_config/testdefs/testmods_dirs/elm/surface_water_dynamics/user_nl_elm b/components/elm/cime_config/testdefs/testmods_dirs/elm/surface_water_dynamics/user_nl_elm new file mode 100644 index 000000000000..83b27130904d --- /dev/null +++ b/components/elm/cime_config/testdefs/testmods_dirs/elm/surface_water_dynamics/user_nl_elm @@ -0,0 +1,2 @@ +fsurdat = '$DIN_LOC_ROOT/lnd/clm2/surfdata_map/surfdata_nldas2_simyr2000_c181207_surfacewater.nc' +use_modified_infil = .true. diff --git a/components/elm/src/biogeophys/CanopyHydrologyMod.F90 b/components/elm/src/biogeophys/CanopyHydrologyMod.F90 index a65f90192414..7726d03105e6 100755 --- a/components/elm/src/biogeophys/CanopyHydrologyMod.F90 +++ b/components/elm/src/biogeophys/CanopyHydrologyMod.F90 @@ -809,7 +809,8 @@ subroutine FracH2OSfc(bounds, num_h2osfc, filter_h2osfc, & h2osfc => col_ws%h2osfc , & ! Output: [real(r8) (:) ] surface water (mm) frac_sno => col_ws%frac_sno , & ! Output: [real(r8) (:) ] fraction of ground covered by snow (0 to 1) frac_sno_eff => col_ws%frac_sno_eff , & ! Output: [real(r8) (:) ] eff. fraction of ground covered by snow (0 to 1) - frac_h2osfc => col_ws%frac_h2osfc & ! Output: [real(r8) (:) ] col fractional area with surface water greater than zero + frac_h2osfc => col_ws%frac_h2osfc , & ! Output: [real(r8) (:) ] col fractional area with surface water greater than zero + frac_h2osfc_act => col_ws%frac_h2osfc_act & ! Output: [real(r8) (:) ] col fractional area with surface water greater than zero ) ! arbitrary lower limit on h2osfc for safer numerics... @@ -848,6 +849,8 @@ subroutine FracH2OSfc(bounds, num_h2osfc, filter_h2osfc, & qflx_h2osfc2topsoi(c) = h2osfc(c)/dtime h2osfc(c)=0._r8 endif + + frac_h2osfc_act(c) = frac_h2osfc(c) if (.not. present(no_update)) then @@ -869,7 +872,8 @@ subroutine FracH2OSfc(bounds, num_h2osfc, filter_h2osfc, & else !if landunit not istsoil/istcrop, set frac_h2osfc to zero frac_h2osfc(c) = 0._r8 - + frac_h2osfc_act(c) = 0._r8 + endif end do diff --git a/components/elm/src/biogeophys/SoilHydrologyMod.F90 b/components/elm/src/biogeophys/SoilHydrologyMod.F90 index e0542be4080b..959fb2b69687 100644 --- a/components/elm/src/biogeophys/SoilHydrologyMod.F90 +++ b/components/elm/src/biogeophys/SoilHydrologyMod.F90 @@ -9,6 +9,7 @@ module SoilHydrologyMod use decompMod , only : bounds_type use elm_varctl , only : iulog, use_vichydro use elm_varctl , only : use_lnd_rof_two_way, lnd_rof_coupling_nstep + use elm_varctl , only : use_modified_infil use elm_varcon , only : e_ice, denh2o, denice, rpi use EnergyFluxType , only : energyflux_type use SoilHydrologyType , only : soilhydrology_type @@ -111,6 +112,7 @@ subroutine SurfaceRunoff (bounds, num_hydrologyc, filter_hydrologyc, & b_infil => soilhydrology_vars%b_infil_col , & ! Input: [real(r8) (:) ] VIC b infiltration parameter moist => soilhydrology_vars%moist_col , & ! Input: [real(r8) (:,:) ] soil moisture in each VIC layers (liq, mm) hkdepth => soilhydrology_vars%hkdepth_col , & ! Input: [real(r8) (:) ] decay factor (m) + fover => soilhydrology_vars%fover , & ! Input: [real(r8) (:) ] decay factor for saturation fraction (m) origflag => soilhydrology_vars%origflag , & ! Input: logical fcov => soilhydrology_vars%fcov_col , & ! Output: [real(r8) (:) ] fractional impermeable area fsat => soilhydrology_vars%fsat_col , & ! Output: [real(r8) (:) ] fractional area with water table at surface @@ -146,7 +148,8 @@ subroutine SurfaceRunoff (bounds, num_hydrologyc, filter_hydrologyc, & do fc = 1, num_hydrologyc c = filter_hydrologyc(fc) - fff(c) = 0.5_r8 + g = col_pp%gridcell(c) + fff(c) = fover(g) if (zengdecker_2009_with_var_soil_thick) then nlevbed = nlev2bed(c) fff(c) = 0.5_r8 * col_pp%zi(c,nlevsoi) / min(col_pp%zi(c,nlevbed), col_pp%zi(c,nlevsoi)) @@ -261,7 +264,7 @@ subroutine Infiltration(bounds, num_hydrologyc, filter_hydrologyc, num_urbanc, f use shr_const_mod , only : shr_const_pi use elm_varpar , only : nlayer, nlayert use elm_varpar , only : nlevsoi, nlevgrnd - use elm_varcon , only : denh2o, denice, roverg, wimp, pc, mu, tfrz + use elm_varcon , only : denh2o, denice, roverg, wimp, mu, tfrz use elm_varcon , only : pondmx, watmin use column_varcon , only : icol_roof, icol_road_imperv, icol_sunwall, icol_shadewall, icol_road_perv use landunit_varcon , only : istsoil, istcrop @@ -317,6 +320,7 @@ subroutine Infiltration(bounds, num_hydrologyc, filter_hydrologyc, num_urbanc, f real(r8) :: top_ice(bounds%begc:bounds%endc) ! temporary, ice len in top VIC layers real(r8) :: top_icefrac ! temporary, ice fraction in top VIC layers real(r8) :: h2osoi_left_vol1 ! temporary, available volume in the first soil layer + real(r8) :: pc ! temporary, threhold for surface water storage to outflow !----------------------------------------------------------------------- associate( & @@ -329,6 +333,7 @@ subroutine Infiltration(bounds, num_hydrologyc, filter_hydrologyc, num_urbanc, f t_soisno => col_es%t_soisno , & ! Input: [real(r8) (:,:) ] soil temperature (Kelvin) frac_h2osfc => col_ws%frac_h2osfc , & ! Input: [real(r8) (:) ] fraction of ground covered by surface water (0 to 1) + frac_h2osfc_act => col_ws%frac_h2osfc_act , & ! Input: [real(r8) (:) ] fraction of ground covered by surface water (0 to 1) without adjustment from snow fraction frac_sno => col_ws%frac_sno_eff , & ! Input: [real(r8) (:) ] fraction of ground covered by snow (0 to 1) h2osoi_ice => col_ws%h2osoi_ice , & ! Input: [real(r8) (:,:) ] ice lens (kg/m2) h2osoi_liq => col_ws%h2osoi_liq , & ! Input: [real(r8) (:,:) ] liquid water (kg/m2) @@ -370,6 +375,7 @@ subroutine Infiltration(bounds, num_hydrologyc, filter_hydrologyc, num_urbanc, f ice => soilhydrology_vars%ice_col , & ! Input: [real(r8) (:,:) ] ice len in each VIC layers(ice, mm) i_0 => soilhydrology_vars%i_0_col , & ! Input: [real(r8) (:) ] column average soil moisture in top VIC layers (mm) h2osfcflag => soilhydrology_vars%h2osfcflag , & ! Input: logical + pc_grid => soilhydrology_vars%pc , & ! Input: [real(r8) (:) ] threshold for outflow from surface water storage icefrac => soilhydrology_vars%icefrac_col & ! Output: [real(r8) (:,:) ] fraction of ice ) @@ -387,8 +393,10 @@ subroutine Infiltration(bounds, num_hydrologyc, filter_hydrologyc, num_urbanc, f end do do fc = 1, num_hydrologyc - c = filter_hydrologyc(fc) - g = cgridcell(c) + c = filter_hydrologyc(fc) + g = cgridcell(c) + pc = pc_grid(g) + ! partition moisture fluxes between soil and h2osfc if (lun_pp%itype(col_pp%landunit(c)) == istsoil .or. lun_pp%itype(col_pp%landunit(c))==istcrop) then @@ -455,9 +463,24 @@ subroutine Infiltration(bounds, num_hydrologyc, filter_hydrologyc, num_urbanc, f rsurf_vic = min(qflx_in_soil(c), rsurf_vic) qinmax = (1._r8 - fsat(c)) * 10._r8**(-e_ice*top_icefrac)*(qflx_in_soil(c) - rsurf_vic) else - qinmax=(1._r8 - fsat(c)) * minval(10._r8**(-e_ice*(icefrac(c,1:3)))*hksat(c,1:3)) + if ( use_modified_infil ) then + qinmax=minval(10._r8**(-e_ice*(icefrac(c,1:3)))*hksat(c,1:3)) + else + qinmax=(1._r8 - fsat(c)) * minval(10._r8**(-e_ice*(icefrac(c,1:3)))*hksat(c,1:3)) + end if end if - + + if ( use_modified_infil ) then + ! Assume frac_h2osfc occurs on fsat + if ( frac_h2osfc(c) >= fsat(c) ) then + qflx_infl_excess(c) = max(0._r8,qflx_in_soil(c) - (1.0_r8 - frac_h2osfc(c))*qinmax) + else + qflx_infl_excess(c) = max(0._r8,qflx_in_soil(c) - (1.0_r8 - fsat(c))*qinmax) + end if + else + qflx_infl_excess(c) = max(0._r8,qflx_in_soil(c) - (1.0_r8 - frac_h2osfc(c))*qinmax) + end if + if (use_lnd_rof_two_way) then qflx_infl_excess(c) = max(0._r8,qflx_in_soil(c) - (1.0_r8 - frac_h2osfc(c) - frac_h2orof(c))*qinmax) else @@ -472,10 +495,22 @@ subroutine Infiltration(bounds, num_hydrologyc, filter_hydrologyc, num_urbanc, f !5. surface runoff from h2osfc if (h2osfcflag==1) then ! calculate runoff from h2osfc ------------------------------------- - if (frac_h2osfc(c) <= pc) then - frac_infclust=0.0_r8 + if (use_modified_infil) then + if (frac_h2osfc_act(c) <= pc .and. frac_h2osfc(c) <= pc) then + frac_infclust=0.0_r8 + else + if (frac_h2osfc(c) <= pc) then + frac_infclust=(frac_h2osfc_act(c)-pc)**mu + else + frac_infclust=(frac_h2osfc(c)-pc)**mu + endif + endif else - frac_infclust=(frac_h2osfc(c)-pc)**mu + if (frac_h2osfc(c) <= pc) then + frac_infclust=0.0_r8 + else + frac_infclust=(frac_h2osfc(c)-pc)**mu + endif endif endif @@ -514,7 +549,17 @@ subroutine Infiltration(bounds, num_hydrologyc, filter_hydrologyc, num_urbanc, f h2osfc(c) = 0.0 qflx_h2osfc_drain(c)= 0._r8 else - qflx_h2osfc_drain(c)=min(frac_h2osfc(c)*qinmax,h2osfc(c)/dtime) + if ( use_modified_infil ) then + ! Assume frac_h2osfc occurs on top of fsat + if (frac_h2osfc(c) <= fsat(c)) then + qflx_h2osfc_drain(c)=0._r8 + else + qflx_h2osfc_drain(c)=min((frac_h2osfc(c)-fsat(c))*qinmax,h2osfc(c)/dtime) + endif + else + ! Original scheme + qflx_h2osfc_drain(c)=min(frac_h2osfc(c)*qinmax,h2osfc(c)/dtime) + end if endif if(h2osfcflag==0) then diff --git a/components/elm/src/biogeophys/SoilHydrologyType.F90 b/components/elm/src/biogeophys/SoilHydrologyType.F90 index ad07058e807f..203e0a7d52b1 100644 --- a/components/elm/src/biogeophys/SoilHydrologyType.F90 +++ b/components/elm/src/biogeophys/SoilHydrologyType.F90 @@ -65,7 +65,9 @@ Module SoilHydrologyType real(r8), pointer :: max_infil_col (:) => null()! col VIC maximum infiltration rate calculated in VIC real(r8), pointer :: i_0_col (:) => null()! col VIC average saturation in top soil layers real(r8), pointer :: ice_col (:,:) => null()! col VIC soil ice (kg/m2) for VIC soil layers - + real(r8), pointer :: fover (:) => null()! decay factor for surface runoff + real(r8), pointer :: pc (:) => null()! surface water threshold probability + contains procedure, public :: Init @@ -154,6 +156,9 @@ subroutine InitAllocate(this, bounds) allocate(this%max_infil_col (begc:endc)) ; this%max_infil_col (:) = spval allocate(this%i_0_col (begc:endc)) ; this%i_0_col (:) = spval allocate(this%ice_col (begc:endc,nlayert)) ; this%ice_col (:,:) = spval + + allocate(this%fover (begg:endg)) ; this%fover (:) = spval + allocate(this%pc (begg:endg)) ; this%pc (:) = spval end subroutine InitAllocate @@ -231,8 +236,8 @@ subroutine InitCold(this, bounds) use elm_varctl , only : fsurdat, iulog, use_vichydro, use_var_soil_thick use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno, nlevlak, nlevurb use elm_varcon , only : denice, denh2o, sb, bdsno - use elm_varcon , only : h2osno_max, zlnd, tfrz, spval, pc - use elm_varcon , only : nlvic, dzvic, pc, mu, grlnd + use elm_varcon , only : h2osno_max, zlnd, tfrz, spval + use elm_varcon , only : nlvic, dzvic, grlnd use landunit_varcon , only : istice, istwet, istsoil, istdlak, istcrop, istice_mec use column_varcon , only : icol_shadewall, icol_road_perv use column_varcon , only : icol_road_imperv, icol_roof, icol_sunwall @@ -542,18 +547,36 @@ subroutine InitCold(this, bounds) fdrain(:) = 2.5_r8 end if call ncd_pio_closefile(ncid) + + call getfil (fsurdat, locfn, 0) + call ncd_pio_openfile (ncid, locfn, 0) + call ncd_io(ncid=ncid, varname='fover', flag='read', data=this%fover, dim1name=grlnd, readvar=readvar) + if (.not. readvar) then + this%fover(:) = 0.5_r8 + end if + call ncd_pio_closefile(ncid) + + call getfil (fsurdat, locfn, 0) + call ncd_pio_openfile (ncid, locfn, 0) + call ncd_io(ncid=ncid, varname='pc', flag='read', data=this%pc, dim1name=grlnd, readvar=readvar) + if (.not. readvar) then + this%pc(:) = 0.4 + end if + call ncd_pio_closefile(ncid) associate(micro_sigma => col_pp%micro_sigma) do c = bounds%begc, bounds%endc - + + g = col_pp%gridcell(c) + ! determine h2osfc threshold ("fill & spill" concept) ! set to zero for no h2osfc (w/frac_infclust =large) - + this%h2osfc_thresh_col(c) = 0._r8 if (micro_sigma(c) > 1.e-6_r8 .and. (this%h2osfcflag /= 0)) then d = 0.0 do p = 1,4 - fd = 0.5*(1.0_r8+shr_spfn_erf(d/(micro_sigma(c)*sqrt(2.0)))) - pc + fd = 0.5*(1.0_r8+shr_spfn_erf(d/(micro_sigma(c)*sqrt(2.0)))) - this%pc(g) dfdd = exp(-d**2/(2.0*micro_sigma(c)**2))/(micro_sigma(c)*sqrt(2.0*shr_const_pi)) d = d - fd/dfdd enddo @@ -569,12 +592,8 @@ subroutine InitCold(this, bounds) endif ! set decay factor - if (use_lnd_rof_two_way) then - g = col_pp%gridcell(c) - this%hkdepth_col(c) = 1._r8/fdrain(g) - else - this%hkdepth_col(c) = 1._r8/2.5_r8 - endif + g = col_pp%gridcell(c) + this%hkdepth_col(c) = 1._r8/fdrain(g) end do end associate diff --git a/components/elm/src/biogeophys/SoilStateType.F90 b/components/elm/src/biogeophys/SoilStateType.F90 index 088c68db3f8b..24f7343db813 100644 --- a/components/elm/src/biogeophys/SoilStateType.F90 +++ b/components/elm/src/biogeophys/SoilStateType.F90 @@ -14,7 +14,7 @@ module SoilStateType use landunit_varcon , only : istice, istdlak, istwet, istsoil, istcrop, istice_mec use column_varcon , only : icol_roof, icol_sunwall, icol_shadewall, icol_road_perv, icol_road_imperv use elm_varcon , only : zsoi, dzsoi, zisoi, spval, namet, grlnd - use elm_varcon , only : secspday, pc, mu, denh2o, denice, grlnd + use elm_varcon , only : secspday, mu, denh2o, denice, grlnd use landunit_varcon , only : istice, istdlak, istwet, istsoil, istcrop, istice_mec use column_varcon , only : icol_roof, icol_sunwall, icol_shadewall, icol_road_perv, icol_road_imperv use elm_varctl , only : use_cn, use_lch4,use_dynroot, use_fates diff --git a/components/elm/src/biogeophys/WaterStateType.F90 b/components/elm/src/biogeophys/WaterStateType.F90 index 5a6476956b34..19727860cefd 100644 --- a/components/elm/src/biogeophys/WaterStateType.F90 +++ b/components/elm/src/biogeophys/WaterStateType.F90 @@ -362,7 +362,7 @@ subroutine InitCold(this, bounds, & use column_varcon , only : icol_shadewall, icol_road_perv use column_varcon , only : icol_road_imperv, icol_roof, icol_sunwall use elm_varcon , only : denice, denh2o, spval, sb, bdsno - use elm_varcon , only : h2osno_max, zlnd, tfrz, spval, pc + use elm_varcon , only : h2osno_max, zlnd, tfrz, spval use elm_varctl , only : fsurdat, iulog use spmdMod , only : masterproc use abortutils , only : endrun diff --git a/components/elm/src/data_types/ColumnDataType.F90 b/components/elm/src/data_types/ColumnDataType.F90 index 7dc67e85602d..492defe4f994 100644 --- a/components/elm/src/data_types/ColumnDataType.F90 +++ b/components/elm/src/data_types/ColumnDataType.F90 @@ -145,6 +145,7 @@ module ColumnDataType real(r8), pointer :: frac_sno_eff (:) => null() ! fraction of ground covered by snow (0 to 1) real(r8), pointer :: frac_iceold (:,:) => null() ! fraction of ice relative to the tot water (-nlevsno+1:nlevgrnd) real(r8), pointer :: frac_h2osfc (:) => null() ! fractional area with surface water greater than zero + real(r8), pointer :: frac_h2osfc_act (:) => null() ! actural fractional area with surface water greater than zero real(r8), pointer :: wf (:) => null() ! soil water as frac. of whc for top 0.05 m (0-1) real(r8), pointer :: wf2 (:) => null() ! soil water as frac. of whc for top 0.17 m (0-1) real(r8), pointer :: finundated (:) => null() ! fraction of column inundated, for bgc caclulation (0-1) @@ -1365,6 +1366,7 @@ subroutine col_ws_init(this, begc, endc, h2osno_input, snow_depth_input, watsat_ allocate(this%frac_sno_eff (begc:endc)) ; this%frac_sno_eff (:) = spval allocate(this%frac_iceold (begc:endc,-nlevsno+1:nlevgrnd)) ; this%frac_iceold (:,:) = spval allocate(this%frac_h2osfc (begc:endc)) ; this%frac_h2osfc (:) = spval + allocate(this%frac_h2osfc_act (begc:endc)) ; this%frac_h2osfc_act (:) = spval allocate(this%wf (begc:endc)) ; this%wf (:) = spval allocate(this%wf2 (begc:endc)) ; this%wf2 (:) = spval allocate(this%finundated (begc:endc)) ; this%finundated (:) = spval @@ -1517,7 +1519,9 @@ subroutine col_ws_init(this, begc, endc, h2osno_input, snow_depth_input, watsat_ call hist_addfld1d (fname='FH2OSFC', units='1', & avgflag='A', long_name='fraction of ground covered by surface water', & ptr_col=this%frac_h2osfc) - + + this%frac_h2osfc_act(begc:endc) = spval + if (use_cn) then this%wf(begc:endc) = spval call hist_addfld1d (fname='WF', units='proportion', & @@ -1562,6 +1566,7 @@ subroutine col_ws_init(this, begc, endc, h2osno_input, snow_depth_input, watsat_ this%h2osfc(c) = 0._r8 this%h2ocan(c) = 0._r8 this%frac_h2osfc(c) = 0._r8 + this%frac_h2osfc_act(c) = 0._r8 this%h2orof(c) = 0._r8 this%frac_h2orof(c) = 0._r8 diff --git a/components/elm/src/external_models/emi/src/elm_stub/utils/clm_varcon.F90 b/components/elm/src/external_models/emi/src/elm_stub/utils/clm_varcon.F90 index 1ec0aa7d5937..b14cf666e19e 100644 --- a/components/elm/src/external_models/emi/src/elm_stub/utils/clm_varcon.F90 +++ b/components/elm/src/external_models/emi/src/elm_stub/utils/clm_varcon.F90 @@ -43,7 +43,6 @@ module clm_varcon real(r8), parameter :: n_melt=0.7 !fsca shape parameter real(r8), parameter :: e_ice=6.0 !soil ice impedance factor - real(r8), parameter :: pc = 0.4 !threshold probability real(r8), parameter :: mu = 0.13889 !connectivity exponent real(r8) :: grav = SHR_CONST_G !gravity constant [m/s2] real(r8) :: sb = SHR_CONST_STEBOL !stefan-boltzmann constant [W/m2/K4] diff --git a/components/elm/src/main/controlMod.F90 b/components/elm/src/main/controlMod.F90 index efb0dc540c3e..2014665f80f5 100755 --- a/components/elm/src/main/controlMod.F90 +++ b/components/elm/src/main/controlMod.F90 @@ -319,6 +319,9 @@ subroutine control_init( ) namelist /elm_inparm/ & snow_shape, snicar_atm_type, use_dust_snow_internal_mixing + + namelist /elm_inparm/ & + use_modified_infil ! ---------------------------------------------------------------------- ! Default values @@ -940,6 +943,9 @@ subroutine control_spmd() call mpi_bcast (use_dust_snow_internal_mixing, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (mpi_sync_nstep_freq, 1, MPI_INTEGER, 0, mpicom, ier) + + ! use modified infiltration scheme in surface water storage + call mpi_bcast (use_modified_infil, 1, MPI_LOGICAL, 0, mpicom, ier) end subroutine control_spmd @@ -1199,7 +1205,9 @@ subroutine control_print () write(iulog,*) ' use_lnd_rof_two_way = ', use_lnd_rof_two_way write(iulog,*) ' lnd_rof_coupling_nstep = ', lnd_rof_coupling_nstep write(iulog,*) ' mpi_sync_nstep_freq = ', mpi_sync_nstep_freq - + + write(iulog,*) ' use_modified_infil = ', use_modified_infil + end subroutine control_print end module controlMod diff --git a/components/elm/src/main/elm_varcon.F90 b/components/elm/src/main/elm_varcon.F90 index ae29c8633cfb..3a95fc05c52e 100644 --- a/components/elm/src/main/elm_varcon.F90 +++ b/components/elm/src/main/elm_varcon.F90 @@ -42,7 +42,6 @@ module elm_varcon real(r8), parameter :: n_melt=0.7 ! fsca shape parameter real(r8), parameter :: e_ice=6.0 ! soil ice impedance factor - real(r8), parameter :: pc = 0.4 ! threshold probability real(r8), parameter :: mu = 0.13889 ! connectivity exponent real(r8) :: grav = SHR_CONST_G ! gravity constant [m/s2] real(r8) :: sb = SHR_CONST_STEBOL ! stefan-boltzmann constant [W/m2/K4] diff --git a/components/elm/src/main/elm_varctl.F90 b/components/elm/src/main/elm_varctl.F90 index 2aa37ce849de..c6e03f85492b 100644 --- a/components/elm/src/main/elm_varctl.F90 +++ b/components/elm/src/main/elm_varctl.F90 @@ -526,6 +526,11 @@ module elm_varctl ! MPI syncing !---------------------------------------------------------- integer, public :: mpi_sync_nstep_freq = 0 + + !---------------------------------------------------------- + ! Modified infiltration scheme in surface water storage + !---------------------------------------------------------- + logical, public :: use_modified_infil = .false. contains