diff --git a/hrldas/IO_code/module_NoahMP_hrldas_driver.F b/hrldas/IO_code/module_NoahMP_hrldas_driver.F index 6c62438..2bd94ff 100644 --- a/hrldas/IO_code/module_NoahMP_hrldas_driver.F +++ b/hrldas/IO_code/module_NoahMP_hrldas_driver.F @@ -20,7 +20,7 @@ module module_NoahMP_hrldas_driver #endif #ifdef WRF_HYDRO - REAL, allocatable, DIMENSION(:,:) :: infxsrt,sfcheadrt, soldrain + REAL, allocatable, DIMENSION(:,:) :: infxsrt,sfcheadrt,soldrain,qtiledrain,ZWATBLE2D integer :: forc_typ, snow_assim, HRLDAS_ini_typ REAL, allocatable, DIMENSION(:,:) :: etpnd, greenfrac, prcp0 real :: etpnd1 @@ -82,6 +82,8 @@ module module_NoahMP_hrldas_driver INTEGER :: IOPT_CROP ! crop model option (0->none; 1->Liu et al.; 2->Gecros) INTEGER :: IOPT_IRR ! irrigation scheme (0->none; >1 irrigation scheme ON) INTEGER :: IOPT_IRRM ! irrigation method (0->dynamic; 1-> sprinkler; 2-> micro; 3-> flood) + INTEGER :: IOPT_INFDV!infiltration options for dynamic VIC (1->Philip; 2-> Green-Ampt;3->Smith-Parlange) + INTEGER :: IOPT_TDRN ! drainage option (0->off; 1->simple scheme; 2->Hooghoudt's scheme) REAL, ALLOCATABLE, DIMENSION(:,:,:) :: T_PHY ! 3D atmospheric temperature valid at mid-levels [K] REAL, ALLOCATABLE, DIMENSION(:,:,:) :: QV_CURR ! 3D water vapor mixing ratio [kg/kg_dry] REAL, ALLOCATABLE, DIMENSION(:,:,:) :: U_PHY ! 3D U wind component [m/s] @@ -126,6 +128,20 @@ module module_NoahMP_hrldas_driver REAL, ALLOCATABLE, DIMENSION(:,:) :: micir_rate_2D! mm/h, micro irrigation rate REAL, ALLOCATABLE, DIMENSION(:,:) :: firtfac_2D ! flood application rate factor REAL, ALLOCATABLE, DIMENSION(:,:) :: ir_rain_2D ! maximum precipitation to stop irrigation trigger + REAL, ALLOCATABLE, DIMENSION(:,:) :: bvic_2d ! VIC model infiltration parameter [-] opt_run=6 + REAL, ALLOCATABLE, DIMENSION(:,:) :: axaj_2D ! Tension water distribution inflection parameter [-] opt_run=7 + REAL, ALLOCATABLE, DIMENSION(:,:) :: bxaj_2D ! Tension water distribution shape parameter [-] opt_run=7 + REAL, ALLOCATABLE, DIMENSION(:,:) :: xxaj_2D ! Free water distribution shape parameter [-] opt_run=7 + REAL, ALLOCATABLE, DIMENSION(:,:) :: bdvic_2d ! VIC model infiltration parameter [-] opt_run=8 + REAL, ALLOCATABLE, DIMENSION(:,:) :: gdvic_2d ! Mean Capillary Drive (m) for infiltration models opt_run=8 + REAL, ALLOCATABLE, DIMENSION(:,:) :: bbvic_2d ! DVIC heterogeniety parameter for infiltration [-] opt_run=8 + REAL, ALLOCATABLE, DIMENSION(:,:) :: KLAT_FAC ! factor multiplier to hydraulic conductivity + REAL, ALLOCATABLE, DIMENSION(:,:) :: TDSMC_FAC ! factor multiplier to field capacity + REAL, ALLOCATABLE, DIMENSION(:,:) :: TD_DC ! drainage coefficient for simple + REAL, ALLOCATABLE, DIMENSION(:,:) :: TD_DCOEF ! drainge coefficient for Hooghoudt + REAL, ALLOCATABLE, DIMENSION(:,:) :: TD_DDRAIN ! depth of drain + REAL, ALLOCATABLE, DIMENSION(:,:) :: TD_RADI ! tile radius + REAL, ALLOCATABLE, DIMENSION(:,:) :: TD_SPAC ! tile spacing ! INOUT (with generic LSM equivalent) (as defined in WRF) @@ -261,6 +277,7 @@ module module_NoahMP_hrldas_driver REAL, ALLOCATABLE, DIMENSION(:,:) :: RS ! Total stomatal resistance (s/m) REAL, ALLOCATABLE, DIMENSION(:,:) :: Z0 ! roughness length output to WRF REAL, ALLOCATABLE, DIMENSION(:,:) :: ZNT ! roughness length output to WRF + REAL, ALLOCATABLE, DIMENSION(:,:) :: QTDRAIN ! tile drain discharge (mm) INTEGER :: ids,ide, jds,jde, kds,kde, & ! d -> domain & ims,ime, jms,jme, kms,kme, & ! m -> memory & its,ite, jts,jte, kts,kte ! t -> tile @@ -297,6 +314,11 @@ module module_NoahMP_hrldas_driver REAL :: WTDDT = 30.0 ! frequency of groundwater call [minutes] INTEGER :: STEPWTD ! step of groundwater call +!------------------------------------------------------------------------ +! Needed for TILE DRAINAGE IF IOPT_TDRN = 1 OR 2 +!------------------------------------------------------------------------ + REAL, ALLOCATABLE, DIMENSION(:,:) :: TD_FRACTION + !------------------------------------------------------------------------ ! Needed for crop model (DVEG = 10) !------------------------------------------------------------------------ @@ -600,6 +622,8 @@ module module_NoahMP_hrldas_driver integer :: crop_option = 0 integer :: irrigation_option = 0 integer :: irrigation_method = 0 + integer :: dvic_infiltration_option = 1 + integer :: tile_drainage_option = 0 integer :: split_output_count = 1 logical :: skip_first_output = .false. @@ -611,6 +635,7 @@ module module_NoahMP_hrldas_driver character(len=256) :: external_veg_filename_template = " " character(len=256) :: external_lai_filename_template = " " character(len=256) :: agdata_flnm = " " + character(len=256) :: tdinput_flnm = " " integer :: xstart = 1 integer :: ystart = 1 integer :: xend = 0 @@ -635,14 +660,14 @@ module module_NoahMP_hrldas_driver frozen_soil_option, radiative_transfer_option, snow_albedo_option, & pcp_partition_option, tbot_option, temp_time_scheme_option, & glacier_option, surface_resistance_option, & - irrigation_option, irrigation_method, & - soil_data_option, pedotransfer_option, crop_option, & + irrigation_option, irrigation_method, dvic_infiltration_option, & + tile_drainage_option,soil_data_option, pedotransfer_option, crop_option, & sf_urban_physics,use_wudapt_lcz,num_urban_hi,urban_atmosphere_thickness, & num_urban_ndm,num_urban_ng,num_urban_nwr ,num_urban_ngb , & num_urban_nf ,num_urban_nz,num_urban_nbui, & split_output_count, & khour, kday, zlvl, hrldas_setup_file, & - spatial_filename, agdata_flnm, & + spatial_filename, agdata_flnm, tdinput_flnm, & external_veg_filename_template, external_lai_filename_template, & xstart, xend, ystart, yend @@ -716,6 +741,8 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) IOPT_CROP = crop_option IOPT_IRR = irrigation_option IOPT_IRRM = irrigation_method + IOPT_INFDV= dvic_infiltration_option + IOPT_TDRN = tile_drainage_option !--------------------------------------------------------------------- ! NAMELIST end @@ -1025,6 +1052,20 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) ALLOCATE ( micir_rate_2D(XSTART:XEND,YSTART:YEND) ) ! mm/h, micro irrigation rate ALLOCATE ( firtfac_2D (XSTART:XEND,YSTART:YEND) ) ! flood application rate factor ALLOCATE ( ir_rain_2D (XSTART:XEND,YSTART:YEND) ) ! maximum precipitation to stop irrigation trigger + ALLOCATE ( bvic_2D (XSTART:XEND,YSTART:YEND) ) ! VIC model infiltration parameter [-] + ALLOCATE ( axaj_2D (XSTART:XEND,YSTART:YEND) ) ! Tension water distribution inflection parameter [-] + ALLOCATE ( bxaj_2D (XSTART:XEND,YSTART:YEND) ) ! Tension water distribution shape parameter [-] + ALLOCATE ( xxaj_2D (XSTART:XEND,YSTART:YEND) ) ! Free water distribution shape parameter [-] + ALLOCATE ( bdvic_2D (XSTART:XEND,YSTART:YEND) ) ! DVIC model infiltration parameter [-] + ALLOCATE ( gdvic_2D (XSTART:XEND,YSTART:YEND) ) ! Mean Capillary Drive (m) for infiltration models + ALLOCATE ( bbvic_2D (XSTART:XEND,YSTART:YEND) ) ! DVIC heterogeniety parameter for infiltration [-] + ALLOCATE ( KLAT_FAC (XSTART:XEND,YSTART:YEND) ) ! factor multiplier to hydraulic conductivity + ALLOCATE ( TDSMC_FAC (XSTART:XEND,YSTART:YEND) ) ! factor multiplier to field capacity + ALLOCATE ( TD_DC (XSTART:XEND,YSTART:YEND) ) ! drainage coefficient for simple + ALLOCATE ( TD_DCOEF (XSTART:XEND,YSTART:YEND) ) ! drainge coefficient for Hooghoudt + ALLOCATE ( TD_DDRAIN (XSTART:XEND,YSTART:YEND) ) ! depth of drain + ALLOCATE ( TD_RADI (XSTART:XEND,YSTART:YEND) ) ! tile radius + ALLOCATE ( TD_SPAC (XSTART:XEND,YSTART:YEND) ) ! tile spacing ! INOUT (with generic LSM equivalent) (as defined in WRF) @@ -1159,6 +1200,8 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) ALLOCATE ( RS (XSTART:XEND,YSTART:YEND) ) ! Total stomatal resistance (s/m) ALLOCATE ( Z0 (XSTART:XEND,YSTART:YEND) ) ! roughness length output to WRF ALLOCATE ( ZNT (XSTART:XEND,YSTART:YEND) ) ! roughness length output to WRF + ALLOCATE ( QTDRAIN (XSTART:XEND,YSTART:YEND) ) ! tile drainage (mm) + ALLOCATE ( TD_FRACTION (XSTART:XEND,YSTART:YEND) )! tile drainage fraction ALLOCATE ( XLONG (XSTART:XEND,YSTART:YEND) ) ! longitude ALLOCATE ( TERRAIN (XSTART:XEND,YSTART:YEND) ) ! terrain height @@ -1522,6 +1565,9 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) HARVEST = undefined_real SEASON_GDD = undefined_real CROPTYPE = undefined_real +! tile drainage + QTDRAIN = undefined_real + TD_FRACTION= undefined_real ! irrigation IRFRACT = 0.0 SIFRACT = 0.0 @@ -1698,7 +1744,9 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) NSOIL,BEXP_3D,SMCDRY_3D,SMCWLT_3D,SMCREF_3D,SMCMAX_3D, & DKSAT_3D,DWSAT_3D,PSISAT_3D,QUARTZ_3D,REFDK_2D,REFKDT_2D,& IRR_FRAC_2D,IRR_HAR_2D,IRR_LAI_2D,IRR_MAD_2D,FILOSS_2D,SPRIR_RATE_2D,& - MICIR_RATE_2D,FIRTFAC_2D,IR_RAIN_2D) + MICIR_RATE_2D,FIRTFAC_2D,IR_RAIN_2D,BVIC_2D,AXAJ_2D,BXAJ_2D,XXAJ_2D,& + BDVIC_2D,GDVIC_2D,BBVIC_2D,& + KLAT_FAC,TDSMC_FAC,TD_DC,TD_DCOEF,TD_DDRAIN,TD_RADI,TD_SPAC) end if !---------------------------------------------------------------------- @@ -1733,6 +1781,14 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) CROPTYPE,PLANTING,HARVEST,SEASON_GDD) end if +!------------------------------------------------------------------------ +! For IOPT_TDRN = 1 or 2 READ TILE DRAIN MAP +!------------------------------------------------------------------------ + TD_FRACTION = 0. + IF (IOPT_TDRN .GT. 0) THEN + CALL READ_TILE_DRAIN_MAP(TDINPUT_FLNM,XSTART,XEND,YSTART,YEND,TD_FRACTION) + ENDIF + !---------------------------------------------------------------------- ! Initialize Model State !---------------------------------------------------------------------- @@ -1797,8 +1853,9 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) call get_from_restart(xstart, xend, xstart, ixfull, jxfull, "ACSNOW" , ACSNOW ) call get_from_restart(xstart, xend, xstart, ixfull, jxfull, "TAUSS" , TAUSSXY ) call get_from_restart(xstart, xend, xstart, ixfull, jxfull, "QSFC" , QSFC ) - call get_from_restart(xstart, xend, xstart, ixfull, jxfull, "SFCRUNOFF",SFCRUNOFF ) - call get_from_restart(xstart, xend, xstart, ixfull, jxfull, "UDRUNOFF" ,UDRUNOFF ) + call get_from_restart(xstart, xend, xstart, ixfull, jxfull, "SFCRUNOFF",SFCRUNOFF) + call get_from_restart(xstart, xend, xstart, ixfull, jxfull, "UDRUNOFF" ,UDRUNOFF ) + call get_from_restart(xstart, xend, xstart, ixfull, jxfull, "QTDRAIN" ,QTDRAIN ) ! below for irrigation scheme IF (irrigation_option > 0) THEN call get_from_restart(xstart, xend, xstart, ixfull, jxfull, "IRNUMSI" , IRNUMSI ) @@ -1950,7 +2007,7 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) ids,ide+1, jds,jde+1, kds,kde, & ! domain ims,ime, jms,jme, kms,kme, & ! memory its,ite, jts,jte, kts,kte & ! tile - ,smoiseq ,smcwtdxy ,rechxy ,deeprechxy, areaxy ,dx, dy, msftx, msfty,& + ,smoiseq ,smcwtdxy ,rechxy, deeprechxy, qtdrain, areaxy ,dx, dy, msftx, msfty,& wtddt ,stepwtd ,dtbl ,qrfsxy ,qspringsxy ,qslatxy, & fdepthxy ,terrain ,riverbedxy ,eqzwt ,rivercondxy ,pexpxy, & rechclim ,gecros_state & @@ -2103,7 +2160,7 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) ids,ide+1, jds,jde+1, kds,kde, & ! domain ims,ime, jms,jme, kms,kme, & ! memory its,ite, jts,jte, kts,kte & ! tile - ,smoiseq ,smcwtdxy ,rechxy ,deeprechxy, areaxy ,dx, dy, msftx, msfty,& + ,smoiseq ,smcwtdxy ,rechxy, deeprechxy, qtdrain, areaxy ,dx, dy, msftx, msfty,& wtddt ,stepwtd ,dtbl ,qrfsxy ,qspringsxy ,qslatxy, & fdepthxy ,terrain ,riverbedxy ,eqzwt ,rivercondxy ,pexpxy, & rechclim ,gecros_state & @@ -2206,12 +2263,16 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) allocate( soldrain (ix,jx) ) allocate( etpnd (ix,jx) ) allocate( prcp0 (ix,jx) ) + allocate( qtiledrain(ix,jx) ) + allocate( ZWATBLE2D (ix,jx) ) prcp0 = 0 sfcheadrt = 0.0 infxsrt = 0.0 etpnd = 0.0 soldrain = 0.0 + qtiledrain= 0.0 + ZWATBLE2D = 0.0 allocate(zsoil (NSOIL)) zsoil = 0 @@ -2224,7 +2285,7 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) print*, "zsoil/soil_thick_input = ", soil_thick_input(1:NSOIL) call hrldas_drv_HYDRO_ini(TSLB(:,1:NSOIL,:),SMOIS(:,1:NSOIL,:),SH2O(:,1:NSOIL,:), & - infxsrt,sfcheadrt,soldrain,ix,jx,NSOIL, SMOIS,real(noah_timestep), & + infxsrt,sfcheadrt,soldrain,qtiledrain,ZWATBLE2D,ix,jx,NSOIL, SMOIS,real(noah_timestep),& olddate,zsoil(1:NSOIL)) if(finemesh .ne. 0 ) then @@ -2276,8 +2337,8 @@ subroutine land_driver_exe(itime) XSTART, XEND, YSTART, YEND, & forcing_name_T,forcing_name_Q,forcing_name_U,forcing_name_V,forcing_name_P, & forcing_name_LW,forcing_name_SW,forcing_name_PR,forcing_name_SN, & - T_PHY(:,1,:),QV_CURR(:,1,:),U_PHY(:,1,:),V_PHY(:,1,:), & - P8W(:,1,:), GLW ,SWDOWN ,RAINBL_tmp, SNOWBL, VEGFRA, update_veg, LAI, update_lai, reset_spinup_date, startdate) + T_PHY(:,1,:),QV_CURR(:,1,:),U_PHY(:,1,:),V_PHY(:,1,:), & + P8W(:,1,:), GLW, SWDOWN, RAINBL_tmp, SNOWBL, VEGFRA, update_veg, LAI, update_lai, reset_spinup_date, startdate) VEGFRA = VEGFRA * 100. else if(olddate == forcDate) then @@ -2297,8 +2358,8 @@ subroutine land_driver_exe(itime) XSTART, XEND, YSTART, YEND, & forcing_name_T,forcing_name_Q,forcing_name_U,forcing_name_V,forcing_name_P, & forcing_name_LW,forcing_name_SW,forcing_name_PR,forcing_name_SN, & - T_PHY(:,1,:),QV_CURR(:,1,:),U_PHY(:,1,:),V_PHY(:,1,:), & - P8W(:,1,:), GLW ,SWDOWN ,RAINBL_tmp, SNOWBL, VEGFRA, update_veg, LAI, update_lai, reset_spinup_date, startdate) + T_PHY(:,1,:),QV_CURR(:,1,:),U_PHY(:,1,:),V_PHY(:,1,:), & + P8W(:,1,:), GLW, SWDOWN, RAINBL_tmp, SNOWBL, VEGFRA, update_veg, LAI, update_lai, reset_spinup_date, startdate) #endif 991 continue @@ -2411,11 +2472,11 @@ subroutine land_driver_exe(itime) DZ8W, DTBL, DZS, NUM_SOIL_LAYERS, DX, & IVGTYP, ISLTYP, VEGFRA, GVFMAX, TMN, & XLAND, XICE, XICE_THRESHOLD, CROPCAT, & - PLANTING, HARVEST,SEASON_GDD, & + PLANTING, HARVEST,SEASON_GDD, & IDVEG, IOPT_CRS, IOPT_BTR, IOPT_RUN, IOPT_SFC, IOPT_FRZ, & IOPT_INF, IOPT_RAD, IOPT_ALB, IOPT_SNF, IOPT_TBOT, IOPT_STC, & IOPT_GLA, IOPT_RSF,IOPT_SOIL,IOPT_PEDO,IOPT_CROP, IOPT_IRR, & - IOPT_IRRM,IZ0TLND, sf_urban_physics, & + IOPT_IRRM,IOPT_INFDV,IOPT_TDRN,IZ0TLND, sf_urban_physics, & SOILCOMP, SOILCL1, SOILCL2, SOILCL3, SOILCL4, & T_PHY, QV_CURR, U_PHY, V_PHY, SWDOWN, SWDDIR, & SWDDIF, GLW, & @@ -2434,7 +2495,8 @@ subroutine land_driver_exe(itime) ZSNSOXY, SNICEXY, SNLIQXY, LFMASSXY, RTMASSXY, STMASSXY, & WOODXY, STBLCPXY, FASTCPXY, LAI, XSAIXY, TAUSSXY, & SMOISEQ, SMCWTDXY,DEEPRECHXY, RECHXY, GRAINXY, GDDXY,PGSXY, & ! IN/OUT Noah MP only - GECROS_STATE, & ! IN/OUT gecros model + GECROS_STATE, & ! IN/OUT gecros model + QTDRAIN, TD_FRACTION, & ! IN/OUT tile drainage T2MVXY, T2MBXY, Q2MVXY, Q2MBXY, & TRADXY, NEEXY, GPPXY, NPPXY, FVEGXY, RUNSFXY, & RUNSBXY, ECANXY, EDIRXY, ETRANXY, FSAXY, FIRAXY, & @@ -2443,14 +2505,15 @@ subroutine land_driver_exe(itime) SHGXY, SHCXY, SHBXY, EVGXY, EVBXY, GHVXY, & GHBXY, IRGXY, IRCXY, IRBXY, TRXY, EVCXY, & CHLEAFXY, CHUCXY, CHV2XY, CHB2XY, RS, & -! BEXP_3D,SMCDRY_3D,SMCWLT_3D,SMCREF_3D,SMCMAX_3D, & +! BEXP_3D,SMCDRY_3D,SMCWLT_3D,SMCREF_3D,SMCMAX_3D, & ! DKSAT_3D,DWSAT_3D,PSISAT_3D,QUARTZ_3D, & ! REFDK_2D,REFKDT_2D, & -! IRR_FRAC_2D,IRR_HAR_2D,IRR_LAI_2D,IRR_MAD_2D,FILOSS_2D, & -! SPRIR_RATE_2D,MICIR_RATE_2D,FIRTFAC_2D,IR_RAIN_2D, & +! IRR_FRAC_2D,IRR_HAR_2D,IRR_LAI_2D,IRR_MAD_2D,FILOSS_2D, & +! SPRIR_RATE_2D,MICIR_RATE_2D,FIRTFAC_2D,IR_RAIN_2D, & +! BVIC_2D,AXAJ_2D,BXAJ_2D,XXAJ_2D,BDVIC_2D,GDVIC_2D,BBVIC_2D, & #ifdef WRF_HYDRO - sfcheadrt,INFXSRT,soldrain, & !O + sfcheadrt,INFXSRT,soldrain,qtiledrain,ZWATBLE2D, & !O #endif ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & @@ -2624,11 +2687,11 @@ subroutine land_driver_exe(itime) call add_to_output(FIRAXY , "FIRA" , "Total net LW radiation to atmosphere" , "W m{-2}" ) call add_to_output(GRDFLX , "GRDFLX" , "Heat flux into the soil" , "W m{-2}" ) call add_to_output(HFX , "HFX" , "Total sensible heat to atmosphere" , "W m{-2}" ) - call add_to_output(LH , "LH" , "Total latent heat to atmosphere" , "W m{-2}" ) + call add_to_output(LH , "LH" , "Total latent heat to atmosphere" , "W m{-2}" ) call add_to_output(ECANXY , "ECAN" , "Canopy water evaporation rate" , "kg m{-2} s{-1}" ) call add_to_output(ETRANXY , "ETRAN" , "Transpiration rate" , "kg m{-2} s{-1}" ) call add_to_output(EDIRXY , "EDIR" , "Direct from soil evaporation rate" , "kg m{-2} s{-1}" ) - call add_to_output(ALBEDO , "ALBEDO" , "Surface albedo" , "-" ) + call add_to_output(ALBEDO , "ALBEDO" , "Surface albedo" , "-" ) ! Grid water budget terms - in addition to above call add_to_output(UDRUNOFF , "UGDRNOFF", "Accumulated underground runoff" , "mm" ) call add_to_output(SFCRUNOFF , "SFCRNOFF", "Accumulatetd surface runoff" , "mm" ) @@ -2637,6 +2700,7 @@ subroutine land_driver_exe(itime) call add_to_output(ZWTXY , "ZWT" , "Depth to water table" , "m" ) call add_to_output(WAXY , "WA" , "Water in aquifer" , "kg m{-2}" ) call add_to_output(WTXY , "WT" , "Water in aquifer and saturated soil" , "kg m{-2}" ) + call add_to_output(QTDRAIN , "QTDRAIN" , "Accumulated tile drainage" , "mm" ) ! Additional needed to close the canopy energy budget call add_to_output(SAVXY , "SAV" , "Solar radiative heat flux absorbed by vegetation", "W m{-2}" ) call add_to_output(TRXY , "TR" , "Transpiration heat" , "W m{-2}" ) @@ -2783,7 +2847,8 @@ subroutine land_driver_exe(itime) clock_count_1 = clock_count_2 #ifdef WRF_HYDRO - call hrldas_drv_HYDRO(TSLB(:,1:NSOIL,:),SMOIS(:,1:NSOIL,:),SH2O(:,1:NSOIL,:),infxsrt,sfcheadrt,soldrain,ix,jx,NSOIL) + call hrldas_drv_HYDRO(TSLB(:,1:NSOIL,:),SMOIS(:,1:NSOIL,:),SH2O(:,1:NSOIL,:),infxsrt,& + sfcheadrt,soldrain,qtiledrain,ZWATBLE2D,ix,jx,NSOIL) #endif end subroutine land_driver_exe @@ -2845,6 +2910,7 @@ subroutine lsm_restart() call add_to_restart(QSFC , "QSFC" ) call add_to_restart(SFCRUNOFF , "SFCRUNOFF") call add_to_restart(UDRUNOFF , "UDRUNOFF" ) + call add_to_restart(QTDRAIN , "QTDRAIN" ) ! irrigation scheme IF (irrigation_option > 0) THEN call add_to_restart(IRNUMSI , "IRNUMSI") diff --git a/hrldas/IO_code/module_hrldas_netcdf_io.F b/hrldas/IO_code/module_hrldas_netcdf_io.F index 38dcdef..99d4c58 100644 --- a/hrldas/IO_code/module_hrldas_netcdf_io.F +++ b/hrldas/IO_code/module_hrldas_netcdf_io.F @@ -751,13 +751,69 @@ subroutine read_crop_input(wrfinput_flnm, & end subroutine read_crop_input +!--------------------------------------------------------------------------------------------------------- + + subroutine read_tile_drain_map(tdinput_flnm, & + xstart, xend, & + ystart, yend, & + td_fraction) + + implicit none + character(len=*), intent(in) :: tdinput_flnm + integer, intent(in) :: xstart, xend, ystart, yend + real, dimension(xstart:xend,ystart:yend), intent(out) :: td_fraction + character(len=24) :: name + integer :: ierr,iret + integer :: ncid, varid + integer :: rank + +#ifdef _PARALLEL_ + call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) + if (ierr /= MPI_SUCCESS) stop "MPI_COMM_RANK" +#else + rank = 0 +#endif + + + ! Open the NetCDF file. + if (rank == 0) write(*,'("tdinput_flnm: ''", A, "''")') trim(tdinput_flnm) +#ifdef _PARALLEL_ + ierr = nf90_open_par(tdinput_flnm, NF90_NOWRITE, MPI_COMM_WORLD, MPI_INFO_NULL, ncid) +#else + ierr = nf90_open(tdinput_flnm, NF90_NOWRITE, ncid) +#endif + if (ierr /= 0) then + write(*,'("read_tile_drain_map: Problem opening tdinput file: ''", A, "''")') trim(tdinput_flnm) +#ifdef _PARALLEL_ + call mpi_finalize(ierr) + if (ierr /= 0) write(*, '("Problem with MPI_finalize.")') +#endif + stop + endif + +! Get Tile Drain Fraction + name = "TD_FRACTION" + iret = nf90_inq_varid(ncid, name, varid) + if (iret == 0) then + ierr = nf90_get_var(ncid, varid, td_fraction, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) + else + write(*,*) "MODULE_HRLDAS_NETCDF_IO: Problem finding variable '"//trim(name)//"' in NetCDF file. Using default values." + endif + +! Close the NetCDF file + ierr = nf90_close(ncid) + if (ierr /= 0) stop "MODULE_NOAHLSM_HRLDAS_INPUT: read_tile_drain_map: NF90_CLOSE" + + end subroutine read_tile_drain_map + !--------------------------------------------------------------------------------------------------------- subroutine read_3d_soil(spatial_filename,xstart, xend,ystart, yend, & nsoil,bexp_3d,smcdry_3d,smcwlt_3d,smcref_3d,smcmax_3d, & dksat_3d,dwsat_3d,psisat_3d,quartz_3d,refdk_2d,refkdt_2d,& irr_frac_2d,irr_har_2d,irr_lai_2d,irr_mad_2d,filoss_2d,sprir_rate_2d,& - micir_rate_2d,firtfac_2d,ir_rain_2d) + micir_rate_2d,firtfac_2d,ir_rain_2d,bvic_2d,axaj_2d,bxaj_2d,xxaj_2d,& + bdvic_2d,gdvic_2d,bbvic_2d,klatfac,tdsmcfac,tddc,tddcoef,tdddrain,tdradi,tdspac) implicit none character(len=*), intent(in) :: spatial_filename @@ -783,7 +839,21 @@ subroutine read_3d_soil(spatial_filename,xstart, xend,ystart, yend, & real, dimension(xstart:xend,ystart:yend), intent(out) :: micir_rate_2d real, dimension(xstart:xend,ystart:yend), intent(out) :: firtfac_2d real, dimension(xstart:xend,ystart:yend), intent(out) :: ir_rain_2d - + real, dimension(xstart:xend,ystart:yend), intent(out) :: bvic_2d + real, dimension(xstart:xend,ystart:yend), intent(out) :: axaj_2d + real, dimension(xstart:xend,ystart:yend), intent(out) :: bxaj_2d + real, dimension(xstart:xend,ystart:yend), intent(out) :: xxaj_2d + real, dimension(xstart:xend,ystart:yend), intent(out) :: bdvic_2d + real, dimension(xstart:xend,ystart:yend), intent(out) :: gdvic_2d + real, dimension(xstart:xend,ystart:yend), intent(out) :: bbvic_2d + real, dimension(xstart:xend,ystart:yend), intent(out) :: klatfac + real, dimension(xstart:xend,ystart:yend), intent(out) :: tdsmcfac + real, dimension(xstart:xend,ystart:yend), intent(out) :: tddc + real, dimension(xstart:xend,ystart:yend), intent(out) :: tddcoef + real, dimension(xstart:xend,ystart:yend), intent(out) :: tdddrain + real, dimension(xstart:xend,ystart:yend), intent(out) :: tdradi + real, dimension(xstart:xend,ystart:yend), intent(out) :: tdspac + character(len=24) :: name character(len=256) :: units integer :: ierr,iret, varid,isoil @@ -1033,6 +1103,148 @@ subroutine read_3d_soil(spatial_filename,xstart, xend,ystart, yend, & iret = nf90_get_var(ncid, varid, ir_rain_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! additional runoff opt_run=6~8 + name = "BVIC" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, bvic_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "AXAJ" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, axaj_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "BXAJ" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, bxaj_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "XXAJ" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, xxaj_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "BDVIC" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, bdvic_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "GDVIC" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, gdvic_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "BBVIC" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, bbvic_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) + +! tile drainage + name = "KLAT_FAC" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, klatfac, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "TDSMC_FAC" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, tdsmcfac, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "TD_DC" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, tddc, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "TD_DCOEF" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, tddcoef, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "TD_DDRAIN" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, tdddrain, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "TD_RADI" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, tdradi, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) +! + name = "TD_SPAC" + iret = nf90_inq_varid(ncid, trim(name), varid) + if (iret /= 0) then + print*, 'ncid = ', ncid + write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename) + stop + endif + + iret = nf90_get_var(ncid, varid, tdspac, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/)) + ! Close the NetCDF file ierr = nf90_close(ncid) diff --git a/hrldas/run/README.namelist b/hrldas/run/README.namelist index 88ea8ba..fa40970 100644 --- a/hrldas/run/README.namelist +++ b/hrldas/run/README.namelist @@ -131,6 +131,14 @@ ! **3 -> original surface and subsurface runoff (free drainage) ! 4 -> BATS surface and subsurface runoff (free drainage) ! 5 -> Miguez-Macho&Fan groundwater scheme (Miguez-Macho et al. 2007 JGR; Fan et al. 2007 JGR) + ! 6 -> Variable Infiltration Capacity Model surface runoff scheme (Wood et al., 1992, JGR) + ! 7 -> Xiananjiang Infiltration and surface runoff scheme ((Jayawardena and Zhou, 2000) + ! 8 -> Dynamic VIC surface runoff scheme (Liang and Xie, 2001) + + DVIC_INFILTRATION_OPTION = 1 ! options for infiltration in dynamic VIC runoff scheme (only works when RUNOFF_OPTION=8, default=1) + ! **1 -> Philip scheme + ! 2 -> Green-Ampt scheme + ! 3 -> Smith-Parlange scheme SURFACE_DRAG_OPTION = 1 ! options for surface layer drag coeff [default = none] @@ -225,5 +233,10 @@ 2 -> micro/drip irrigation 3 -> surface flooding + TILE_DRAINAGE_OPTION = 0, ! options for tile drainage [default = 0] (currently only tested & works with opt_run=3) + geogrid must have been run with GEOGRID.TBL.ARW.noahmp, use with caution + 0 -> No tile drainage + 1 -> Simple drainage + 2 -> Hooghoudt's equation based tile drainage / diff --git a/hrldas/run/SOILPARM.TBL b/hrldas/run/SOILPARM.TBL index b7e499f..c5a97c9 100644 --- a/hrldas/run/SOILPARM.TBL +++ b/hrldas/run/SOILPARM.TBL @@ -1,45 +1,45 @@ Soil Parameters STAS -19,1 'BB DRYSMC F11 MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' -1, 2.79, 0.010, -0.472, 0.339, 0.192, 0.069, 4.66E-5, 2.65E-5, 0.010, 0.92, 'SAND' -2, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 5.14E-6, 0.028, 0.82, 'LOAMY SAND' -3, 4.74, 0.047, -0.569, 0.434, 0.312, 0.141, 5.23E-6, 8.05E-6, 0.047, 0.60, 'SANDY LOAM' -4, 5.33, 0.084, 0.162, 0.476, 0.360, 0.759, 2.81E-6, 2.39E-5, 0.084, 0.25, 'SILT LOAM' -5, 3.86, 0.061, 0.162, 0.484, 0.347, 0.955, 2.18E-6, 1.66E-5, 0.061, 0.10, 'SILT' -6, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 1.43E-5, 0.066, 0.40, 'LOAM' -7, 6.77, 0.069, -1.491, 0.404, 0.315, 0.135, 4.45E-6, 1.01E-5, 0.069, 0.60, 'SANDY CLAY LOAM' -8, 8.72, 0.120, -1.118, 0.464, 0.387, 0.617, 2.03E-6, 2.35E-5, 0.120, 0.10, 'SILTY CLAY LOAM' -9, 8.17, 0.103, -1.297, 0.465, 0.382, 0.263, 2.45E-6, 1.13E-5, 0.103, 0.35, 'CLAY LOAM' -10, 10.73, 0.100, -3.209, 0.406, 0.338, 0.098, 7.22E-6, 1.87E-5, 0.100, 0.52, 'SANDY CLAY' -11, 10.39, 0.126, -1.916, 0.468, 0.404, 0.324, 1.34E-6, 9.64E-6, 0.126, 0.10, 'SILTY CLAY' -12, 11.55, 0.138, -2.138, 0.468, 0.412, 0.468, 9.74E-7, 1.12E-5, 0.138, 0.25, 'CLAY' -13, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 1.43E-5, 0.066, 0.05, 'ORGANIC MATERIAL' -14, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.60, 'WATER' -15, 2.79, 0.006, -1.111, 0.20, 0.17, 0.069, 1.41E-4, 1.36E-4, 0.006, 0.07, 'BEDROCK' -16, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 5.14E-6, 0.028, 0.25, 'OTHER(land-ice)' -17, 11.55, 0.030, -10.472, 0.468, 0.454, 0.468, 9.74E-7, 1.12E-5, 0.030, 0.60, 'PLAYA' -18, 2.79, 0.006, -0.472, 0.200, 0.17, 0.069, 1.41E-4, 1.36E-4, 0.006, 0.52, 'LAVA' -19, 2.79, 0.01, -0.472, 0.339, 0.192, 0.069, 4.66E-5, 2.65E-5, 0.01, 0.92, 'WHITE SAND' +19,1 'BB DRYSMC F11 MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ BVIC AXAJ BXAJ XXAJ BDVIC BBVIC GDVIC ' +1, 2.79, 0.010, -0.472, 0.339, 0.192, 0.069, 4.66E-5, 2.65E-5, 0.010, 0.92, 0.05, 0.009, 0.05, 0.05, 0.05, 1.000, 0.050, 'SAND' +2, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 5.14E-6, 0.028, 0.82, 0.08, 0.010, 0.08, 0.08, 0.08, 1.010, 0.070, 'LOAMY SAND' +3, 4.74, 0.047, -0.569, 0.434, 0.312, 0.141, 5.23E-6, 8.05E-6, 0.047, 0.60, 0.09, 0.009, 0.09, 0.09, 0.09, 1.020, 0.130, 'SANDY LOAM' +4, 5.33, 0.084, 0.162, 0.476, 0.360, 0.759, 2.81E-6, 2.39E-5, 0.084, 0.25, 0.25, 0.010, 0.25, 0.25, 0.25, 1.025, 0.200, 'SILT LOAM' +5, 3.86, 0.061, 0.162, 0.484, 0.347, 0.955, 2.18E-6, 1.66E-5, 0.061, 0.10, 0.15, 0.012, 0.15, 0.15, 0.15, 1.000, 0.170, 'SILT' +6, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 1.43E-5, 0.066, 0.40, 0.18, 0.013, 0.18, 0.18, 0.18, 1.000, 0.110, 'LOAM' +7, 6.77, 0.069, -1.491, 0.404, 0.315, 0.135, 4.45E-6, 1.01E-5, 0.069, 0.60, 0.20, 0.014, 0.20, 0.20, 0.20, 1.032, 0.260, 'SANDY CLAY LOAM' +8, 8.72, 0.120, -1.118, 0.464, 0.387, 0.617, 2.03E-6, 2.35E-5, 0.120, 0.10, 0.22, 0.015, 0.22, 0.22, 0.22, 1.035, 0.350, 'SILTY CLAY LOAM' +9, 8.17, 0.103, -1.297, 0.465, 0.382, 0.263, 2.45E-6, 1.13E-5, 0.103, 0.35, 0.23, 0.016, 0.23, 0.23, 0.23, 1.040, 0.260, 'CLAY LOAM' +10, 10.73, 0.100, -3.209, 0.406, 0.338, 0.098, 7.22E-6, 1.87E-5, 0.100, 0.52, 0.25, 0.015, 0.25, 0.25, 0.25, 1.042, 0.300, 'SANDY CLAY' +11, 10.39, 0.126, -1.916, 0.468, 0.404, 0.324, 1.34E-6, 9.64E-6, 0.126, 0.10, 0.28, 0.016, 0.28, 0.28, 0.28, 1.045, 0.380, 'SILTY CLAY' +12, 11.55, 0.138, -2.138, 0.468, 0.412, 0.468, 9.74E-7, 1.12E-5, 0.138, 0.25, 0.30, 0.017, 0.30, 0.30, 0.30, 1.000, 0.410, 'CLAY' +13, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 1.43E-5, 0.066, 0.05, 0.26, 0.012, 0.26, 0.26, 0.26, 1.000, 0.500, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.60, 0.00, 0.001, 0.00, 0.00, 0.00, 1.000, 0.001, 'WATER' +15, 2.79, 0.006, -1.111, 0.20, 0.17, 0.069, 1.41E-4, 1.36E-4, 0.006, 0.07, 1.00, 0.017, 1.00, 1.00, 1.00, 1.000, 0.010, 'BEDROCK' +16, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 5.14E-6, 0.028, 0.25, 1.00, 0.017, 1.00, 1.00, 1.00, 1.000, 0.001, 'OTHER(land-ice)' +17, 11.55, 0.030, -10.472, 0.468, 0.454, 0.468, 9.74E-7, 1.12E-5, 0.030, 0.60, 1.00, 0.017, 1.00, 1.00, 1.00, 1.000, 0.001, 'PLAYA' +18, 2.79, 0.006, -0.472, 0.200, 0.17, 0.069, 1.41E-4, 1.36E-4, 0.006, 0.52, 0.35, 0.015, 0.35, 0.35, 0.35, 1.000, 0.050, 'LAVA' +19, 2.79, 0.01, -0.472, 0.339, 0.192, 0.069, 4.66E-5, 2.65E-5, 0.01, 0.92, 0.15, 0.009, 0.15, 0.15, 0.15, 1.000, 0.020, 'WHITE SAND' Soil Parameters STAS-RUC -19,1 'BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' -1, 4.05, 0.002, 1.47, 0.395, 0.174, 0.121, 1.76E-4, 0.608E-6, 0.033, 0.92, 'SAND' -2, 4.38, 0.035, 1.41, 0.410, 0.179, 0.090, 1.56E-4, 0.514E-5, 0.055, 0.82, 'LOAMY SAND' -3, 4.90, 0.041, 1.34, 0.435, 0.249, 0.218, 3.47E-5, 0.805E-5, 0.095, 0.60, 'SANDY LOAM' -4, 5.30, 0.034, 1.27, 0.485, 0.369, 0.786, 7.20E-6, 0.239E-4, 0.143, 0.25, 'SILT LOAM' -5, 5.30, 0.034, 1.27, 0.485, 0.369, 0.786, 7.20E-6, 0.239E-4, 0.143, 0.10, 'SILT' -6, 5.39, 0.050, 1.21, 0.451, 0.314, 0.478, 6.95E-6, 0.143E-4, 0.137, 0.40, 'LOAM' -7, 7.12, 0.068, 1.18, 0.420, 0.299, 0.299, 6.30E-6, 0.990E-5, 0.148, 0.60, 'SANDY CLAY LOAM' -8, 7.75, 0.060, 1.32, 0.477, 0.357, 0.356, 1.70E-6, 0.237E-4, 0.170, 0.10, 'SILTY CLAY LOAM' -9, 5.39, 0.050, 1.21, 0.451, 0.314, 0.478, 6.95E-6, 0.143E-4, 0.137, 0.40, 'CLAY LOAM' -10, 10.40, 0.070, 1.18, 0.426, 0.316, 0.153, 2.17E-6, 0.187E-4, 0.158, 0.52, 'SANDY CLAY' -11, 10.40, 0.070, 1.15, 0.492, 0.409, 0.490, 1.03E-6, 0.964E-5, 0.190, 0.10, 'SILTY CLAY' -12, 11.40, 0.068, 1.09, 0.482, 0.400, 0.405, 1.28E-6, 0.112E-4, 0.198, 0.25, 'CLAY' -13, 5.39, 0.027, 1.21, 0.451, 0.314, 0.478, 6.95E-6, 0.143E-4, 0.117, 0.05, 'ORGANIC MATERIAL' -14, 0.0, 0.0, 4.18, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.00, 'WATER' -15, 4.05, 0.004, 2.03, 0.200, 0.10 , 0.121, 1.41E-4, 0.136E-3, 0.006, 0.60, 'BEDROCK' -16, 4.90, 0.065, 2.10, 0.435, 0.249, 0.218, 3.47E-5, 0.514E-5, 0.114, 0.05, 'OTHER(land-ice)' -17, 11.40, 0.030, 1.41, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' -18, 4.05, 0.006, 1.41, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.52, 'LAVA' -19, 4.05, 0.01, 1.47, 0.339, 0.236, 0.069, 1.76E-4, 0.608E-6, 0.060, 0.92, 'WHITE SAND' +19,1 'BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ BVIC AXAJ BXAJ XXAJ BDVIC BBVIC GDVIC ' +1, 4.05, 0.002, 1.47, 0.395, 0.174, 0.121, 1.76E-4, 0.608E-6, 0.033, 0.92, 0.05, 0.009, 0.05, 0.05, 0.05, 1.000, 0.050, 'SAND' +2, 4.38, 0.035, 1.41, 0.410, 0.179, 0.090, 1.56E-4, 0.514E-5, 0.055, 0.82, 0.08, 0.010, 0.08, 0.08, 0.08, 1.010, 0.070, 'LOAMY SAND' +3, 4.90, 0.041, 1.34, 0.435, 0.249, 0.218, 3.47E-5, 0.805E-5, 0.095, 0.60, 0.09, 0.009, 0.09, 0.09, 0.09, 1.020, 0.130, 'SANDY LOAM' +4, 5.30, 0.034, 1.27, 0.485, 0.369, 0.786, 7.20E-6, 0.239E-4, 0.143, 0.25, 0.10, 0.010, 0.25, 0.25, 0.10, 1.025, 0.200, 'SILT LOAM' +5, 5.30, 0.034, 1.27, 0.485, 0.369, 0.786, 7.20E-6, 0.239E-4, 0.143, 0.10, 0.15, 0.012, 0.15, 0.15, 0.15, 1.000, 0.170, 'SILT' +6, 5.39, 0.050, 1.21, 0.451, 0.314, 0.478, 6.95E-6, 0.143E-4, 0.137, 0.40, 0.18, 0.013, 0.18, 0.18, 0.18, 1.000, 0.110, 'LOAM' +7, 7.12, 0.068, 1.18, 0.420, 0.299, 0.299, 6.30E-6, 0.990E-5, 0.148, 0.60, 0.20, 0.014, 0.20, 0.20, 0.20, 1.032, 0.260, 'SANDY CLAY LOAM' +8, 7.75, 0.060, 1.32, 0.477, 0.357, 0.356, 1.70E-6, 0.237E-4, 0.170, 0.10, 0.22, 0.015, 0.22, 0.22, 0.22, 1.035, 0.350, 'SILTY CLAY LOAM' +9, 5.39, 0.050, 1.21, 0.451, 0.314, 0.478, 6.95E-6, 0.143E-4, 0.137, 0.40, 0.23, 0.016, 0.23, 0.23, 0.23, 1.040, 0.260, 'CLAY LOAM' +10, 10.40, 0.070, 1.18, 0.426, 0.316, 0.153, 2.17E-6, 0.187E-4, 0.158, 0.52, 0.25, 0.015, 0.25, 0.25, 0.25, 1.042, 0.300, 'SANDY CLAY' +11, 10.40, 0.070, 1.15, 0.492, 0.409, 0.490, 1.03E-6, 0.964E-5, 0.190, 0.10, 0.28, 0.016, 0.28, 0.28, 0.28, 1.045, 0.380, 'SILTY CLAY' +12, 11.40, 0.068, 1.09, 0.482, 0.400, 0.405, 1.28E-6, 0.112E-4, 0.198, 0.25, 0.30, 0.017, 0.30, 0.30, 0.30, 1.000, 0.410, 'CLAY' +13, 5.39, 0.027, 1.21, 0.451, 0.314, 0.478, 6.95E-6, 0.143E-4, 0.117, 0.05, 0.26, 0.012, 0.26, 0.26, 0.26, 1.000, 0.500, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 4.18, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.00, 0.00, 0.001, 0.00, 0.00, 0.00, 1.000, 0.001, 'WATER' +15, 4.05, 0.004, 2.03, 0.200, 0.10 , 0.121, 1.41E-4, 0.136E-3, 0.006, 0.60, 1.00, 0.017, 1.00, 1.00, 1.00, 1.000, 0.010, 'BEDROCK' +16, 4.90, 0.065, 2.10, 0.435, 0.249, 0.218, 3.47E-5, 0.514E-5, 0.114, 0.05, 1.00, 0.017, 1.00, 1.00, 1.00, 1.000, 0.001, 'OTHER(land-ice)' +17, 11.40, 0.030, 1.41, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 1.00, 0.017, 1.00, 1.00, 1.00, 1.000, 0.001, 'PLAYA' +18, 4.05, 0.006, 1.41, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.52, 0.35, 0.015, 0.35, 0.35, 0.35, 1.000, 0.050, 'LAVA' +19, 4.05, 0.01, 1.47, 0.339, 0.236, 0.069, 1.76E-4, 0.608E-6, 0.060, 0.92, 0.15, 0.009, 0.15, 0.15, 0.15, 1.000, 0.020, 'WHITE SAND' diff --git a/hrldas/run/examples/GLDAS/namelist.hrldas.GLDAS b/hrldas/run/examples/GLDAS/namelist.hrldas.GLDAS index 7106308..534ff80 100644 --- a/hrldas/run/examples/GLDAS/namelist.hrldas.GLDAS +++ b/hrldas/run/examples/GLDAS/namelist.hrldas.GLDAS @@ -21,6 +21,7 @@ CANOPY_STOMATAL_RESISTANCE_OPTION = 1 BTR_OPTION = 1 RUNOFF_OPTION = 3 + DVIC_INFILTRATION_OPTION = 1 SURFACE_DRAG_OPTION = 1 FROZEN_SOIL_OPTION = 1 SUPERCOOLED_WATER_OPTION = 1 @@ -36,6 +37,7 @@ CROP_OPTION = 0 IRRIGATION_OPTION = 0 IRRIGATION_METHOD = 0 + TILE_DRAINAGE_OPTION = 0 FORCING_TIMESTEP = 3600 NOAH_TIMESTEP = 1800 diff --git a/hrldas/run/examples/NARR/namelist.hrldas.NARR b/hrldas/run/examples/NARR/namelist.hrldas.NARR index 3a449dc..03f84d0 100644 --- a/hrldas/run/examples/NARR/namelist.hrldas.NARR +++ b/hrldas/run/examples/NARR/namelist.hrldas.NARR @@ -21,6 +21,7 @@ CANOPY_STOMATAL_RESISTANCE_OPTION = 1 BTR_OPTION = 1 RUNOFF_OPTION = 3 + DVIC_INFILTRATION_OPTION = 1 SURFACE_DRAG_OPTION = 1 FROZEN_SOIL_OPTION = 1 SUPERCOOLED_WATER_OPTION = 1 @@ -36,6 +37,7 @@ CROP_OPTION = 0 IRRIGATION_OPTION = 0 IRRIGATION_METHOD = 0 + TILE_DRAINAGE_OPTION = 0 FORCING_TIMESTEP = 3600 NOAH_TIMESTEP = 1800 diff --git a/hrldas/run/examples/NLDAS/namelist.hrldas.NLDAS b/hrldas/run/examples/NLDAS/namelist.hrldas.NLDAS index 7ddd9e2..2518853 100644 --- a/hrldas/run/examples/NLDAS/namelist.hrldas.NLDAS +++ b/hrldas/run/examples/NLDAS/namelist.hrldas.NLDAS @@ -21,6 +21,7 @@ CANOPY_STOMATAL_RESISTANCE_OPTION = 1 BTR_OPTION = 1 RUNOFF_OPTION = 3 + DVIC_INFILTRATION_OPTION = 1 SURFACE_DRAG_OPTION = 1 FROZEN_SOIL_OPTION = 1 SUPERCOOLED_WATER_OPTION = 1 @@ -36,6 +37,7 @@ CROP_OPTION = 0 IRRIGATION_OPTION = 0 IRRIGATION_METHOD = 0 + TILE_DRAINAGE_OPTION = 0 FORCING_TIMESTEP = 3600 NOAH_TIMESTEP = 1800 diff --git a/hrldas/run/examples/single_point/namelist.hrldas.single_point b/hrldas/run/examples/single_point/namelist.hrldas.single_point index 3bc3c1a..36edf52 100644 --- a/hrldas/run/examples/single_point/namelist.hrldas.single_point +++ b/hrldas/run/examples/single_point/namelist.hrldas.single_point @@ -19,6 +19,7 @@ CANOPY_STOMATAL_RESISTANCE_OPTION = 1 BTR_OPTION = 1 RUNOFF_OPTION = 3 + DVIC_INFILTRATION_OPTION = 1 SURFACE_DRAG_OPTION = 1 FROZEN_SOIL_OPTION = 1 SUPERCOOLED_WATER_OPTION = 1 @@ -34,6 +35,7 @@ CROP_OPTION = 0 IRRIGATION_OPTION = 0 IRRIGATION_METHOD = 0 + TILE_DRAINAGE_OPTION = 0 FORCING_TIMESTEP = 3600 NOAH_TIMESTEP = 1800 diff --git a/hrldas/run/examples/vector/namelist.hrldas.vector b/hrldas/run/examples/vector/namelist.hrldas.vector index efba8cb..7d2795c 100644 --- a/hrldas/run/examples/vector/namelist.hrldas.vector +++ b/hrldas/run/examples/vector/namelist.hrldas.vector @@ -20,6 +20,7 @@ CANOPY_STOMATAL_RESISTANCE_OPTION = 1 BTR_OPTION = 1 RUNOFF_OPTION = 3 + DVIC_INFILTRATION_OPTION = 1 SURFACE_DRAG_OPTION = 1 FROZEN_SOIL_OPTION = 1 SUPERCOOLED_WATER_OPTION = 1 @@ -35,6 +36,7 @@ CROP_OPTION = 0 IRRIGATION_OPTION = 0 IRRIGATION_METHOD = 0 + TILE_DRAINAGE_OPTION = 0 FORCING_TIMESTEP = 3600 NOAH_TIMESTEP = 1800 diff --git a/noahmp b/noahmp index 331cff1..64d1d41 160000 --- a/noahmp +++ b/noahmp @@ -1 +1 @@ -Subproject commit 331cff1e18509edad6ea5039ec1093bc21e0d694 +Subproject commit 64d1d418996ff7efb9ec548ee42ef80efafb26b5 diff --git a/wrf/phys/module_sf_noahmpdrv.F b/wrf/phys/module_sf_noahmpdrv.F index 581fa01..e99d839 100644 --- a/wrf/phys/module_sf_noahmpdrv.F +++ b/wrf/phys/module_sf_noahmpdrv.F @@ -17,7 +17,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN IDVEG, IOPT_CRS, IOPT_BTR, IOPT_RUN, IOPT_SFC, IOPT_FRZ, & ! IN : User options IOPT_INF, IOPT_RAD, IOPT_ALB, IOPT_SNF,IOPT_TBOT, IOPT_STC, & ! IN : User options IOPT_GLA, IOPT_RSF, IOPT_SOIL,IOPT_PEDO,IOPT_CROP, IOPT_IRR, & ! IN : User options - IOPT_IRRM, & ! IN : User options + IOPT_IRRM, IOPT_INFDV, IOPT_TDRN, & ! IN : User options IZ0TLND, SF_URBAN_PHYSICS, & ! IN : User options SOILCOMP, SOILCL1, SOILCL2, SOILCL3, SOILCL4, & ! IN : User options T3D, QV3D, U_PHY, V_PHY, SWDOWN, SWDDIR,& @@ -38,6 +38,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN WOODXY, STBLCPXY, FASTCPXY, XLAIXY, XSAIXY, TAUSSXY, & ! IN/OUT Noah MP only SMOISEQ, SMCWTDXY,DEEPRECHXY, RECHXY, GRAINXY, GDDXY,PGSXY, & ! IN/OUT Noah MP only GECROS_STATE, & ! IN/OUT gecros model + QTDRAIN, TD_FRACTION, & ! IN/OUT tile drainage T2MVXY, T2MBXY, Q2MVXY, Q2MBXY, & ! OUT Noah MP only TRADXY, NEEXY, GPPXY, NPPXY, FVEGXY, RUNSFXY, & ! OUT Noah MP only RUNSBXY, ECANXY, EDIRXY, ETRANXY, FSAXY, FIRAXY, & ! OUT Noah MP only @@ -49,10 +50,12 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN ! BEXP_3D,SMCDRY_3D,SMCWLT_3D,SMCREF_3D,SMCMAX_3D, & ! placeholders to activate 3D soil ! DKSAT_3D,DWSAT_3D,PSISAT_3D,QUARTZ_3D, & ! REFDK_2D,REFKDT_2D, & -! IRR_FRAC_2D,IRR_HAR_2D,IRR_LAI_2D,IRR_MAD_2D,FILOSS_2D, & -! SPRIR_RATE_2D,MICIR_RATE_2D,FIRTFAC_2D,IR_RAIN_2D, & +! IRR_FRAC_2D,IRR_HAR_2D,IRR_LAI_2D,IRR_MAD_2D,FILOSS_2D, & +! SPRIR_RATE_2D,MICIR_RATE_2D,FIRTFAC_2D,IR_RAIN_2D, & +! BVIC_2D,AXAJ_2D,BXAJ_2D,XXAJ_2D,BDVIC_2D,GDVIC_2D,BBVIC_2D,& +! KLAT_FAC,TDSMC_FAC,TD_DC,TD_DCOEF,TD_DDRAIN,TD_RADI,TD_SPAC, & #ifdef WRF_HYDRO - sfcheadrt,INFXSRT,soldrain, & + sfcheadrt,INFXSRT,soldrain,qtiledrain,ZWATBLE2D, & #endif ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & @@ -112,6 +115,8 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN INTEGER, INTENT(IN ) :: IOPT_CROP ! crop model option (0->none; 1->Liu et al.; 2->Gecros) INTEGER, INTENT(IN ) :: IOPT_IRR ! irrigation scheme (0->none; >1 irrigation scheme ON) INTEGER, INTENT(IN ) :: IOPT_IRRM ! irrigation method + INTEGER, INTENT(IN ) :: IOPT_INFDV! infiltration options for dynamic VIC infiltration (1->Philip; 2-> Green-Ampt;3->Smith-Parlange) + INTEGER, INTENT(IN ) :: IOPT_TDRN ! tile drainage (0-> no tile drainage; 1-> simple tile drainage;2->Hooghoudt's) INTEGER, INTENT(IN ) :: IZ0TLND ! option of Chen adjustment of Czil (not used) INTEGER, INTENT(IN ) :: sf_urban_physics ! urban physics option REAL, DIMENSION( ims:ime, 8, jms:jme ), INTENT(IN ) :: SOILCOMP ! soil sand and clay percentage @@ -149,10 +154,14 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN INTEGER, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: PGSXY ! gecros model - REAL, DIMENSION( ims:ime, 60,jms:jme ), INTENT(INOUT) :: gecros_state ! gecros crop + REAL, DIMENSION( ims:ime, 60,jms:jme ), INTENT(INOUT) :: gecros_state ! gecros crop + +!Tile drain variables + REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QTDRAIN + REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: TD_FRACTION #ifdef WRF_HYDRO - REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: sfcheadrt,INFXSRT,soldrain ! for WRF-Hydro + REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: sfcheadrt,INFXSRT,soldrain,qtiledrain,ZWATBLE2D ! for WRF-Hydro #endif ! placeholders for 3D soil ! REAL, DIMENSION( ims:ime, 1:nsoil, jms:jme ), INTENT(IN) :: BEXP_3D ! C-H B exponent @@ -166,6 +175,13 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN ! REAL, DIMENSION( ims:ime, 1:nsoil, jms:jme ), INTENT(IN) :: QUARTZ_3D ! Soil quartz content ! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: REFDK_2D ! Reference Soil Conductivity ! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: REFKDT_2D ! Soil Infiltration Parameter +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: BVIC_2D ! VIC model infiltration parameter [-] for opt_run=6 +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: AXAJ_2D ! Xinanjiang: Tension water distribution inflection parameter [-] for opt_run=7 +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: BXAJ_2D ! Xinanjiang: Tension water distribution shape parameter [-] for opt_run=7 +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: XXAJ_2D ! Xinanjiang: Free water distribution shape parameter [-] for opt_run=7 +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: BDVIC_2D ! VIC model infiltration parameter [-] +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: GDVIC_2D ! Mean Capillary Drive (m) for infiltration models +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: BBVIC_2D ! DVIC heterogeniety paramater [-] ! placeholders for 2D irrigation parameters ! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: IRR_FRAC_2D ! irrigation Fraction @@ -178,6 +194,15 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN ! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: FIRTFAC_2D ! flood application rate factor ! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: IR_RAIN_2D ! maximum precipitation to stop irrigation trigger +! placeholders for 2D tile drainage parameters +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: KLAT_FAC ! factor multiplier to hydraulic conductivity +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: TDSMC_FAC ! factor multiplier to field capacity +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: TD_DC ! drainage coefficient for simple +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: TD_DCOEF ! drainge coefficient for Hooghoudt +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: TD_DDRAIN ! depth of drain +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: TD_RADI ! tile radius +! REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: TD_SPAC ! tile spacing + ! INOUT (with generic LSM equivalent) REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TSK ! surface radiative temperature [K] @@ -411,6 +436,13 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN REAL :: PSAI ! stem area index REAL :: TAUSS ! non-dimensional snow age +! tile drainage + REAL :: QTLDRN ! tile drainage (mm) + REAL :: TDFRACMP ! tile drainage map +#ifdef WRF_HYDRO + REAL :: WATBLED ! water table depth for tile drainage +#endif + ! OUT (with no Noah LSM equivalent) REAL :: Z0WRF ! combined z0 sent to coupled model @@ -522,8 +554,9 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN ! ---------------------------------------------------------------------- CALL NOAHMP_OPTIONS(IDVEG ,IOPT_CRS ,IOPT_BTR ,IOPT_RUN ,IOPT_SFC ,IOPT_FRZ , & - IOPT_INF ,IOPT_RAD ,IOPT_ALB ,IOPT_SNF ,IOPT_TBOT, IOPT_STC , & - IOPT_RSF ,IOPT_SOIL ,IOPT_PEDO ,IOPT_CROP ,IOPT_IRR ,IOPT_IRRM) + IOPT_INF ,IOPT_RAD ,IOPT_ALB ,IOPT_SNF ,IOPT_TBOT, IOPT_STC , & + IOPT_RSF ,IOPT_SOIL ,IOPT_PEDO ,IOPT_CROP ,IOPT_IRR , IOPT_IRRM , & + IOPT_INFDV,IOPT_TDRN ) IPRINT = .false. ! debug printout @@ -694,6 +727,13 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN RECH = 0. DEEPRECH = 0. +! tile drainage + QTLDRN = 0. ! tile drainage (mm) + TDFRACMP = TD_FRACTION(I,J) ! tile drainage map +#ifdef WRF_HYDRO + WATBLED = ZWATBLE2D (I,J) ! water table depth for tile drainage +#endif + ! irrigation vars IRRFRA = IRFRACT(I,J) ! irrigation fraction SIFAC = SIFRACT(I,J) ! sprinkler irrigation fraction @@ -777,6 +817,15 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN ! parameters%refdk = REFDK_2D (I,J) ! Reference Soil Conductivity ! parameters%refkdt = REFKDT_2D(I,J) ! Soil Infiltration Parameter +! placeholders for 2D additional runoff parameters +! parameters%BVIC = BVIC_2D(I,J) ! VIC model infiltration parameter [-] +! parameters%axaj = AXAJ_2D(I,J) ! Xinanjiang: Tension water distribution inflection parameter [-] +! parameters%bxaj = BXAJ_2D(I,J) ! Xinanjiang: Tension water distribution shape parameter [-] +! parameters%xxaj = XXAJ_2D(I,J) ! Xinanjiang: Free water distribution shape parameter [-] +! parameters%BDVIC = BDVIC_2D(I,J) ! VIC model infiltration parameter [-] +! parameters%GDVIC = GDVIC_2D(I,J) ! Mean Capillary Drive for infiltration models [m] +! parameters%BBVIC = BBVIC_2D(I,J) ! DVIC heterogeniety parameter for infiltraton [-] + ! placeholders for 2D irrigation params ! parameters%IRR_FRAC = IRR_FRAC_2D(I,J) ! irrigation Fraction ! parameters%IRR_HAR = IRR_HAR_2D(I,J) ! number of days before harvest date to stop irrigation @@ -788,6 +837,16 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN ! parameters%FIRTFAC = FIRTFAC_2D(I,J) ! flood application rate factor ! parameters%IR_RAIN = IR_RAIN_2D(I,J) ! maximum precipitation to stop irrigation trigger +! placeholders for 2D tile drainage parameters +! parameters%klat_fac = KLAT_FAC (I,J) ! factor multiplier to hydraulic conductivity +! parameters%tdsmc_fac = TDSMC_FAC(I,J) ! factor multiplier to field capacity +! parameters%td_dc = TD_DC (I,J) ! drainage coefficient for simple +! parameters%td_dcoef = TD_DCOEF (I,J) ! drainge coefficient for Hooghoudt +! parameters%td_ddrain = TD_DDRAIN(I,J) ! depth of drain +! parameters%td_radi = TD_RADI (I,J) ! tile radius +! parameters%td_spac = TD_SPAC (I,J) ! tile spacing + + CALL TRANSFER_MP_PARAMETERS(VEGTYP,SOILTYP,SLOPETYP,SOILCOLOR,CROPTYPE,parameters) if(iopt_soil == 3 .and. .not. parameters%urban_flag) then @@ -889,6 +948,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN RTMASS = undefined_value STMASS = undefined_value WOOD = undefined_value + QTLDRN = undefined_value GRAIN = undefined_value GDD = undefined_value STBLCP = undefined_value @@ -962,6 +1022,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN GRAIN , GDD , PGS , & ! IN/OUT SMCWTD ,DEEPRECH , RECH , & ! IN/OUT : GECROS1D, & ! IN/OUT : + QTLDRN , TDFRACMP, & ! IN/OUT : tile drainage Z0WRF , & IRCNTSI , IRCNTMI , IRCNTFI , IRAMTSI , IRAMTMI , IRAMTFI , & ! IN/OUT : Irrigation: vars IRSIRATE, IRMIRATE, IRFIRATE, FIRR , EIRR , & ! IN/OUT : Irrigation: vars @@ -978,7 +1039,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN CHLEAF , CHUC , CHV2 , CHB2 , FPICE , PAHV , & PAHG , PAHB , PAH , LAISUN , LAISHA , RB & #ifdef WRF_HYDRO - , sfcheadrt(i,j) & + , sfcheadrt(i,j), WATBLED & #endif ) ! OUT : @@ -992,6 +1053,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN ! This will crash channel routing, so only pass along positive runoff. soldrain(i,j) = max(RUNSB*dt, 0.) !mm , underground runoff INFXSRT(i,j) = RUNSF*dt !mm , surface runoff + qtiledrain (i,j) = QTLDRN*dt !mm, tile drainage #endif @@ -1002,8 +1064,9 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN GRDFLX (I,J) = SSOIL SMSTAV (I,J) = 0.0 ! [maintained as Noah consistency] SMSTOT (I,J) = 0.0 ! [maintained as Noah consistency] - SFCRUNOFF(I,J) = SFCRUNOFF(I,J) + RUNSF * DT - UDRUNOFF (I,J) = UDRUNOFF(I,J) + RUNSB * DT + SFCRUNOFF(I,J) = SFCRUNOFF(I,J) + RUNSF * DT + UDRUNOFF (I,J) = UDRUNOFF(I,J) + RUNSB * DT + QTDRAIN (I,J) = QTDRAIN (I,J) + QTLDRN * DT IF ( SALB > -999 ) THEN ALBEDO(I,J) = SALB ENDIF @@ -1362,10 +1425,16 @@ SUBROUTINE TRANSFER_MP_PARAMETERS(VEGTYPE,SOILTYPE,SLOPETYPE,SOILCOLOR,CROPTYPE, parameters%SMCREF(isoil) = SMCREF_TABLE (SOILTYPE(isoil)) parameters%SMCWLT(isoil) = SMCWLT_TABLE (SOILTYPE(isoil)) end do - parameters%F1 = F1_TABLE(SOILTYPE(1)) parameters%REFDK = REFDK_TABLE parameters%REFKDT = REFKDT_TABLE + parameters%BVIC = BVIC_TABLE(SOILTYPE(1)) + parameters%AXAJ = AXAJ_TABLE(SOILTYPE(1)) + parameters%BXAJ = BXAJ_TABLE(SOILTYPE(1)) + parameters%XXAJ = XXAJ_TABLE(SOILTYPE(1)) + parameters%BDVIC = BDVIC_TABLE(SOILTYPE(1)) + parameters%GDVIC = GDVIC_TABLE(SOILTYPE(1)) + parameters%BBVIC = BBVIC_TABLE(SOILTYPE(1)) !------------------------------------------------------------------------------------------! ! Transfer irrigation parameters @@ -1380,6 +1449,21 @@ SUBROUTINE TRANSFER_MP_PARAMETERS(VEGTYPE,SOILTYPE,SLOPETYPE,SOILCOLOR,CROPTYPE, parameters%FIRTFAC = FIRTFAC_TABLE ! flood application rate factor parameters%IR_RAIN = IR_RAIN_TABLE ! maximum precipitation to stop irrigation trigger +!------------------------------------------------------------------------------------------! +! Transfer tiledrain parameters +!------------------------------------------------------------------------------------------! + parameters%KLAT_FAC = KLAT_FAC_TABLE(SOILTYPE(1)) + parameters%TDSMC_FAC = TDSMCFAC_TABLE(SOILTYPE(1)) + parameters%TD_DC = TD_DC_TABLE(SOILTYPE(1)) + parameters%TD_DCOEF = TD_DCOEF_TABLE(SOILTYPE(1)) + parameters%TD_RADI = TD_RADI_TABLE(SOILTYPE(1)) + parameters%TD_SPAC = TD_SPAC_TABLE(SOILTYPE(1)) + parameters%TD_DDRAIN = TD_DDRAIN_TABLE(SOILTYPE(1)) + parameters%TD_DEPTH = TD_DEPTH_TABLE(SOILTYPE(1)) + parameters%TD_ADEPTH = TD_ADEPTH_TABLE(SOILTYPE(1)) + parameters%DRAIN_LAYER_OPT = DRAIN_LAYER_OPT_TABLE + parameters%TD_D = TD_D_TABLE(SOILTYPE(1)) + ! ---------------------------------------------------------------------- ! Transfer GENPARM parameters ! ---------------------------------------------------------------------- @@ -1545,7 +1629,7 @@ SUBROUTINE NOAHMP_INIT ( MMINLU, SNOW , SNOWH , CANWAT , ISLTYP , IVGTYP, XLAT ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte, & - smoiseq ,smcwtdxy ,rechxy ,deeprechxy, areaxy, dx, dy, msftx, msfty,& ! Optional groundwater + smoiseq ,smcwtdxy ,rechxy ,deeprechxy, qtdrain, areaxy, dx, dy, msftx, msfty,& ! Optional groundwater wtddt ,stepwtd ,dt ,qrfsxy ,qspringsxy , qslatxy , & ! Optional groundwater fdepthxy ,ht ,riverbedxy ,eqzwt ,rivercondxy ,pexpxy , & ! Optional groundwater rechclim, & ! Optional groundwater @@ -1626,6 +1710,7 @@ SUBROUTINE NOAHMP_INIT ( MMINLU, SNOW , SNOWH , CANWAT , ISLTYP , IVGTYP, XLAT REAL, DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: fastcpxy !short-lived carbon, shallow soil [g/m2] REAL, DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: xsaixy !stem area index REAL, DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: lai !leaf area index + REAL, DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: qtdrain !tile drainage (mm) INTEGER, DIMENSION(ims:ime, jms:jme), INTENT(OUT) :: cropcat REAL , DIMENSION(ims:ime,5,jms:jme), INTENT(IN ) :: croptype @@ -1699,6 +1784,7 @@ SUBROUTINE NOAHMP_INIT ( MMINLU, SNOW , SNOWH , CANWAT , ISLTYP , IVGTYP, XLAT call read_mp_rad_parameters() call read_mp_global_parameters() call read_mp_crop_parameters() + call read_tiledrain_parameters() call read_mp_optional_parameters() if(iopt_irr >= 1) call read_mp_irrigation_parameters() @@ -1809,6 +1895,7 @@ SUBROUTINE NOAHMP_INIT ( MMINLU, SNOW , SNOWH , CANWAT , ISLTYP , IVGTYP, XLAT DO J = jts,jtf DO I = its,itf + qtdrain (I,J) = 0. tvxy (I,J) = TSK(I,J) if(snow(i,j) > 0.0 .and. tsk(i,j) > 273.15) tvxy(I,J) = 273.15 tgxy (I,J) = TSK(I,J)