INTERFACE:
subroutine Drainage(lbc, ubc, num_hydrologyc, filter_hydrologyc, & num_urbanc, filter_urbanc, vol_liq, hk, & icefrac)DESCRIPTION:
Calculate subsurface drainage
USES:
use shr_kind_mod, only : r8 => shr_kind_r8 use clmtype use clm_time_manager, only : get_step_size use clm_varcon , only : pondmx, tfrz, icol_roof, icol_road_imperv, icol_road_perv, watmin use clm_varpar , only : nlevsoiARGUMENTS:
implicit none integer , intent(in) :: lbc, ubc ! column bounds integer , intent(in) :: num_hydrologyc ! number of column soil points in column filter integer , intent(in) :: num_urbanc ! number of column urban points in column filter integer , intent(in) :: filter_urbanc(ubc-lbc+1) ! column filter for urban points integer , intent(in) :: filter_hydrologyc(ubc-lbc+1) ! column filter for soil points real(r8), intent(in) :: vol_liq(lbc:ubc,1:nlevsoi) ! partial volume of liquid water in layer real(r8), intent(in) :: hk(lbc:ubc,1:nlevsoi) ! hydraulic conductivity (mm h2o/s) real(r8), intent(in) :: icefrac(lbc:ubc,1:nlevsoi) ! fraction of ice in layerCALLED FROM:
REVISION HISTORY:
15 September 1999: Yongjiu Dai; Initial code 12 November 1999: Z.-L. Yang and G.-Y. Niu 15 December 1999: Paul Houser and Jon Radakovich; F90 Revision 4/26/05, Peter Thornton and David Lawrence: Turned off drainage from middle soil layers for both wet and dry fractions. 04/25/07 Keith Oleson: Completely new routine for CLM3.5 hydrology 27 February 2008: Keith Oleson; Saturation excess modificationLOCAL VARIABLES:
local pointers to original implicit in arguments integer , pointer :: ctype(:) !column type index integer , pointer :: snl(:) !number of snow layers real(r8), pointer :: qflx_snwcp_liq(:) !excess rainfall due to snow capping (mm H2O /s) [+] real(r8), pointer :: qflx_dew_grnd(:) !ground surface dew formation (mm H2O /s) [+] real(r8), pointer :: qflx_dew_snow(:) !surface dew added to snow pack (mm H2O /s) [+] real(r8), pointer :: qflx_sub_snow(:) !sublimation rate from snow pack (mm H2O /s) [+] real(r8), pointer :: dz(:,:) !layer depth (m) real(r8), pointer :: bsw(:,:) !Clapp and Hornberger "b" real(r8), pointer :: eff_porosity(:,:) !effective porosity = porosity - vol_ice real(r8), pointer :: t_soisno(:,:) !soil temperature (Kelvin) real(r8), pointer :: hksat(:,:) !hydraulic conductivity at saturation (mm H2O /s) real(r8), pointer :: sucsat(:,:) !minimum soil suction (mm) real(r8), pointer :: z(:,:) !layer depth (m) real(r8), pointer :: zi(:,:) !interface level below a "z" level (m) real(r8), pointer :: watsat(:,:) !volumetric soil water at saturation (porosity) real(r8), pointer :: hkdepth(:) !decay factor (m) real(r8), pointer :: zwt(:) !water table depth (m) real(r8), pointer :: wa(:) !water in the unconfined aquifer (mm) real(r8), pointer :: wt(:) !total water storage (unsaturated soil water + groundwater) (mm) real(r8), pointer :: qcharge(:) !aquifer recharge rate (mm/s) local pointers to original implicit inout arguments real(r8), pointer :: h2osoi_ice(:,:) !ice lens (kg/m2) real(r8), pointer :: h2osoi_liq(:,:) !liquid water (kg/m2) local pointers to original implicit out arguments real(r8), pointer :: qflx_drain(:) !sub-surface runoff (mm H2O /s) real(r8), pointer :: qflx_irrig(:) !irrigation flux (mm H2O /s) real(r8), pointer :: qflx_qrgwl(:) !qflx_surf at glaciers, wetlands, lakes (mm H2O /s) real(r8), pointer :: eflx_impsoil(:) !implicit evaporation for soil temperature equation real(r8), pointer :: qflx_rsub_sat(:) !soil saturation excess [mm h2o/s]