From cd518aeaaa985221a05613c98a285e8400a33dfc Mon Sep 17 00:00:00 2001 From: donghuix Date: Fri, 8 Sep 2023 13:12:54 -0700 Subject: [PATCH 01/10] initial add code for modified infiltration scheme for surface water storage --- components/elm/bld/ELMBuildNamelist.pm | 1 + .../namelist_files/namelist_definition.xml | 9 +++ .../elm/src/biogeophys/CanopyHydrologyMod.F90 | 8 +- .../elm/src/biogeophys/SoilHydrologyMod.F90 | 65 ++++++++++++++--- .../elm/src/biogeophys/SoilHydrologyType.F90 | 37 +++++++--- .../elm/src/biogeophys/SoilStateType.F90 | 2 +- .../elm/src/biogeophys/WaterStateType.F90 | 2 +- .../elm/src/data_types/ColumnDataType.F90 | 10 ++- .../emi/src/elm_stub/utils/clm_varcon.F90 | 2 +- components/elm/src/main/controlMod.F90 | 10 ++- components/elm/src/main/elm_varcon.F90 | 2 +- components/elm/src/main/elm_varctl.F90 | 5 ++ components/mosart/src/riverroute/RtmMod.F90 | 73 ------------------- 13 files changed, 125 insertions(+), 101 deletions(-) diff --git a/components/elm/bld/ELMBuildNamelist.pm b/components/elm/bld/ELMBuildNamelist.pm index 639828fa3719..c67029d0c457 100755 --- a/components/elm/bld/ELMBuildNamelist.pm +++ b/components/elm/bld/ELMBuildNamelist.pm @@ -2335,6 +2335,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 a113076e22df..611cab32f8fb 100644 --- a/components/elm/bld/namelist_files/namelist_definition.xml +++ b/components/elm/bld/namelist_files/namelist_definition.xml @@ -1992,6 +1992,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/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..e80dae940897 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 + 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..ca22754bd6c4 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 + 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,6 +547,22 @@ 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_r8 + end if + call ncd_pio_closefile(ncid) associate(micro_sigma => col_pp%micro_sigma) do c = bounds%begc, bounds%endc @@ -553,7 +574,7 @@ subroutine InitCold(this, bounds) 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 +590,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..894f0c85851c 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,12 @@ 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 + call hist_addfld1d (fname='FH2OSFCact', units='unitless', & + avgflag='A', long_name='actual fraction of ground covered by surface water', & + ptr_col=this%frac_h2osfc_act) + if (use_cn) then this%wf(begc:endc) = spval call hist_addfld1d (fname='WF', units='proportion', & @@ -1562,6 +1569,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..a92617df409b 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,7 @@ 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 :: 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..408c1cf1c69e 100644 --- a/components/elm/src/main/elm_varcon.F90 +++ b/components/elm/src/main/elm_varcon.F90 @@ -42,7 +42,7 @@ 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 :: 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 diff --git a/components/mosart/src/riverroute/RtmMod.F90 b/components/mosart/src/riverroute/RtmMod.F90 index e55bf2c66187..00d4e7b5866f 100644 --- a/components/mosart/src/riverroute/RtmMod.F90 +++ b/components/mosart/src/riverroute/RtmMod.F90 @@ -3902,79 +3902,6 @@ subroutine MOSART_init ! Check input parameters : !---------------------------------- - do n = rtmCtl%begr, rtmCTL%endr - !if ( Tunit%mask(n) .eq. 1 .or. Tunit%mask(n) .eq. 2 ) then ! 1-- Land; 2-- Basin outlet. - if ( rtmCTL%mask(n) .eq. 1 .or. rtmCTL%mask(n) .eq. 3 ) then ! 1--Land; 3--Basin outlet (downstream is ocean). - - if ( TUnit%area(n) .le. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%area(n) <= 0 for n=', n - ! call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%area(n) <= 0 ') - end if - - if ( TUnit%areaTotal(n) .le. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%areaTotal(n) <= 0 for n=', n - ! call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%areaTotal(n) <= 0 ') - end if - - if ( TUnit%nh(n) .le. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%nh(n) <= 0 for n=', n - call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%nh(n) <= 0 ') - end if - - if ( TUnit%hslp(n) .LT. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%hslp(n) < 0 for n=', n - call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%hslp(n) < 0 ') - end if - - if ( TUnit%gxr(n) .LT. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%gxr(n) < 0 for n=', n - call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%gxr(n) < 0 ') - end if - - if ( TUnit%tslp(n) .LT. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%tslp(n) < 0 for n=', n - call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%tslp(n) < 0 ') - end if - - if ( TUnit%twidth(n) .le. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%twidth(n) <= 0 for n=', n - call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%twidth(n) <= 0 ') - end if - - if ( TUnit%nt(n) .le. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%nt(n) <= 0 for n=', n - call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%nt(n) <= 0 ') - end if - - if ( TUnit%rlen(n) .le. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%rlen(n) <= 0 for n=', n - call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%rlen(n) <= 0 ') - end if - - if ( TUnit%rslp(n) .LT. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%rslp(n) < 0 for n=', n - - call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%rslp(n) < 0 ') - end if - - if ( TUnit%rwidth(n) .le. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%rwidth(n) <= 0 for n=', n - call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%rwidth(n) <= 0 ') - end if - - if ( TUnit%rdepth(n) .le. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%rdepth(n) <= 0 for n=', n - call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%rdepth(n) <= 0 ') - end if - - if ( TUnit%nr(n) .le. 0._r8 ) then - write( iulog, * ) trim( subname ) // ' ERROR: TUnit%nr(n) <= 0 for n=', n - call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%nr(n) <= 0 ') - end if - - end if - end do - end if if (inundflag) then From a0d0419303f211f3cef8640473dc2c422f32059d Mon Sep 17 00:00:00 2001 From: donghuix Date: Wed, 13 Sep 2023 13:28:50 -0700 Subject: [PATCH 02/10] debug --- components/elm/src/biogeophys/SoilHydrologyType.F90 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/components/elm/src/biogeophys/SoilHydrologyType.F90 b/components/elm/src/biogeophys/SoilHydrologyType.F90 index ca22754bd6c4..7756a1ae9df7 100644 --- a/components/elm/src/biogeophys/SoilHydrologyType.F90 +++ b/components/elm/src/biogeophys/SoilHydrologyType.F90 @@ -566,10 +566,12 @@ subroutine InitCold(this, bounds) 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 From 401a4170dab23b5f570515a80ff8135dc712ce41 Mon Sep 17 00:00:00 2001 From: donghuix Date: Thu, 5 Oct 2023 09:57:39 -0700 Subject: [PATCH 03/10] add mosart code back --- components/mosart/src/riverroute/RtmMod.F90 | 73 +++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/components/mosart/src/riverroute/RtmMod.F90 b/components/mosart/src/riverroute/RtmMod.F90 index 00d4e7b5866f..9bb86b15d47e 100644 --- a/components/mosart/src/riverroute/RtmMod.F90 +++ b/components/mosart/src/riverroute/RtmMod.F90 @@ -3901,6 +3901,79 @@ subroutine MOSART_init !---------------------------------- ! Check input parameters : !---------------------------------- + + do n = rtmCtl%begr, rtmCTL%endr + !if ( Tunit%mask(n) .eq. 1 .or. Tunit%mask(n) .eq. 2 ) then ! 1-- Land; 2-- Basin outlet. + if ( rtmCTL%mask(n) .eq. 1 .or. rtmCTL%mask(n) .eq. 3 ) then ! 1--Land; 3--Basin outlet (downstream is ocean). + + if ( TUnit%area(n) .le. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%area(n) <= 0 for n=', n + ! call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%area(n) <= 0 ') + end if + + if ( TUnit%areaTotal(n) .le. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%areaTotal(n) <= 0 for n=', n + ! call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%areaTotal(n) <= 0 ') + end if + + if ( TUnit%nh(n) .le. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%nh(n) <= 0 for n=', n + call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%nh(n) <= 0 ') + end if + + if ( TUnit%hslp(n) .LT. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%hslp(n) < 0 for n=', n + call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%hslp(n) < 0 ') + end if + + if ( TUnit%gxr(n) .LT. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%gxr(n) < 0 for n=', n + call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%gxr(n) < 0 ') + end if + + if ( TUnit%tslp(n) .LT. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%tslp(n) < 0 for n=', n + call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%tslp(n) < 0 ') + end if + + if ( TUnit%twidth(n) .le. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%twidth(n) <= 0 for n=', n + call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%twidth(n) <= 0 ') + end if + + if ( TUnit%nt(n) .le. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%nt(n) <= 0 for n=', n + call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%nt(n) <= 0 ') + end if + + if ( TUnit%rlen(n) .le. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%rlen(n) <= 0 for n=', n + call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%rlen(n) <= 0 ') + end if + + if ( TUnit%rslp(n) .LT. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%rslp(n) < 0 for n=', n + + call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%rslp(n) < 0 ') + end if + + if ( TUnit%rwidth(n) .le. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%rwidth(n) <= 0 for n=', n + call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%rwidth(n) <= 0 ') + end if + + if ( TUnit%rdepth(n) .le. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%rdepth(n) <= 0 for n=', n + call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%rdepth(n) <= 0 ') + end if + + if ( TUnit%nr(n) .le. 0._r8 ) then + write( iulog, * ) trim( subname ) // ' ERROR: TUnit%nr(n) <= 0 for n=', n + call shr_sys_abort( trim( subname ) // ' ERROR: TUnit%nr(n) <= 0 ') + end if + + end if + end do end if From bdc29d3498b791e395017e4917100cc3d10f138c Mon Sep 17 00:00:00 2001 From: donghuix Date: Thu, 5 Oct 2023 09:59:02 -0700 Subject: [PATCH 04/10] fix typo --- components/mosart/src/riverroute/RtmMod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/mosart/src/riverroute/RtmMod.F90 b/components/mosart/src/riverroute/RtmMod.F90 index 9bb86b15d47e..b04a123f4829 100644 --- a/components/mosart/src/riverroute/RtmMod.F90 +++ b/components/mosart/src/riverroute/RtmMod.F90 @@ -3901,8 +3901,8 @@ subroutine MOSART_init !---------------------------------- ! Check input parameters : !---------------------------------- - - do n = rtmCtl%begr, rtmCTL%endr + + do n = rtmCtl%begr, rtmCTL%endr !if ( Tunit%mask(n) .eq. 1 .or. Tunit%mask(n) .eq. 2 ) then ! 1-- Land; 2-- Basin outlet. if ( rtmCTL%mask(n) .eq. 1 .or. rtmCTL%mask(n) .eq. 3 ) then ! 1--Land; 3--Basin outlet (downstream is ocean). From 3e5226b770c93e5c819286afee413eb5bdca295e Mon Sep 17 00:00:00 2001 From: donghuix Date: Thu, 5 Oct 2023 09:59:50 -0700 Subject: [PATCH 05/10] fix typo --- components/mosart/src/riverroute/RtmMod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/mosart/src/riverroute/RtmMod.F90 b/components/mosart/src/riverroute/RtmMod.F90 index b04a123f4829..e55bf2c66187 100644 --- a/components/mosart/src/riverroute/RtmMod.F90 +++ b/components/mosart/src/riverroute/RtmMod.F90 @@ -3902,7 +3902,7 @@ subroutine MOSART_init ! Check input parameters : !---------------------------------- - do n = rtmCtl%begr, rtmCTL%endr + do n = rtmCtl%begr, rtmCTL%endr !if ( Tunit%mask(n) .eq. 1 .or. Tunit%mask(n) .eq. 2 ) then ! 1-- Land; 2-- Basin outlet. if ( rtmCTL%mask(n) .eq. 1 .or. rtmCTL%mask(n) .eq. 3 ) then ! 1--Land; 3--Basin outlet (downstream is ocean). From d231bea438c11bb96acd6fc7746804bfffa58384 Mon Sep 17 00:00:00 2001 From: donghuix Date: Thu, 5 Oct 2023 13:56:06 -0700 Subject: [PATCH 06/10] add a test for the new infiltration scheme --- cime_config/tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cime_config/tests.py b/cime_config/tests.py index 7f24a2587635..9368efae0208 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" ) }, From 6fe63a449d27fdd863c763f9120f977b9e257771 Mon Sep 17 00:00:00 2001 From: donghuix Date: Mon, 9 Oct 2023 07:54:22 -0700 Subject: [PATCH 07/10] debug fover, need to remove _r8 to keep it consistent with master --- components/elm/src/biogeophys/SoilHydrologyType.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/elm/src/biogeophys/SoilHydrologyType.F90 b/components/elm/src/biogeophys/SoilHydrologyType.F90 index 7756a1ae9df7..c81714b5f683 100644 --- a/components/elm/src/biogeophys/SoilHydrologyType.F90 +++ b/components/elm/src/biogeophys/SoilHydrologyType.F90 @@ -560,7 +560,7 @@ subroutine InitCold(this, bounds) 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_r8 + this%pc(:) = 0.4 end if call ncd_pio_closefile(ncid) From 8057ebcf34c47b66d05b90b648432ef7477eaf5a Mon Sep 17 00:00:00 2001 From: donghuix Date: Mon, 9 Oct 2023 08:45:25 -0700 Subject: [PATCH 08/10] add tests in elm for surface water dynamics with calibrated parameters for NLDAS domain --- .../elm/surface_water_dynamics/shell_commands | 10 ++++++++++ .../elm/surface_water_dynamics/user_nl_elm | 2 ++ 2 files changed, 12 insertions(+) create mode 100644 components/elm/cime_config/testdefs/testmods_dirs/elm/surface_water_dynamics/shell_commands create mode 100644 components/elm/cime_config/testdefs/testmods_dirs/elm/surface_water_dynamics/user_nl_elm 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. From f85ea217f33f2e0a470135625c508c678f171c63 Mon Sep 17 00:00:00 2001 From: donghuix Date: Mon, 16 Oct 2023 10:04:31 -0700 Subject: [PATCH 09/10] address comments --- components/elm/src/biogeophys/SoilHydrologyMod.F90 | 2 +- components/elm/src/biogeophys/SoilHydrologyType.F90 | 2 +- .../src/external_models/emi/src/elm_stub/utils/clm_varcon.F90 | 1 - components/elm/src/main/elm_varcon.F90 | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/components/elm/src/biogeophys/SoilHydrologyMod.F90 b/components/elm/src/biogeophys/SoilHydrologyMod.F90 index e80dae940897..959fb2b69687 100644 --- a/components/elm/src/biogeophys/SoilHydrologyMod.F90 +++ b/components/elm/src/biogeophys/SoilHydrologyMod.F90 @@ -552,7 +552,7 @@ subroutine Infiltration(bounds, num_hydrologyc, filter_hydrologyc, num_urbanc, f 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 + qflx_h2osfc_drain(c)=0._r8 else qflx_h2osfc_drain(c)=min((frac_h2osfc(c)-fsat(c))*qinmax,h2osfc(c)/dtime) endif diff --git a/components/elm/src/biogeophys/SoilHydrologyType.F90 b/components/elm/src/biogeophys/SoilHydrologyType.F90 index c81714b5f683..203e0a7d52b1 100644 --- a/components/elm/src/biogeophys/SoilHydrologyType.F90 +++ b/components/elm/src/biogeophys/SoilHydrologyType.F90 @@ -66,7 +66,7 @@ Module SoilHydrologyType 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 + real(r8), pointer :: pc (:) => null()! surface water threshold probability contains 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 a92617df409b..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/elm_varcon.F90 b/components/elm/src/main/elm_varcon.F90 index 408c1cf1c69e..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] From 0b7cdf4760d8339421de27fd9c6f53251e474355 Mon Sep 17 00:00:00 2001 From: donghuix Date: Tue, 7 Nov 2023 21:10:25 -0800 Subject: [PATCH 10/10] remove frac_h2osfc_act from output --- components/elm/src/data_types/ColumnDataType.F90 | 3 --- 1 file changed, 3 deletions(-) diff --git a/components/elm/src/data_types/ColumnDataType.F90 b/components/elm/src/data_types/ColumnDataType.F90 index 894f0c85851c..492defe4f994 100644 --- a/components/elm/src/data_types/ColumnDataType.F90 +++ b/components/elm/src/data_types/ColumnDataType.F90 @@ -1521,9 +1521,6 @@ subroutine col_ws_init(this, begc, endc, h2osno_input, snow_depth_input, watsat_ ptr_col=this%frac_h2osfc) this%frac_h2osfc_act(begc:endc) = spval - call hist_addfld1d (fname='FH2OSFCact', units='unitless', & - avgflag='A', long_name='actual fraction of ground covered by surface water', & - ptr_col=this%frac_h2osfc_act) if (use_cn) then this%wf(begc:endc) = spval