next up previous contents
Next: Fortran: Module Interface HydrologyLakeMod Up: Fortran: Module Interface Hydrology2Mod Previous: Fortran: Module Interface Hydrology2Mod   Contents

Hydrology2


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_driver1
REVISION HISTORY:
   Created by Mariana Vertenstein
LOCAL 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:



Erik Kluzek 2011-06-15