INTERFACE:
subroutine Hydrology2(lbc, ubc, lbp, ubp, &
num_nolakec, filter_nolakec, &
num_hydrologyc, filter_hydrologyc, &
num_urbanc, filter_urbanc, &
num_snowc, filter_snowc, &
num_nosnowc, filter_nosnowc)
DESCRIPTION:
This is the main subroutine to execute the calculation of soil/snow hydrology Calling sequence is: Hydrology2: surface hydrology driver -> SnowWater: change of snow mass and snow water onto soil -> SurfaceRunoff: surface runoff -> Infiltration: infiltration into surface soil layer -> SoilWater: soil water movement between layers -> Tridiagonal tridiagonal matrix solution -> Drainage: subsurface runoff -> SnowCompaction: compaction of snow layers -> CombineSnowLayers: combine snow layers that are thinner than minimum -> DivideSnowLayers: subdivide snow layers that are thicker than maximum
USES:
use shr_kind_mod, only: r8 => shr_kind_r8
use clmtype
use clm_atmlnd , only : clm_a2l
use clm_varcon , only : denh2o, denice, spval, &
istice, istwet, istsoil, isturb, istice_mec, &
icol_roof, icol_road_imperv, icol_road_perv, icol_sunwall, &
icol_shadewall
use clm_varcon , only : istcrop
use clm_varcon , only : istice_mec
use clm_varctl , only : glc_dyntopo
use clm_varpar , only : nlevgrnd, nlevsno, nlevsoi
use SnowHydrologyMod, only : SnowCompaction, CombineSnowLayers, DivideSnowLayers, &
SnowWater, BuildSnowFilter
use SoilHydrologyMod, only : Infiltration, SoilWater, Drainage, SurfaceRunoff
use clm_time_manager, only : get_step_size, get_nstep, is_perpetual
ARGUMENTS:
implicit none
integer, intent(in) :: lbc, ubc ! column bounds
integer, intent(in) :: lbp, ubp ! pft bounds
integer, intent(in) :: num_nolakec ! number of column non-lake points in column filter
integer, intent(in) :: filter_nolakec(ubc-lbc+1) ! column filter for non-lake points
integer, intent(in) :: num_hydrologyc ! number of column soil points in column filter
integer, intent(in) :: filter_hydrologyc(ubc-lbc+1)! column filter for soil points
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 :: num_snowc ! number of column snow points
integer :: filter_snowc(ubc-lbc+1) ! column filter for snow points
integer :: num_nosnowc ! number of column non-snow points
integer :: filter_nosnowc(ubc-lbc+1) ! column filter for non-snow points
CALLED FROM:
subroutine clm_driver1REVISION HISTORY:
Created by Mariana VertensteinLOCAL VARIABLES:
local pointers to implicit in arguments
integer , pointer :: cgridcell(:) ! column's gridcell
integer , pointer :: clandunit(:) ! column's landunit
integer , pointer :: ityplun(:) ! landunit type
integer , pointer :: ctype(:) ! column type
integer , pointer :: snl(:) ! number of snow layers
real(r8), pointer :: h2ocan(:) ! canopy water (mm H2O)
real(r8), pointer :: h2osno(:) ! snow water (mm H2O)
real(r8), pointer :: watsat(:,:) ! volumetric soil water at saturation (porosity)
real(r8), pointer :: sucsat(:,:) ! minimum soil suction (mm)
real(r8), pointer :: bsw(:,:) ! Clapp and Hornberger "b"
real(r8), pointer :: z(:,:) ! layer depth (m)
real(r8), pointer :: forc_rain(:) ! rain rate [mm/s]
real(r8), pointer :: forc_snow(:) ! snow rate [mm/s]
real(r8), pointer :: begwb(:) ! water mass begining of the time step
real(r8), pointer :: qflx_evap_tot(:) ! qflx_evap_soi + qflx_evap_can + qflx_tran_veg
real(r8), pointer :: bsw2(:,:) ! Clapp and Hornberger "b" for CN code
real(r8), pointer :: psisat(:,:) ! soil water potential at saturation for CN code (MPa)
real(r8), pointer :: vwcsat(:,:) ! volumetric water content at saturation for CN code (m3/m3)
local pointers to implicit inout arguments
real(r8), pointer :: dz(:,:) ! layer thickness depth (m)
real(r8), pointer :: zi(:,:) ! interface depth (m)
real(r8), pointer :: zwt(:) ! water table depth (m)
real(r8), pointer :: fcov(:) ! fractional impermeable area
real(r8), pointer :: fsat(:) ! fractional area with water table at surface
real(r8), pointer :: wa(:) ! water in the unconfined aquifer (mm)
real(r8), pointer :: qcharge(:) ! aquifer recharge rate (mm/s)
real(r8), pointer :: smp_l(:,:) ! soil matrix potential [mm]
real(r8), pointer :: hk_l(:,:) ! hydraulic conductivity (mm/s)
real(r8), pointer :: qflx_rsub_sat(:) ! soil saturation excess [mm h2o/s]
local pointers to implicit out arguments
real(r8), pointer :: endwb(:) ! water mass end of the time step
real(r8), pointer :: wf(:) ! soil water as frac. of whc for top 0.5 m
real(r8), pointer :: snowice(:) ! average snow ice lens
real(r8), pointer :: snowliq(:) ! average snow liquid water
real(r8), pointer :: t_grnd(:) ! ground temperature (Kelvin)
real(r8), pointer :: t_soisno(:,:) ! soil temperature (Kelvin)
real(r8), pointer :: h2osoi_ice(:,:) ! ice lens (kg/m2)
real(r8), pointer :: h2osoi_liq(:,:) ! liquid water (kg/m2)
real(r8), pointer :: t_soi_10cm(:) ! soil temperature in top 10cm of soil (Kelvin)
real(r8), pointer :: h2osoi_liqice_10cm(:) ! liquid water + ice lens in top 10cm of soil (kg/m2)
real(r8), pointer :: h2osoi_vol(:,:) ! volumetric soil water (0<=h2osoi_vol<=watsat) [m3/m3]
real(r8), pointer :: qflx_drain(:) ! sub-surface runoff (mm H2O /s)
real(r8), pointer :: qflx_surf(:) ! surface runoff (mm H2O /s)
real(r8), pointer :: qflx_infl(:) ! infiltration (mm H2O /s)
real(r8), pointer :: qflx_qrgwl(:) ! qflx_surf at glaciers, wetlands, lakes
real(r8), pointer :: qflx_irrig(:) ! irrigation flux (mm H2O /s)
real(r8), pointer :: qflx_runoff(:) ! total runoff (qflx_drain+qflx_surf+qflx_qrgwl) (mm H2O /s)
real(r8), pointer :: qflx_runoff_u(:) ! Urban total runoff (qflx_drain+qflx_surf) (mm H2O /s)
real(r8), pointer :: qflx_runoff_r(:) ! Rural total runoff (qflx_drain+qflx_surf+qflx_qrgwl) (mm H2O /s)
real(r8), pointer :: t_grnd_u(:) ! Urban ground temperature (Kelvin)
real(r8), pointer :: t_grnd_r(:) ! Rural ground temperature (Kelvin)
real(r8), pointer :: qflx_snwcp_ice(:)! excess snowfall due to snow capping (mm H2O /s) [+]`
real(r8), pointer :: soilpsi(:,:) ! soil water potential in each soil layer (MPa)
real(r8), pointer :: snot_top(:) ! snow temperature in top layer (col) [K]
real(r8), pointer :: dTdz_top(:) ! temperature gradient in top layer (col) [K m-1]
real(r8), pointer :: snw_rds(:,:) ! effective snow grain radius (col,lyr) [microns, m^-6]
real(r8), pointer :: snw_rds_top(:) ! effective snow grain size, top layer(col) [microns]
real(r8), pointer :: sno_liq_top(:) ! liquid water fraction in top snow layer (col) [frc]
real(r8), pointer :: frac_sno(:) ! snow cover fraction (col) [frc]
real(r8), pointer :: h2osno_top(:) ! mass of snow in top layer (col) [kg]
real(r8), pointer :: mss_bcpho(:,:) ! mass of hydrophobic BC in snow (col,lyr) [kg]
real(r8), pointer :: mss_bcphi(:,:) ! mass of hydrophillic BC in snow (col,lyr) [kg]
real(r8), pointer :: mss_bctot(:,:) ! total mass of BC (pho+phi) (col,lyr) [kg]
real(r8), pointer :: mss_bc_col(:) ! total mass of BC in snow column (col) [kg]
real(r8), pointer :: mss_bc_top(:) ! total mass of BC in top snow layer (col) [kg]
real(r8), pointer :: mss_cnc_bcphi(:,:) ! mass concentration of BC species 1 (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_bcpho(:,:) ! mass concentration of BC species 2 (col,lyr) [kg/kg]
real(r8), pointer :: mss_ocpho(:,:) ! mass of hydrophobic OC in snow (col,lyr) [kg]
real(r8), pointer :: mss_ocphi(:,:) ! mass of hydrophillic OC in snow (col,lyr) [kg]
real(r8), pointer :: mss_octot(:,:) ! total mass of OC (pho+phi) (col,lyr) [kg]
real(r8), pointer :: mss_oc_col(:) ! total mass of OC in snow column (col) [kg]
real(r8), pointer :: mss_oc_top(:) ! total mass of OC in top snow layer (col) [kg]
real(r8), pointer :: mss_cnc_ocphi(:,:) ! mass concentration of OC species 1 (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_ocpho(:,:) ! mass concentration of OC species 2 (col,lyr) [kg/kg]
real(r8), pointer :: mss_dst1(:,:) ! mass of dust species 1 in snow (col,lyr) [kg]
real(r8), pointer :: mss_dst2(:,:) ! mass of dust species 2 in snow (col,lyr) [kg]
real(r8), pointer :: mss_dst3(:,:) ! mass of dust species 3 in snow (col,lyr) [kg]
real(r8), pointer :: mss_dst4(:,:) ! mass of dust species 4 in snow (col,lyr) [kg]
real(r8), pointer :: mss_dsttot(:,:) ! total mass of dust in snow (col,lyr) [kg]
real(r8), pointer :: mss_dst_col(:) ! total mass of dust in snow column (col) [kg]
real(r8), pointer :: mss_dst_top(:) ! total mass of dust in top snow layer (col) [kg]
real(r8), pointer :: mss_cnc_dst1(:,:) ! mass concentration of dust species 1 (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_dst2(:,:) ! mass concentration of dust species 2 (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_dst3(:,:) ! mass concentration of dust species 3 (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_dst4(:,:) ! mass concentration of dust species 4 (col,lyr) [kg/kg]
logical , pointer :: do_capsnow(:) ! true => do snow capping
real(r8), pointer :: qflx_glcice(:) ! flux of new glacier ice (mm H2O /s)
!OTHER LOCAL VARIABLES: