diff --git a/HRLDAS/IO_code/module_NoahMP_hrldas_driver.F b/HRLDAS/IO_code/module_NoahMP_hrldas_driver.F index aa5688b..8588753 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 @@ -80,6 +80,7 @@ module module_NoahMP_hrldas_driver INTEGER :: IOPT_SOIL ! soil configuration option INTEGER :: IOPT_PEDO ! soil pedotransfer function option INTEGER :: IOPT_CROP ! crop model option (0->none; 1->Liu et al.; 2->Gecros) + INTEGER :: IOPT_TDRN ! drainage option (0->none; 1->on) 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] @@ -115,7 +116,14 @@ module module_NoahMP_hrldas_driver REAL, ALLOCATABLE, DIMENSION(:,:) :: soilcl2 ! Soil texture class with depth REAL, ALLOCATABLE, DIMENSION(:,:) :: soilcl3 ! Soil texture class with depth REAL, ALLOCATABLE, DIMENSION(:,:) :: soilcl4 ! Soil texture class with depth - + ! tile drainage + 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) REAL, ALLOCATABLE, DIMENSION(:,:) :: TSK ! surface radiative temperature [K] @@ -231,6 +239,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 @@ -277,7 +286,13 @@ module module_NoahMP_hrldas_driver REAL , ALLOCATABLE, DIMENSION(:,:) :: HARVEST REAL , ALLOCATABLE, DIMENSION(:,:) :: SEASON_GDD REAL , ALLOCATABLE, DIMENSION(:,:,:) :: CROPTYPE - + +!------------------------------------------------------------------------ +! Needed for TILE DRAINAGE IF IOPT_TDRN = 1 OR 2 +!------------------------------------------------------------------------ + + REAL, ALLOCATABLE, DIMENSION(:,:) :: TD_FRACTION + !------------------------------------------------------------------------ ! Single- and Multi-layer Urban Models !------------------------------------------------------------------------ @@ -547,14 +562,16 @@ module module_NoahMP_hrldas_driver integer :: soil_data_option = 1 integer :: pedotransfer_option = 1 integer :: crop_option = 0 - + integer :: drainage_option=0 + integer :: split_output_count = 1 logical :: skip_first_output = .false. integer :: khour integer :: kday real :: zlvl character(len=256) :: hrldas_setup_file = " " - character(len=256) :: spatial_filename = " " + character(len=256) :: spatial_filename = " " + character(len=256) :: tdinput_flnm = " " character(len=256) :: external_veg_filename_template = " " character(len=256) :: external_lai_filename_template = " " integer :: xstart = 1 @@ -582,7 +599,7 @@ module module_NoahMP_hrldas_driver pcp_partition_option, tbot_option, temp_time_scheme_option, & glacier_option, surface_resistance_option, & - soil_data_option, pedotransfer_option, crop_option, & + soil_data_option, pedotransfer_option, crop_option,drainage_option, & sf_urban_physics,num_urban_hi,urban_atmosphere_thickness, & num_urban_ndm,num_urban_ng,num_urban_nwr ,num_urban_ngb , & @@ -591,7 +608,7 @@ module module_NoahMP_hrldas_driver split_output_count, & khour, kday, zlvl, hrldas_setup_file, & - spatial_filename, & + spatial_filename, tdinput_flnm,& external_veg_filename_template, external_lai_filename_template, & xstart, xend, ystart, yend @@ -657,6 +674,7 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) IOPT_SOIL = soil_data_option IOPT_PEDO = pedotransfer_option IOPT_CROP = crop_option + IOPT_TDRN = drainage_option !--------------------------------------------------------------------- ! NAMELIST end !--------------------------------------------------------------------- @@ -937,7 +955,15 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) ALLOCATE ( soilcl2 (XSTART:XEND,YSTART:YEND) ) ! Soil texture class with depth ALLOCATE ( soilcl3 (XSTART:XEND,YSTART:YEND) ) ! Soil texture class with depth ALLOCATE ( soilcl4 (XSTART:XEND,YSTART:YEND) ) ! Soil texture class with depth - +! tile drainage + 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) ALLOCATE ( TSK (XSTART:XEND,YSTART:YEND) ) ! surface radiative temperature [K] @@ -1053,6 +1079,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 @@ -1400,6 +1428,8 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) HARVEST = undefined_real SEASON_GDD = undefined_real CROPTYPE = undefined_real + QTDRAIN = undefined_real + TD_FRACTION= undefined_real IF(SF_URBAN_PHYSICS > 0 ) THEN ! any urban model HRANG = undefined_real @@ -1440,7 +1470,8 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) if (soil_data_option == 4) then CALL 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) + DKSAT_3D,DWSAT_3D,PSISAT_3D,QUARTZ_3D,REFDK_2D,REFKDT_2D, & + KLAT_FAC,TDSMC_FAC,TD_DC,TD_DCOEF,TD_DDRAIN,TD_RADI,TD_SPAC) end if !------------------------------------------------------------------------ @@ -1466,6 +1497,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 !---------------------------------------------------------------------- @@ -1531,6 +1570,7 @@ subroutine land_driver_ini(NTIME_out,wrfits,wrfite,wrfjts,wrfjte) 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, "QTDRAIN" ,QTDRAIN ) ! below for opt_run = 5 call get_from_restart(xstart, xend, xstart, ixfull, jxfull, "SMOISEQ" , SMOISEQ ) call get_from_restart(xstart, xend, xstart, ixfull, jxfull, "AREAXY" , AREAXY ) @@ -1646,7 +1686,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 & @@ -1780,7 +1820,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 & @@ -1868,13 +1908,17 @@ 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 @@ -1886,7 +1930,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 @@ -2070,7 +2114,7 @@ subroutine land_driver_exe(itime) 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_GLA, IOPT_RSF,IOPT_SOIL,IOPT_PEDO,IOPT_CROP,IOPT_TDRN, & IZ0TLND, sf_urban_physics, & SOILCOMP, SOILCL1, SOILCL2, SOILCL3, SOILCL4, & T_PHY, QV_CURR, U_PHY, V_PHY, SWDOWN, GLW, & @@ -2079,7 +2123,7 @@ subroutine land_driver_exe(itime) SMSTOT,SFCRUNOFF, UDRUNOFF, ALBEDO, SNOWC, SMOIS, & SH2O, TSLB, SNOW, SNOWH, CANWAT, ACSNOM, & ACSNOW, EMISS, QSFC, & - Z0, ZNT, & ! IN/OUT LSM eqv + Z0, ZNT, QTDRAIN,ZWATBLE2D, & ! IN/OUT LSM eqv ISNOWXY, TVXY, TGXY, CANICEXY, CANLIQXY, EAHXY, & TAHXY, CMXY, CHXY, FWETXY, SNEQVOXY, ALBOLDXY, & QSNOWXY, WSLAKEXY, ZWTXY, WAXY, WTXY, TSNOXY, & @@ -2098,8 +2142,9 @@ subroutine land_driver_exe(itime) ! BEXP_3D,SMCDRY_3D,SMCWLT_3D,SMCREF_3D,SMCMAX_3D, & ! DKSAT_3D,DWSAT_3D,PSISAT_3D,QUARTZ_3D, & ! REFDK_2D,REFKDT_2D, & +! KLAT_FAC,TDSMC_FAC,TD_DC,TD_DCOEF,TD_DDRAIN,TD_RADI,TD_SPAC, & #ifdef WRF_HYDRO - sfcheadrt,INFXSRT,soldrain, & !O + sfcheadrt,INFXSRT,soldrain,qtiledrain,TD_FRACTION, & !O #endif ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & @@ -2347,7 +2392,8 @@ subroutine land_driver_exe(itime) call add_to_output(NPPXY , "NPP" , "Net primary productivity" , "g m{-2} s{-1} C" ) call add_to_output(PSNXY , "PSN" , "Total photosynthesis" , "umol CO@ m{-2} s{-1}") call add_to_output(APARXY , "APAR" , "Photosynthesis active energy by canopy" , "W m{-2}" ) - + ! Tile drainage output + call add_to_output(QTDRAIN , "QTDRAIN" , "Tile drainage discharge" , "mm" ) ! Carbon allocation model IF(RUNOFF_OPTION == 5) THEN call add_to_output(SMCWTDXY , "SMCWTD" , "Leaf mass" , "g m{-2}" ) @@ -2472,6 +2518,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") ! below for opt_run = 5 call add_to_restart(SMOISEQ , "SMOISEQ" , layers="SOIL" ) call add_to_restart(AREAXY , "AREAXY" ) diff --git a/HRLDAS/phys/module_sf_noahmpdrv.F b/HRLDAS/phys/module_sf_noahmpdrv.F index 38b94cd..aa438a9 100644 --- a/HRLDAS/phys/module_sf_noahmpdrv.F +++ b/HRLDAS/phys/module_sf_noahmpdrv.F @@ -16,7 +16,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN PLANTING, HARVEST,SEASON_GDD, & 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, & ! IN : User options + IOPT_GLA, IOPT_RSF, IOPT_SOIL,IOPT_PEDO,IOPT_CROP,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, GLW, & ! IN : Forcing @@ -25,7 +25,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN SMSTOT,SFCRUNOFF, UDRUNOFF, ALBEDO, SNOWC, SMOIS, & ! IN/OUT LSM eqv SH2O, TSLB, SNOW, SNOWH, CANWAT, ACSNOM, & ! IN/OUT LSM eqv ACSNOW, EMISS, QSFC, & ! IN/OUT LSM eqv - Z0, ZNT, & ! IN/OUT LSM eqv + Z0, ZNT, QTDRAIN, ZWATBLE2D, & ! IN/OUT LSM eqv ISNOWXY, TVXY, TGXY, CANICEXY, CANLIQXY, EAHXY, & ! IN/OUT Noah MP only TAHXY, CMXY, CHXY, FWETXY, SNEQVOXY, ALBOLDXY, & ! IN/OUT Noah MP only QSNOWXY, WSLAKEXY, ZWTXY, WAXY, WTXY, TSNOXY, & ! IN/OUT Noah MP only @@ -44,8 +44,9 @@ 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, & +! KLAT_FAC,TDSMC_FAC,TD_DC,TD_DCOEF,TD_DDRAIN,TD_RADI,TD_SPAC, & #ifdef WRF_HYDRO - sfcheadrt,INFXSRT,soldrain, & + sfcheadrt,INFXSRT,soldrain,qtiledrain,TD_FRACTION, & #endif ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & @@ -101,6 +102,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN INTEGER, INTENT(IN ) :: IOPT_SOIL ! soil configuration option INTEGER, INTENT(IN ) :: IOPT_PEDO ! soil pedotransfer function option INTEGER, INTENT(IN ) :: IOPT_CROP ! crop model option (0->none; 1->Liu et al.; 2->Gecros) + INTEGER, INTENT(IN ) :: IOPT_TDRN ! tile drainage 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 @@ -135,6 +137,10 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: GDDXY ! growing degree days XING (based on 10C) INTEGER, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: PGSXY +!Tile drain variables + REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QTDRAIN ! Prasanth + REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: TD_FRACTION + ! gecros model REAL, DIMENSION( ims:ime, 60,jms:jme ), INTENT(INOUT) :: gecros_state ! gecros crop @@ -153,6 +159,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) :: 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) @@ -349,7 +362,10 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN REAL :: PLAI ! leaf area index REAL :: PSAI ! stem area index REAL :: TAUSS ! non-dimensional snow age - + REAL :: QTLDRN ! tile drainage (mm) + REAL :: WATBLED ! water table + REAL :: TDFRACMP + ! OUT (with no Noah LSM equivalent) REAL :: Z0WRF ! combined z0 sent to coupled model @@ -462,7 +478,7 @@ 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_RSF ,IOPT_SOIL ,IOPT_PEDO ,IOPT_CROP, IOPT_TDRN ) IPRINT = .false. ! debug printout @@ -631,7 +647,9 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN SMCWTD = SMCWTDXY(I,J) RECH = 0. DEEPRECH = 0. - + QTLDRN = 0. !QTDRAIN (I,J) ! tile drainage (mm) + WATBLED = ZWATBLE2D (I,J) + TDFRACMP = TD_FRACTION(I,J) if(iopt_crop == 2) then ! gecros crop model gecros1d(1:60) = gecros_state(I,1:60,J) ! Gecros variables 2D -> local @@ -694,7 +712,14 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN ! parameters%quartz = QUARTZ_3D(I,1:NSOIL,J) ! Soil quartz content ! parameters%refdk = REFDK_2D (I,J) ! Reference Soil Conductivity ! parameters%refkdt = REFKDT_2D(I,J) ! Soil Infiltration Parameter - +! 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 @@ -793,7 +818,8 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN LFMASS = undefined_value RTMASS = undefined_value STMASS = undefined_value - WOOD = undefined_value + WOOD = undefined_value + QTLDRN = undefined_value GRAIN = undefined_value GDD = undefined_value STBLCP = undefined_value @@ -863,7 +889,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN STMASS , WOOD , STBLCP , FASTCP , PLAI , PSAI , & ! IN/OUT : CM , CH , TAUSS , & ! IN/OUT : GRAIN , GDD , PGS , & ! IN/OUT - SMCWTD ,DEEPRECH , RECH , & ! IN/OUT : + SMCWTD ,DEEPRECH , RECH ,QTLDRN , WATBLED, TDFRACMP, & ! IN/OUT : GECROS1D, & ! IN/OUT : Z0WRF , & FSA , FSR , FIRA , FSH , SSOIL , FCEV , & ! OUT : @@ -950,7 +976,7 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN XLAIXY (I,J) = PLAI XSAIXY (I,J) = PSAI TAUSSXY (I,J) = TAUSS - + QTDRAIN (I,J) = QTDRAIN (I,J)+ QTLDRN ! OUTPUT Z0 (I,J) = Z0WRF @@ -1235,6 +1261,21 @@ SUBROUTINE TRANSFER_MP_PARAMETERS(VEGTYPE,SOILTYPE,SLOPETYPE,SOILCOLOR,CROPTYPE, parameters%REFDK = REFDK_TABLE parameters%REFKDT = REFKDT_TABLE + !------------------------------------------------------------------------------------------! +! Transfer tiledrain parameters +!------------------------------------------------------------------------------------------! + parameters%KLAT_FAC = KLAT_FAC_TABLE(SOILTYPE) + parameters%TDSMC_FAC = TDSMCFAC_TABLE(SOILTYPE) + parameters%TD_DC = TD_DC_TABLE(SOILTYPE) + parameters%TD_DCOEF = TD_DCOEF_TABLE(SOILTYPE) + parameters%TD_RADI = TD_RADI_TABLE(SOILTYPE) + parameters%TD_SPAC = TD_SPAC_TABLE(SOILTYPE) + parameters%TD_DDRAIN = TD_DDRAIN_TABLE(SOILTYPE) + + parameters%TD_DEPTH = TD_DEPTH_TABLE(SOILTYPE) + parameters%TD_ADEPTH = TD_ADEPTH_TABLE(SOILTYPE) + parameters%DRAIN_LAYER_OPT = DRAIN_LAYER_OPT_TABLE + parameters%TD_D = TD_D_TABLE(SOILTYPE) ! ---------------------------------------------------------------------- ! Transfer GENPARM parameters ! ---------------------------------------------------------------------- @@ -1397,7 +1438,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 @@ -1481,6 +1522,8 @@ SUBROUTINE NOAHMP_INIT ( MMINLU, SNOW , SNOWH , CANWAT , ISLTYP , IVGTYP, XLAT INTEGER, DIMENSION(ims:ime, jms:jme), INTENT(OUT) :: cropcat REAL , DIMENSION(ims:ime,5,jms:jme), INTENT(IN ) :: croptype + REAL, DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: qtdrain !tile drainage (mm) + ! IOPT_RUN = 5 option REAL, DIMENSION(ims:ime,1:nsoil,jms:jme), INTENT(INOUT) , OPTIONAL :: smoiseq !equilibrium soil moisture content [m3m-3] @@ -1539,7 +1582,8 @@ SUBROUTINE NOAHMP_INIT ( MMINLU, SNOW , SNOWH , CANWAT , ISLTYP , IVGTYP, XLAT call read_mp_global_parameters() call read_mp_crop_parameters() call read_mp_optional_parameters() - + call read_tiledrain_parameters() + IF( .NOT. restart ) THEN itf=min0(ite,ide-1) @@ -1647,6 +1691,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) diff --git a/HRLDAS/phys/module_sf_noahmplsm.F b/HRLDAS/phys/module_sf_noahmplsm.F index 9686a40..7848bec 100644 --- a/HRLDAS/phys/module_sf_noahmplsm.F +++ b/HRLDAS/phys/module_sf_noahmplsm.F @@ -171,7 +171,10 @@ MODULE MODULE_SF_NOAHMPLSM ! **0 -> No crop model, will run default dynamic vegetation ! 1 -> Liu, et al. 2016 ! 2 -> Gecros (Genotype-by-Environment interaction on CROp growth Simulator) Yin and van Laar, 2005 - + + INTEGER :: OPT_TDRN ! options for crop model + ! **0 -> No tile drainage + ! 1 -> on !------------------------------------------------------------------------------------------! ! Physical Constants: ! !------------------------------------------------------------------------------------------! @@ -375,7 +378,21 @@ MODULE MODULE_SF_NOAHMPLSM REAL :: KDT !used in compute maximum infiltration rate (in INFIL) REAL :: FRZX !used in compute maximum infiltration rate (in INFIL) - +!------------------------------------------------------------------------------------------! +! From the tiledrain section of the MPTABLE.TBL file +!------------------------------------------------------------------------------------------! + REAL :: TDSMC_FAC + REAL :: TD_DC + INTEGER :: TD_DEPTH + INTEGER :: DRAIN_LAYER_OPT + + REAL :: TD_DCOEF ! m d^-1, drainage coefficent + REAL :: TD_D ! m, depth to impervious layer from drain water level (D) + REAL :: TD_ADEPTH ! m, actual depth of impervious layer from land surface + REAL :: TD_RADI ! m, effective radius of drains (ro) + REAL :: TD_SPAC ! m, distance between two drain tubes or tiles (L) + REAL :: TD_DDRAIN ! m, Depth of drain + REAL :: KLAT_FAC ! multiplication factor to determine conk(j1,j) from sol_k(j1,j) for HRU END TYPE noahmp_parameters contains @@ -399,7 +416,7 @@ SUBROUTINE NOAHMP_SFLX (parameters, & STMASS , WOOD , STBLCP , FASTCP , LAI , SAI , & ! IN/OUT : CM , CH , TAUSS , & ! IN/OUT : GRAIN , GDD , PGS , & ! IN/OUT - SMCWTD ,DEEPRECH , RECH , & ! IN/OUT : + SMCWTD ,DEEPRECH , RECH , QTLDRN , WATBLED, TDFRACMP, & ! IN/OUT : GECROS1D, & ! IN/OUT : Z0WRF , & FSA , FSR , FIRA , FSH , SSOIL , FCEV , & ! OUT : @@ -646,6 +663,9 @@ SUBROUTINE NOAHMP_SFLX (parameters, & REAL , INTENT(INOUT) :: GDD !growing degree days INTEGER , INTENT(INOUT) :: PGS !plant growing stage [-] + REAL , INTENT(INOUT) :: QTLDRN !tile drainage (mm) + REAL , INTENT(IN) :: WATBLED !water table depth + REAL , INTENT(IN) :: TDFRACMP !tile drain fraction map ! outputs REAL , INTENT(OUT) :: NEE !net ecosys exchange (g/m2/s CO2) REAL , INTENT(OUT) :: GPP !net instantaneous assimilation [g/m2/s C] @@ -805,8 +825,8 @@ SUBROUTINE NOAHMP_SFLX (parameters, & SICE ,ZWT ,WA ,WT ,DZSNSO ,WSLAKE , & !inout SMCWTD ,DEEPRECH,RECH , & !inout CMC ,ECAN ,ETRAN ,FWET ,RUNSRF ,RUNSUB , & !out - QIN ,QDIS ,PONDING1 ,PONDING2,& - QSNBOT & + QIN ,QDIS ,PONDING1 ,PONDING2, & + QSNBOT ,QTLDRN ,WATBLED,DX ,TDFRACMP & #ifdef WRF_HYDRO ,sfcheadrt & #endif @@ -5718,7 +5738,7 @@ SUBROUTINE WATER (parameters,VEGTYP ,NSNOW ,NSOIL ,IMELT ,DT ,UU , & SMCWTD ,DEEPRECH,RECH , & !inout CMC ,ECAN ,ETRAN ,FWET ,RUNSRF ,RUNSUB , & !out QIN ,QDIS ,PONDING1 ,PONDING2, & - QSNBOT & + QSNBOT ,QTLDRN ,WATBLED ,DX ,TDFRACMP & #ifdef WRF_HYDRO ,sfcheadrt & #endif @@ -5789,7 +5809,11 @@ SUBROUTINE WATER (parameters,VEGTYP ,NSNOW ,NSOIL ,IMELT ,DT ,UU , & REAL, INTENT(INOUT) :: SMCWTD !soil water content between bottom of the soil and water table [m3/m3] REAL, INTENT(INOUT) :: DEEPRECH !recharge to or from the water table when deep [m] REAL, INTENT(INOUT) :: RECH !recharge to or from the water table when shallow [m] (diagnostic) - + REAL, INTENT(INOUT) :: QTLDRN !tile drainage (mm) + REAL, INTENT(IN) :: WATBLED !watertable depth from hydro module + REAL, INTENT(IN) :: DX + REAL, INTENT(IN) :: TDFRACMP !tile drain fraction map + ! output REAL, INTENT(OUT) :: CMC !intercepted water per ground area (mm) REAL, INTENT(OUT) :: ECAN !evap of intercepted water (mm/s) [+] @@ -5909,8 +5933,8 @@ SUBROUTINE WATER (parameters,VEGTYP ,NSNOW ,NSOIL ,IMELT ,DT ,UU , & QINSUR ,QSEVA ,ETRANI ,SICE ,ILOC , JLOC , & !in SH2O ,SMC ,ZWT ,VEGTYP , & !inout SMCWTD, DEEPRECH , & !inout - RUNSRF ,QDRAIN ,RUNSUB ,WCND ,FCRMAX ) !out - + RUNSRF ,QDRAIN ,RUNSUB ,WCND ,FCRMAX, & !out + QTLDRN ,WATBLED,DX ,TDFRACMP) IF(OPT_RUN == 1) THEN CALL GROUNDWATER (parameters,NSNOW ,NSOIL ,DT ,SICE ,ZSOIL , & !in STC ,WCND ,FCRMAX ,ILOC ,JLOC , & !in @@ -6893,7 +6917,8 @@ SUBROUTINE SOILWATER (parameters,NSOIL ,NSNOW ,DT ,ZSOIL ,DZSNSO , & !in QINSUR ,QSEVA ,ETRANI ,SICE ,ILOC , JLOC, & !in SH2O ,SMC ,ZWT ,VEGTYP ,& !inout SMCWTD, DEEPRECH ,& !inout - RUNSRF ,QDRAIN ,RUNSUB ,WCND ,FCRMAX ) !out + RUNSRF ,QDRAIN ,RUNSUB ,WCND ,FCRMAX, QTLDRN, & !out + WATBLED,DX ,TDFRACMP) !out ! ---------------------------------------------------------------------- ! calculate surface runoff and soil moisture. @@ -6923,7 +6948,11 @@ SUBROUTINE SOILWATER (parameters,NSOIL ,NSNOW ,DT ,ZSOIL ,DZSNSO , & !in REAL, INTENT(INOUT) :: ZWT !water table depth [m] REAL, INTENT(INOUT) :: SMCWTD !soil moisture between bottom of the soil and the water table [m3/m3] REAL , INTENT(INOUT) :: DEEPRECH - + REAL , INTENT(INOUT) :: QTLDRN ! tile drainage + REAL , INTENT(IN) :: WATBLED + REAL , INTENT(IN) :: DX + REAL , INTENT(IN) :: TDFRACMP + ! output REAL, INTENT(OUT) :: QDRAIN !soil-bottom free drainage [mm/s] REAL, INTENT(OUT) :: RUNSRF !surface runoff [mm/s] @@ -6956,6 +6985,7 @@ SUBROUTINE SOILWATER (parameters,NSOIL ,NSNOW ,DT ,ZSOIL ,DZSNSO , & !in REAL :: WATMIN ! REAL :: QDRAIN_SAVE ! REAL :: RUNSRF_SAVE ! + REAL :: QTLDRN_SAVE REAL :: EPORE !effective porosity [m3/m3] REAL, DIMENSION(1:NSOIL) :: FCR !impermeable fraction due to frozen soil INTEGER :: NITER !iteration times soil moisture (-) @@ -7082,6 +7112,10 @@ SUBROUTINE SOILWATER (parameters,NSOIL ,NSNOW ,DT ,ZSOIL ,DZSNSO , & !in PDDUM ,RUNSRF ) !out END IF + !IF (OPT_TDRN ==1 .AND. OPT_RUN == 3) THEN ! Call Tile Drainage - Prasanth Valayamkunnath-6/16/2019 + ! CALL TILE_DRAIN (parameters,NSOIL,SH2O,SMC,SICE,ZSOIL,QTLDRN) + !END IF + CALL SRT (parameters,NSOIL ,ZSOIL ,DTFINE ,PDDUM ,ETRANI , & !in QSEVA ,SH2O ,SMC ,ZWT ,FCR , & !in SICEMAX,FCRMAX ,ILOC ,JLOC ,SMCWTD , & !in @@ -7096,14 +7130,29 @@ SUBROUTINE SOILWATER (parameters,NSOIL ,NSNOW ,DT ,ZSOIL ,DZSNSO , & !in RSAT = RSAT + WPLUS QDRAIN_SAVE = QDRAIN_SAVE + QDRAIN RUNSRF_SAVE = RUNSRF_SAVE + RUNSRF + !QTLDRN_SAVE = QTLDRN_SAVE + QTLDRN END DO QDRAIN = QDRAIN_SAVE/NITER RUNSRF = RUNSRF_SAVE/NITER - + !QTLDRN = QTLDRN_SAVE/NITER !(mm) + RUNSRF = RUNSRF * 1000. + RSAT * 1000./DT ! m/s -> mm/s QDRAIN = QDRAIN * 1000. +#ifndef WRF_HYDRO + CALL TD_FINDZWAT(parameters,NSOIL,SMC,SH2O,SICE,ZSOIL,SLDPTH,WATBLED) +#endif + + print*, "OPT_TDRN=",OPT_TDRN + IF (OPT_TDRN == 1 .AND. TDFRACMP .GT. 0.3 .AND. OPT_RUN == 3) THEN ! Call Tile Drainage - Prasanth Valayamkunnath-6/19/2019 + print*, "simple tile drain scheme is on" + CALL TILE_DRAIN (parameters,NSOIL,SH2O,SMC,SICE,ZSOIL,QTLDRN,DT) + ELSE IF (OPT_TDRN == 2 .AND. TDFRACMP .GT. 0.3 .AND. OPT_RUN == 3) THEN + print*, "Hooghoudt tile drain scheme is on" + CALL TILE_HOOGHOUDT (parameters,WCND,NSOIL,SH2O,SMC,SICE,ZSOIL,DT,DX,QTLDRN,WATBLED) + END IF + !WRF_HYDRO_DJG... !yw INFXSRT = RUNSRF * DT !mm/s -> mm @@ -7573,6 +7622,420 @@ SUBROUTINE SSTEP (parameters,NSOIL ,NSNOW ,DT ,ZSOIL ,DZSNSO , & !in END SUBROUTINE SSTEP +!== begin tile_drain =============================================================================== + + SUBROUTINE TILE_DRAIN (parameters,NSOIL,SH2O,SMC,SICE,ZSOIL,QTLDRN,DT) +! ---------------------------------------------------------------------- +! calculate tile drainage discharge (mm) per NITER of SOILWATER soubroutine +! Prasanth Valayamkunnath - 06/13/2019 +! ---------------------------------------------------------------------- + IMPLICIT NONE +! ---------------------------------------------------------------------- +! inout + type (noahmp_parameters), intent(in) :: parameters + INTEGER,INTENT(IN) :: NSOIL + REAL, INTENT(IN) :: DT + REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SH2O + REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SMC + REAL,INTENT(INOUT) :: QTLDRN +! input + REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SICE + REAL, DIMENSION(1:NSOIL), INTENT(IN) :: ZSOIL +! local + INTEGER :: K + REAL :: TDRVOL ! temp variable for drainage volume (mm) + REAL,DIMENSION(1:NSOIL) :: OVRFC ! temp variable for volume of water above field capacity + REAL,DIMENSION(1:NSOIL) :: AVFC ! Available field capacity = FC - SICE (m3/m3) + REAL,DIMENSION(1:NSOIL) :: ZLAYER ! thickness of soil layer + REAL,DIMENSION(1:NSOIL) :: TDFRAC + REAL :: TDDC + REAL :: TDSUM +! ---------------------------------------------------------------------- + TDRVOL = 0. + OVRFC = 0. + QTLDRN = 0. + ZLAYER = 0. + AVFC = 0. + TDSUM = 0. + TDFRAC = 0. + TDDC = parameters%TD_DC * DT/(24*3600) + + DO K = 1, NSOIL + IF (K == 1) THEN + ZLAYER(K) = -1 * ZSOIL(K) + ELSE + ZLAYER(K) = (ZSOIL(K-1)-ZSOIL(K)) + END IF + END DO + IF (parameters%DRAIN_LAYER_OPT == 0) THEN ! drainage from one specified layer in MPTABLE.TBL + print*, "CASE = 1" + K = parameters%TD_DEPTH + AVFC(K) = parameters%SMCREF(K) - SICE (K) + OVRFC(K) = (SH2O(K) - (parameters%TDSMC_FAC*AVFC(K))) * ZLAYER(K) * 1000. ! mm + IF (OVRFC(K) > 0.) THEN + IF (OVRFC(K) > TDDC) OVRFC(K) = TDDC + TDRVOL = TDRVOL + OVRFC(K) + SH2O(K) = SH2O(K) - (OVRFC(K)/(ZLAYER(K) * 1000.)) + SMC(K) = SH2O(K) + SICE (K) + END IF + ELSE IF (parameters%DRAIN_LAYER_OPT == 1) THEN + print*, "CASE = 2. Draining from layer 1 and 2" + DO K = 1, 2 + AVFC(K) = parameters%SMCREF(K) - SICE (K) + OVRFC(K) = (SH2O(K) - (parameters%TDSMC_FAC*AVFC(K))) * ZLAYER(K) * 1000. ! mm + IF(OVRFC(K) < 0.) OVRFC(K) = 0. + TDSUM = TDSUM + OVRFC(K) + END DO + DO K = 1, 2 + IF(OVRFC(K) .NE. 0.) THEN + TDFRAC(K) = OVRFC(K)/TDSUM + END IF + END DO + IF (TDSUM > 0.) THEN + IF (TDSUM > TDDC) TDSUM = TDDC + TDRVOL = TDRVOL + TDSUM + DO K = 1, 2 + OVRFC(K) = TDFRAC(K)*TDSUM + SH2O(K) = SH2O(K) - (OVRFC(K)/(ZLAYER(K) * 1000.)) + SMC(K) = SH2O(K) + SICE (K) + END DO + END IF + ELSE IF (parameters%DRAIN_LAYER_OPT == 2) THEN + print*, "CASE = 3. Draining from layer 1 2 and 3" + DO K = 1, 3 + AVFC(K) = parameters%SMCREF(K) - SICE (K) + OVRFC(K) = (SH2O(K) - (parameters%TDSMC_FAC*AVFC(K))) * ZLAYER(K) * 1000. ! mm + IF(OVRFC(K) < 0.) OVRFC(K) = 0. + TDSUM = TDSUM + OVRFC(K) + END DO + DO K = 1, 3 + IF(OVRFC(K) .NE. 0.) THEN + TDFRAC(K) = OVRFC(K)/TDSUM + END IF + END DO + IF (TDSUM > 0.) THEN + IF (TDSUM > TDDC) TDSUM = TDDC + TDRVOL = TDRVOL + TDSUM + DO K = 1, 3 + OVRFC(K) = TDFRAC(K)*TDSUM + SH2O(K) = SH2O(K) - (OVRFC(K)/(ZLAYER(K) * 1000.)) + SMC(K) = SH2O(K) + SICE (K) + END DO + END IF + + ELSE IF (parameters%DRAIN_LAYER_OPT == 3) THEN + print*, "CASE = 3. Draining from layer 2 and 3" + DO K = 2, 3 + AVFC(K) = parameters%SMCREF(K) - SICE (K) + OVRFC(K) = (SH2O(K) - (parameters%TDSMC_FAC*AVFC(K))) * ZLAYER(K) * 1000. ! mm + IF(OVRFC(K) < 0.) OVRFC(K) = 0. + TDSUM = TDSUM + OVRFC(K) + END DO + DO K = 2, 3 + IF(OVRFC(K) .NE. 0.) THEN + TDFRAC(K) = OVRFC(K)/TDSUM + END IF + END DO + IF (TDSUM > 0.) THEN + IF (TDSUM > TDDC) TDSUM = TDDC + TDRVOL = TDRVOL + TDSUM + DO K = 2, 3 + OVRFC(K) = TDFRAC(K)*TDSUM + SH2O(K) = SH2O(K) - (OVRFC(K)/(ZLAYER(K) * 1000.)) + SMC(K) = SH2O(K) + SICE (K) + END DO + END IF + ELSE IF (parameters%DRAIN_LAYER_OPT == 4) THEN + + print*, "CASE = 4. Draining from layer 3 and 4" + DO K = 3, 4 + AVFC(K) = parameters%SMCREF(K) - SICE (K) + OVRFC(K) = (SH2O(K) - (parameters%TDSMC_FAC*AVFC(K))) * ZLAYER(K) * 1000. ! mm + IF(OVRFC(K) < 0.) OVRFC(K) = 0. + TDSUM = TDSUM + OVRFC(K) + END DO + DO K = 3, 4 + IF(OVRFC(K) .NE. 0.) THEN + TDFRAC(K) = OVRFC(K)/TDSUM + END IF + END DO + + + IF (TDSUM > 0.) THEN + IF (TDSUM > TDDC) TDSUM = TDDC + TDRVOL = TDRVOL + TDSUM + + DO K = 3, 4 + OVRFC(K) = TDFRAC(K)*TDSUM + SH2O(K) = SH2O(K) - (OVRFC(K)/(ZLAYER(K) * 1000.)) + SMC(K) = SH2O(K) + SICE (K) + END DO + END IF + + ELSE IF (parameters%DRAIN_LAYER_OPT == 5) THEN ! from all the four layers + + !print*, "CASE = 5 Draining from all four layers" + DO K = 1, 4 + AVFC(K) = parameters%SMCREF(K) - SICE (K) + OVRFC(K) = (SH2O(K) - (parameters%TDSMC_FAC*AVFC(K))) * ZLAYER(K) * 1000. ! mm + IF(OVRFC(K) < 0.) OVRFC(K) = 0. + TDSUM = TDSUM + OVRFC(K) + END DO + DO K = 1, 4 + IF(OVRFC(K) .NE. 0.) THEN + TDFRAC(K) = OVRFC(K)/TDSUM + END IF + END DO + + IF (TDSUM > 0.) THEN + IF (TDSUM > TDDC) TDSUM = TDDC + TDRVOL = TDRVOL + TDSUM + DO K = 1, 4 + OVRFC(K) = TDFRAC(K)*TDSUM + SH2O(K) = SH2O(K) - (OVRFC(K)/(ZLAYER(K) * 1000.)) + SMC(K) = SH2O(K) + SICE (K) + END DO + END IF + END IF + QTLDRN = TDRVOL + print*,"QTLDRN =",QTLDRN + END SUBROUTINE TILE_DRAIN + +!=================================================================================================== + SUBROUTINE TILE_HOOGHOUDT (parameters,WCND,NSOIL,SH2O,SMC,SICE,ZSOIL,DT,DX,QTLDRN,WATBLED) +! Definitions +!TD_SATZ = Thickness of saturated zone in layer considered ~ W +!TD_SPAC = Tile Drain SPACing ~ SDRAIN +!TD_HAIL = Height of water table in the drain Above Impermeable Layer (de) - +! HDRAIN +!TD_HEMD = Effective Height between water level in the drains to the water +! table MiDpoint ~ EM +!ZLAYER(K) = Thickness of layer K ~DZ(I) +!TD_DTWT = Depth To Water Table (cm) ~ TD_DTWT +!TD_FLUX = Drainge Flux cm/hr~ DFLUX +!TD_DEPTH = Effective Depth to impermeable layer from soil surface~ DEPTH +!TD_TTSZ = Total Thickness of Saturated Zone ~ DEEP +!KLAT = Lateral hydraulic conductivity, CONE +!KLATK = Lateral hydraulic conductivity of a specific layer ~ CONK +!DTOPL = Depth of top of the layer considered~ ABOVE +!TD_DC = Drainage Coefficient ~ DC +!TD_DDRN = Depth of drain ~ DDRAIN +!TD_ADEPTH = Actual depth to impermeable layer form surface. ADEPTH >= TD_DEPTH +!---------------------------------------------------------------------------- +! inout + type (noahmp_parameters), intent(in) :: parameters + INTEGER,INTENT(IN) :: NSOIL + REAL, INTENT(IN) :: DT + REAL, INTENT(IN) :: DX + REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SICE + REAL, DIMENSION(1:NSOIL), INTENT(IN) :: ZSOIL + REAL, DIMENSION(1:NSOIL), INTENT(IN) :: WCND + + REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SH2O + REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SMC + REAL, INTENT(INOUT) :: QTLDRN ! tile drain discharge + REAL, INTENT(IN) :: WATBLED ! water table depth +! local + INTEGER :: K + REAL, DIMENSION(1:NSOIL) :: TD_SATZ ! thickness of saturated zone + REAL, DIMENSION(1:NSOIL) :: KLATK ! lateral hydraulic ocnductivity kth layer + REAL :: TD_TTSZ ! total satutation thickness + REAL :: TD_LQ ! lateral flow + REAL :: DTOPL ! depth to top of the layer + REAL :: XX + REAL :: YY + REAL :: KLAT ! average lateral hydruaic conductivity + REAL :: TD_HAIL + REAL :: TD_DEPTH + REAL :: TD_HEMD + REAL,DIMENSION(1:NSOIL) :: ZLAYER + REAL,DIMENSION(1:NSOIL) :: OVRFC + INTEGER :: NDRAINS + REAL :: TDDC + REAL,DIMENSION(1:NSOIL) :: RMSH2O + REAL :: QTLDRN1 + REAL :: TD_DD +!---------------------------------------------------------------------------- + TD_SATZ = 0. + DTOPL = 0. + TD_LQ = 0. + TD_TTSZ = 0. + TDDC = parameters%TD_DCOEF* 1000. * DT/(24. * 3600.) ! m per day to mm per time step +! Thickness of soil layers + DO K = 1, NSOIL + IF (K == 1) THEN + ZLAYER(K) = -1 * ZSOIL(K) + ELSE + ZLAYER(K) = (ZSOIL(K-1)-ZSOIL(K)) + END IF + END DO + !CALL TD_FINDZWAT(parameters,NSOIL,SMC,SH2O,SICE,ZSOIL,ZLAYER,WATBLED) +! Depth to water table + YY = WATBLED + IF (YY .GT. parameters%TD_ADEPTH) YY = parameters%TD_ADEPTH +! Depth of saturated zone + DO K=1, NSOIL + IF (YY .GT. (-1*ZSOIL(K))) THEN + TD_SATZ(K) = 0. + ELSE + TD_SATZ(K) = (-1*ZSOIL(K)) - YY + XX = (-1*ZSOIL(K)) - DTOPL + IF(TD_SATZ(K) .GT. XX) TD_SATZ(K) = XX + END IF + DTOPL = -1*ZSOIL(K) + END DO +! lateral hydr. conductivity and total lateral flow + DO K=1, NSOIL + KLATK(K)= WCND(K)*parameters%KLAT_FAC * DT ! m/s to m/time step + TD_LQ = TD_LQ + (TD_SATZ(K) * KLATK(K)) + TD_TTSZ = TD_TTSZ + TD_SATZ(K) + END DO + IF (TD_TTSZ .LT. 0.001) TD_TTSZ = 0.001 + IF (TD_LQ .LT. 0.001) TD_LQ = 0. + KLAT = TD_LQ/TD_TTSZ ! lateral hydraulic conductivity per time step + TD_DD = parameters%TD_ADEPTH - parameters%TD_DDRAIN + + CALL TD_EQUIVALENT_DEPTH (TD_DD, & + parameters%TD_SPAC, & + parameters%TD_RADI, & + TD_HAIL) + + !CALL TD_EQUIVALENT_DEPTH (parameters%TD_D, & + ! parameters%TD_SPAC, & + ! parameters%TD_RADI, & + ! TD_HAIL) + TD_DEPTH= TD_HAIL + parameters%TD_DDRAIN + TD_HEMD = parameters%TD_DDRAIN - YY + IF (TD_HEMD .LE. 0.) THEN + QTLDRN = 0. + ELSE + QTLDRN = ((8.*KLAT*TD_HAIL*TD_HEMD) + (4.*KLAT*TD_HEMD*TD_HEMD))& ! m per time step + /(parameters%TD_SPAC*parameters%TD_SPAC) + END IF + QTLDRN = QTLDRN * 1000. ! m to mm + IF(QTLDRN .LE. 0.) QTLDRN = 0. + IF(QTLDRN .GT. TDDC) QTLDRN = TDDC + NDRAINS = INT(DX/parameters%TD_SPAC) + QTLDRN = QTLDRN * NDRAINS + print*,"TD_TTSZ =",TD_TTSZ + print*,"TD_LQ =",TD_LQ + print*,"KLAT =",KLAT + print*,"TD_HAIL =",TD_HAIL + print*,"TD_DEPTH=",TD_DEPTH + print*,"YY =",YY + print*,"TD_HEMD =",TD_HEMD + print*,"QTLDRN =",QTLDRN + print*,"NDRAINS =",NDRAINS + print*,"TD_DD =",TD_DD + print*,"TDDC =",TDDC +! update soil moisture after drainage: moisture drains from top to bottom + DO K=1, NSOIL + OVRFC(K) = (SH2O(K) - parameters%SMCREF(K)) * ZLAYER(K) * 1000. !mm + END DO + QTLDRN1 = QTLDRN + DO K=1, NSOIL + IF(QTLDRN1 .GT. 0.) THEN + IF((TD_SATZ(K) .GT. 0.) .AND. (OVRFC(K) .GT. 0.)) THEN + RMSH2O(K) = OVRFC(K) - QTLDRN1 + IF (RMSH2O(K) .GT. 0.) THEN + SH2O(K) = parameters%SMCREF(K) + RMSH2O(K)/(ZLAYER(K) * 1000.) + SMC(K) = SH2O(K) + SICE (K) + EXIT + ELSE + SH2O(K) = parameters%SMCREF(K) + SMC(K) = SH2O(K) + SICE (K) + QTLDRN1 = QTLDRN1 - OVRFC(K) + END IF + END IF + END IF + END DO + END SUBROUTINE TILE_HOOGHOUDT + +!----------------------------------------------------------------------- + SUBROUTINE TD_EQUIVALENT_DEPTH (TD_D,TD_L,TD_RD,TD_DE) +! ---------------------------------------------------------------------- +! calculate tile drainage equivalent depth from d. +! ---------------------------------------------------------------------- + IMPLICIT NONE +! ---------------------------------------------------------------------- + REAL, INTENT(IN) :: TD_D + REAL, INTENT(IN) :: TD_L + REAL, INTENT(IN) :: TD_RD + REAL, INTENT(OUT) :: TD_DE + REAL :: PII = 22./7. + REAL :: TD_X + REAL :: TD_FX, EX,TERM + INTEGER :: I +!------------------------------------- + TD_FX = 0. + EX = 0. + TERM = 0. + + TD_X = (2.0*PII*TD_D)/TD_L + + IF (TD_X .GT. 0.5) THEN + DO I=1,45,2 + EX = EXP(-2.0*I*TD_X) + TERM = (4.0*EX)/(I*(1-EX)) + TD_FX = TD_FX + TERM + IF(TERM .LT. 1.E-6) THEN + TD_DE = ((PII*TD_L)/8.0)/(LOG(TD_L/(PII*TD_RD))+TD_FX) + EXIT + END IF + END DO + ELSE IF (TD_X .LT. 1.E-8) THEN + TD_DE = TD_D + ELSE + TD_FX = ((PII*PII)/(4*TD_X))+(LOG(TD_X/(2*PII))) + TD_DE = ((PII*TD_L)/8.0)/(LOG(TD_L/(PII*TD_RD))+TD_FX) + END IF + + IF (TD_DE .LT. 0. .AND. I .LE. 2) TD_DE = TD_D + + END SUBROUTINE TD_EQUIVALENT_DEPTH + +!------------------------------------------------------------------------------------------ + SUBROUTINE TD_FINDZWAT(parameters,NSOIL,SMC,SH2O,SICE,ZSOIL,SLDPTH,WATBLED) + IMPLICIT NONE +!-------- DECLARATIONS ------------------------ + type (noahmp_parameters), intent(in) :: parameters + INTEGER, INTENT(IN) :: NSOIL + REAL, INTENT(IN), DIMENSION(NSOIL) :: SMC,SH2O,SICE + REAL, INTENT(IN), DIMENSION(NSOIL) :: ZSOIL + REAL, INTENT(IN), DIMENSION(NSOIL) :: SLDPTH + REAL, INTENT(OUT) :: WATBLED + REAL :: CWATAVAIL + INTEGER :: SATLYRCHK + +! Local Variables + INTEGER :: K,i,j +!------------------------------------------------------------ + + SATLYRCHK = 0 !set flag for sat. layers + CWATAVAIL = 0. !set wat avail for subsfc rtng = 0. + + DO K=NSOIL,1,-1 + IF ( (SMC(K).GE.parameters%SMCREF(K)).AND.& + (parameters%SMCREF(K) .GT.parameters%SMCWLT(K)) ) THEN + IF((SATLYRCHK .EQ.K+1) .OR. (K.EQ.NSOIL)) SATLYRCHK = K + END IF + END DO + IF (SATLYRCHK .NE. 0) THEN + IF (SATLYRCHK .NE. 1) then ! soil column is partially sat. + WATBLED = -ZSOIL(SATLYRCHK-1) + ELSE ! soil column is fully saturated to sfc. + WATBLED = 0. + END IF + DO K = SATLYRCHK,NSOIL + CWATAVAIL = CWATAVAIL+(SMC(K)-parameters%SMCREF(K))*SLDPTH(K) + END DO + ELSE ! no saturated layers... + WATBLED = -ZSOIL(NSOIL) + SATLYRCHK = NSOIL + 1 + END IF + END SUBROUTINE TD_FINDZWAT +!---------------------------------------------------------------- + !== begin wdfcnd1 ================================================================================== SUBROUTINE WDFCND1 (parameters,WDF,WCND,SMC,FCR,ISOIL) @@ -9099,7 +9562,7 @@ END SUBROUTINE EMERG subroutine 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_rsf , iopt_soil, iopt_pedo, iopt_crop ,iopt_tdrn ) implicit none @@ -9121,7 +9584,7 @@ subroutine noahmp_options(idveg ,iopt_crs ,iopt_btr ,iopt_run ,iopt_sfc INTEGER, INTENT(IN) :: iopt_soil !soil parameters set-up option INTEGER, INTENT(IN) :: iopt_pedo !pedo-transfer function INTEGER, INTENT(IN) :: iopt_crop !crop model option (0->none; 1->Liu et al.; 2->Gecros) - + INTEGER, INTENT(IN) :: iopt_tdrn !tile drainage ! ------------------------------------------------------------------------------------------------- dveg = idveg @@ -9141,6 +9604,7 @@ subroutine noahmp_options(idveg ,iopt_crs ,iopt_btr ,iopt_run ,iopt_sfc opt_soil = iopt_soil opt_pedo = iopt_pedo opt_crop = iopt_crop + opt_tdrn = iopt_tdrn end subroutine noahmp_options @@ -9332,6 +9796,19 @@ MODULE NOAHMP_TABLES REAL :: GRAINPT_TABLE(NCROP,NSTAGE) ! fraction of carbohydrate flux to grain REAL :: BIO2LAI_TABLE(NCROP) ! leaf are per living leaf biomass [m^2/kg] +! tile drainage parameters + REAL :: TDSMCFAC_TABLE(MAX_SOILTYP) + REAL :: TD_DC_TABLE(MAX_SOILTYP) + INTEGER :: TD_DEPTH_TABLE(MAX_SOILTYP) + INTEGER :: DRAIN_LAYER_OPT_TABLE + REAL :: TD_DCOEF_TABLE(MAX_SOILTYP) + REAL :: TD_D_TABLE(MAX_SOILTYP) + REAL :: TD_ADEPTH_TABLE(MAX_SOILTYP) + REAL :: TD_RADI_TABLE(MAX_SOILTYP) + REAL :: TD_SPAC_TABLE(MAX_SOILTYP) + REAL :: TD_DDRAIN_TABLE(MAX_SOILTYP) + REAL :: KLAT_FAC_TABLE(MAX_SOILTYP) + ! MPTABLE.TBL optional parameters REAL :: sr2006_theta_1500t_a ! sand coefficient @@ -10076,6 +10553,64 @@ subroutine read_mp_crop_parameters() end subroutine read_mp_crop_parameters + subroutine read_tiledrain_parameters + implicit none + integer :: ierr + logical :: file_named + REAL, DIMENSION(MAX_SOILTYP) :: TDSMC_FAC + INTEGER, DIMENSION(MAX_SOILTYP) :: TD_DEPTH + REAL, DIMENSION(MAX_SOILTYP) :: TD_DC + INTEGER :: DRAIN_LAYER_OPT + REAL, DIMENSION(MAX_SOILTYP) :: TD_DCOEF + REAL, DIMENSION(MAX_SOILTYP) :: TD_D + REAL, DIMENSION(MAX_SOILTYP) :: TD_ADEPTH + REAL, DIMENSION(MAX_SOILTYP) :: TD_RADI + REAL, DIMENSION(MAX_SOILTYP) :: TD_SPAC + REAL, DIMENSION(MAX_SOILTYP) :: TD_DDRAIN + REAL, DIMENSION(MAX_SOILTYP) :: KLAT_FAC + + NAMELIST / noahmp_tiledrain_parameters /DRAIN_LAYER_OPT,TDSMC_FAC,TD_DEPTH,TD_DC,& + TD_DCOEF,TD_D,TD_ADEPTH,TD_RADI,TD_SPAC,TD_DDRAIN,& + KLAT_FAC + ! Initialize our variables to bad values, so that if the namelist read fails, we come to a screeching halt as soon as we try to use anything. + TDSMCFAC_TABLE = -99999 + TD_DEPTH_TABLE = -99999 + TD_DC_TABLE = -99999 + DRAIN_LAYER_OPT_TABLE = -99999 + TD_DCOEF_TABLE = -99999 + TD_D_TABLE = -99999 + TD_ADEPTH_TABLE = -99999 + TD_RADI_TABLE = -99999 + TD_SPAC_TABLE = -99999 + TD_DDRAIN_TABLE = -99999 + KLAT_FAC_TABLE = -99999 + + inquire( file='MPTABLE.TBL', exist=file_named ) + if ( file_named ) then + open(15, file="MPTABLE.TBL", status='old', form='formatted', action='read', iostat=ierr) + else + open(15, status='old', form='formatted', action='read', iostat=ierr) + end if + if (ierr /= 0) then + write(*,'("WARNING: Cannot find file MPTABLE.TBL")') + call wrf_error_fatal("STOP in Noah-MP read_tiledrain_parameters") + endif + read(15,noahmp_tiledrain_parameters) + close(15) + TDSMCFAC_TABLE = TDSMC_FAC + TD_DEPTH_TABLE = TD_DEPTH + DRAIN_LAYER_OPT_TABLE = DRAIN_LAYER_OPT + TD_DC_TABLE = TD_DC + + TD_DCOEF_TABLE = TD_DCOEF + TD_D_TABLE = TD_D + TD_ADEPTH_TABLE = TD_ADEPTH + TD_RADI_TABLE = TD_RADI + TD_SPAC_TABLE = TD_SPAC + TD_DDRAIN_TABLE = TD_DDRAIN + KLAT_FAC_TABLE = KLAT_FAC + end subroutine read_tiledrain_parameters + subroutine read_mp_optional_parameters() implicit none integer :: ierr diff --git a/HRLDAS/run/MPTABLE.TBL b/HRLDAS/run/MPTABLE.TBL index be26e9b..fae321b 100644 --- a/HRLDAS/run/MPTABLE.TBL +++ b/HRLDAS/run/MPTABLE.TBL @@ -537,4 +537,35 @@ BIO2LAI = 0.035, 0.015, 0.015, 0.015, 0.015, ! leaf are per living leaf sr2006_smcmax_b = 0.043 ! constant adjustment / - +&noahmp_tiledrain_parameters +!-----------------------------------! +! For simple drainage model ! +!-----------------------------------! +DRAIN_LAYER_OPT = 4 + ! 0 - from one specified layer by TD_DEPTH, + ! 1 - from layers 1 & 2, + ! 2 - from layer layers 1, 2, and 3 + ! 3 - from layer 2 and 3 + ! 4 - from layer layers 3, 4 + ! 5 - from all the four layers +!--------------------------------------------------------------------------------------------------------------------------------------------------------------------! +! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ! +!--------------------------------------------------------------------------------------------------------------------------------------------------------------------! +TDSMC_FAC = 0.90, 0.90, 0.90, 0.90, 0.90, 1.25, 0.90, 1.0, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90 ! corresponds to number of soil types SOILPARAM.TBL +TD_DEPTH = 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ! depth of drain tube from the soil surface +TD_DC = 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20. ! drainage coefficient (mm d^-1) +!--------------------------------------------------------------------------------------------------------------------------------------------------------------------! +! +!-------------------------------------! +! For Hooghoudt tile drain model ! +!-------------------------------------! +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- +TD_DCOEF = 0.25, 0.25, 0.25, 0.25, 0.25, 0.15, 0.25, 0.15, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 ! m d^-1, drainage coefficent +TD_D = 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00 ! m, depth to impe layer from drain water level (D) +TD_ADEPTH = 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00 ! m, actual depth of imp layer from land surface +TD_RADI = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.08, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05 ! m, effective radius of drains (ro) +TD_SPAC = 20.0, 20.0, 20.0, 20.0, 20.0, 25.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0 ! m, distance between two drain tubes or tiles (L) +TD_DDRAIN = 1.75, 1.75, 1.75, 1.75, 1.75, 1.80, 1.75, 1.80, 1.75, 1.75, 1.75, 1.75, 1.75, 1.75, 1.75, 1.75, 1.75, 1.75, 1.75 ! m, Depth of drain +KLAT_FAC = 2.00, 2.00, 2.00, 2.00, 2.00, 1.50, 2.00, 1.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00 ! multiplication factor to lateral hyd.cond +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- +/