*IF DEF,A08_5A                                                             HYDROL5A.2      
C *****************************COPYRIGHT******************************     HYDROL5A.3      
C (c) CROWN COPYRIGHT 1996, METEOROLOGICAL OFFICE, All Rights Reserved.    HYDROL5A.4      
C                                                                          HYDROL5A.5      
C Use, duplication or disclosure of this code is subject to the            HYDROL5A.6      
C restrictions as set forth in the contract.                               HYDROL5A.7      
C                                                                          HYDROL5A.8      
C                Meteorological Office                                     HYDROL5A.9      
C                London Road                                               HYDROL5A.10     
C                BRACKNELL                                                 HYDROL5A.11     
C                Berkshire UK                                              HYDROL5A.12     
C                RG12 2SZ                                                  HYDROL5A.13     
C                                                                          HYDROL5A.14     
C If no contract has been raised with this copy of the code, the use,      HYDROL5A.15     
C duplication or disclosure of it is strictly prohibited.  Permission      HYDROL5A.16     
C to do so must first be obtained in writing from the Head of Numerical    HYDROL5A.17     
C Modelling at the above address.                                          HYDROL5A.18     
C ******************************COPYRIGHT******************************    HYDROL5A.19     
!    SUBROUTINE HYDROL-------------------------------------------------    HYDROL5A.20     
!                                                                          HYDROL5A.21     
! Subroutine Interface:                                                    HYDROL5A.22     

      SUBROUTINE HYDROL (                                                   3,22HYDROL5A.23     
     &                   LICE_PTS,LICE_INDEX,SOIL_PTS,SOIL_INDEX,          HYDROL5A.24     
     &                   NPNTS,NSHYD,B,CAN_CPY,CON_RAIN,CON_SNOW,          HYDROL5A.25     
     &                   E_CANOPY,EXT,HCAP,HCON,INFIL_FAC,LS_RAIN,         HYDROL5A.26     
     &                   LS_SNOW,ROOTD,SATCON,SATHH,SNOWSUB,               HYDROL5A.27     
     &                   SURF_HT_FLUX,TIMESTEP,VFRAC,V_SAT,V_WILT,         HYDROL5A.28     
     &                   TSTAR,RGRAIN,L_SNOW_ALBEDO,                       ARE2F404.443    
     &                   CAN_WCNT,HF_SNOW_MELT,STF_HF_SNOW_MELT,           HYDROL5A.29     
     &                   SMCL,STHF,STHU,SNOW_DEP,TSOIL,                    HYDROL5A.30     
     &                   INFIL,SMC,SNOW_MELT,SNOMLT_SUB_HTF,               HYDROL5A.31     
     &                   STF_SUB_SURF_ROFF,SUB_SURF_ROFF,SURF_ROFF,        HYDROL5A.32     
     &                   TOT_TFALL,LTIMER                                  HYDROL5A.33     
     &)                                                                    HYDROL5A.34     
                                                                           HYDROL5A.35     
      IMPLICIT NONE                                                        HYDROL5A.36     
!                                                                          HYDROL5A.37     
! Description:                                                             HYDROL5A.38     
!     Surface hydrology module which also updates the                      HYDROL5A.39     
!     sub-surface temperatures. Includes soil water phase                  HYDROL5A.40     
!     changes and the effect of soil water and ice on the                  HYDROL5A.41     
!     thermal and hydraulic characteristics of the soil.                   HYDROL5A.42     
!     This version is for use with the Penman-Monteith                     HYDROL5A.43     
!     surface flux scheme. Calls the following:                            HYDROL5A.44     
!                                                                          HYDROL5A.45     
!     HEAT_CAP - to calculate the heat capacity of the top                 HYDROL5A.46     
!                soil layer                           (Cox, 6/95)          HYDROL5A.47     
!                                                                          HYDROL5A.48     
!     SFSNOW - to calculate the sub-surface snowmelt                       HYDROL5A.49     
!              and update the lying snow amount    (Essery, 1/95)          HYDROL5A.50     
!                                                                          HYDROL5A.51     
!     INFILT - to calculate the maximum surface infiltration rate          HYDROL5A.52     
!                                                     (Cox, 6/95)          HYDROL5A.53     
!                                                                          HYDROL5A.54     
!     SURF_HYD - to calculate canopy interception and                      HYDROL5A.55     
!                surface runoff         (Allen-Bett, Gregory, 90)          HYDROL5A.56     
!                                                                          HYDROL5A.57     
!     SOIL_HYD - to update the layer soil moisture contents                HYDROL5A.58     
!                and calculate the drainage            (Cox 6/95)          HYDROL5A.59     
!                                                                          HYDROL5A.60     
!     SOIL_HTC - to update the soil layer temperatures and the             HYDROL5A.61     
!                layer ice contents                    (Cox 6/95)          HYDROL5A.62     
!                                                                          HYDROL5A.63     
!     ICE_HTC - to update the layer temperatures for land ice              HYDROL5A.64     
!                                                      (Cox 10/95)         HYDROL5A.65     
!                                                                          HYDROL5A.66     
!     SMC_ROOT - to diagnose the available soil moisture in the            HYDROL5A.67     
!                rootzone - Temporarary                (Cox 2/96)          HYDROL5A.68     
!                                                                          HYDROL5A.69     
! Documentation : UM Documentation Paper 25                                HYDROL5A.70     
!                                                                          HYDROL5A.71     
! Current Code Owner : David Gregory                                       HYDROL5A.72     
!                                                                          HYDROL5A.73     
! History:                                                                 HYDROL5A.74     
! Version   Date     Comment                                               HYDROL5A.75     
! -------   ----     -------                                               HYDROL5A.76     
!  4.1      6/96     New deck.  Peter Cox                                  HYDROL5A.77     
!  4.4      24/11/97 Don't call SOIL_HTC/ICE_HTC if there are no           GSM1F404.67     
!                    soil/ice points. S.D.Mullerworth                      GSM1F404.68     
!  4.4  29/10/97     Modified for prognostic snow albedo scheme            ARE2F404.444    
!                                                     R. Essery            ARE2F404.445    
!                                                                          HYDROL5A.78     
! Code Description:                                                        HYDROL5A.79     
!   Language: FORTRAN 77 + common extensions.                              HYDROL5A.80     
!                                                                          HYDROL5A.81     
! System component covered: P25                                            HYDROL5A.82     
! System Task: P25                                                         HYDROL5A.83     
!                                                                          HYDROL5A.84     
                                                                           HYDROL5A.85     
! Global variables:                                                        HYDROL5A.86     
*CALL C_LHEAT                                                              HYDROL5A.87     
*CALL C_SOILH                                                              HYDROL5A.88     
*CALL SOIL_THICK                                                           HYDROL5A.89     
                                                                           HYDROL5A.90     
! Subroutine arguments                                                     HYDROL5A.91     
!   Scalar arguments with intent(IN) :                                     HYDROL5A.92     
      INTEGER                                                              HYDROL5A.93     
     & LICE_PTS            ! IN Number of land ice points.                 HYDROL5A.94     
     &,NPNTS               ! IN Number of gridpoints.                      HYDROL5A.95     
     &,NSHYD               ! IN Number of soil moisture levels.            HYDROL5A.96     
     &,SOIL_PTS            ! IN Number of soil points.                     HYDROL5A.97     
                                                                           HYDROL5A.98     
      REAL                                                                 HYDROL5A.99     
     & TIMESTEP            ! IN Model timestep (s).                        HYDROL5A.100    
                                                                           HYDROL5A.101    
      LOGICAL LTIMER       ! Logical switch for TIMER diags                HYDROL5A.102    
                                                                           HYDROL5A.103    
      LOGICAL                                                              HYDROL5A.104    
     & STF_HF_SNOW_MELT    ! IN Stash flag for snowmelt heat flux.         HYDROL5A.105    
     &,STF_SUB_SURF_ROFF   ! IN Stash flag for sub-surface runoff.         HYDROL5A.106    
     &,L_SNOW_ALBEDO       ! IN Flag for prognostic snow albedo            ARE2F404.446    
                                                                           HYDROL5A.107    
                                                                           HYDROL5A.108    
!   Array arguments with intent(IN) :                                      HYDROL5A.109    
      INTEGER                                                              HYDROL5A.110    
     & LICE_INDEX(NPNTS)   ! IN Array of land ice points.                  HYDROL5A.111    
     &,SOIL_INDEX(NPNTS)   ! IN Array of soil points.                      HYDROL5A.112    
                                                                           HYDROL5A.113    
      REAL                                                                 HYDROL5A.114    
     & B(NPNTS)            ! IN Clapp-Hornberger exponent.                 HYDROL5A.115    
     &,CAN_CPY(NPNTS)      ! IN Canopy capacity (kg/m2).                   HYDROL5A.116    
     &,CON_RAIN(NPNTS)     ! IN Convective rain (kg/m2/s).                 HYDROL5A.117    
     &,CON_SNOW(NPNTS)     ! IN Convective snowfall (kg/m2/s).             HYDROL5A.118    
     &,E_CANOPY(NPNTS)     ! IN Canopy evaporation (kg/m2/s).              HYDROL5A.119    
     &,EXT(NPNTS,NSHYD)    ! IN Extraction of water from each soil         HYDROL5A.120    
!                          !    layer (kg/m2/s).                           HYDROL5A.121    
     &,HCAP(NPNTS)         ! IN Soil heat capacity (J/K/m3).               HYDROL5A.122    
     &,HCON(NPNTS)         ! IN Soil thermal conductivity (W/m/K).         HYDROL5A.123    
     &,INFIL_FAC(NPNTS)    ! IN Infiltration enhancement factor.           HYDROL5A.124    
     &,LS_RAIN(NPNTS)      ! IN Large-scale rain (kg/m2/s).                HYDROL5A.125    
     &,LS_SNOW(NPNTS)      ! IN Large-scale snowfall (kg/m2/s).            HYDROL5A.126    
     &,ROOTD(NPNTS)        ! IN Rootdepth (m).                             HYDROL5A.127    
     &,SATCON(NPNTS)       ! IN Saturated hydraulic conductivity           HYDROL5A.128    
!                          !    (kg/m2/s).                                 HYDROL5A.129    
     &,SATHH(NPNTS)        ! IN Saturated soil water pressure (m).         HYDROL5A.130    
     &,SNOWSUB(NPNTS)      ! IN Sublimation of lying snow (kg/m2/s).       HYDROL5A.131    
     &,SURF_HT_FLUX(NPNTS) ! IN Net downward surface heat flux (W/m2).     HYDROL5A.132    
     &,TSTAR(NPNTS)        ! IN Surface temperature (K).                   ARE2F404.447    
     &,VFRAC(NPNTS)        ! IN Vegetated fraction.                        HYDROL5A.133    
     &,V_SAT(NPNTS)        ! IN Volumetric soil moisture                   HYDROL5A.134    
!                          !    concentration at saturation                HYDROL5A.135    
!                          !    (m3 H2O/m3 soil).                          HYDROL5A.136    
     &,V_WILT(NPNTS)       ! IN Volumetric soil moisture                   HYDROL5A.137    
!                          !    concentration below which                  HYDROL5A.138    
!                          !    stomata close (m3 H2O/m3 soil).            HYDROL5A.139    
!                                                                          HYDROL5A.140    
!   Array arguments with intent(INOUT) :                                   HYDROL5A.141    
!                                                                          HYDROL5A.142    
      REAL                                                                 HYDROL5A.143    
     & CAN_WCNT(NPNTS)     ! INOUT Canopy water content (kg/m2).           HYDROL5A.144    
     &,HF_SNOW_MELT(NPNTS) ! INOUT Total snowmelt heat flux (W/m2).        HYDROL5A.145    
     &,RGRAIN(NPNTS)       ! INOUT Snow grain size (microns).              ARE2F404.448    
     &,SMCL(NPNTS,NSHYD)   ! INOUT Soil moisture content of each           HYDROL5A.146    
!                          !       layer (kg/m2).                          HYDROL5A.147    
     &,SNOW_DEP(NPNTS)     ! INOUT Snowmass (kg/m2).                       HYDROL5A.148    
     &,SNOW_MELT(NPNTS)    ! INOUT Snowmelt (kg/m2/s).                     ABX4F404.1      
     &,STHF(NPNTS,NSHYD)   ! INOUT Frozen soil moisture content of         HYDROL5A.149    
!                          !       each layer as a fraction of             HYDROL5A.150    
!                          !       saturation.                             HYDROL5A.151    
     &,STHU(NPNTS,NSHYD)   ! INOUT Unfrozen soil moisture content of       HYDROL5A.152    
!                          !       each layer as a fraction of             HYDROL5A.153    
!                          !       saturation.                             HYDROL5A.154    
     &,TSOIL(NPNTS,NSHYD)  ! INOUT Sub-surface temperatures (K).           HYDROL5A.155    
                                                                           HYDROL5A.156    
                                                                           HYDROL5A.157    
!   Array arguments with intent(OUT) :                                     HYDROL5A.158    
      REAL                                                                 HYDROL5A.159    
     & INFIL(NPNTS)         ! OUT Maximum surface infiltration             HYDROL5A.160    
!                                 rate (kg/m2/s).                          HYDROL5A.161    
     &,SMC(NPNTS)           ! OUT Available soil moisture in the           HYDROL5A.162    
!                                 rootzone (kg/m2).                        HYDROL5A.163    
                                                                           ABX4F404.2      
                                                                           ABX4F404.3      
                                                                           ABX4F404.4      
     &,SNOMLT_SUB_HTF(NPNTS)! OUT Sub-surface snowmelt heat                HYDROL5A.165    
!                                 flux (W/m2).                             HYDROL5A.166    
     &,SUB_SURF_ROFF(NPNTS) ! OUT Sub-surface runoff (kg/m2/s).            HYDROL5A.167    
     &,SURF_ROFF(NPNTS)     ! OUT Surface runoff (kg/m2/s).                HYDROL5A.168    
     &,TOT_TFALL(NPNTS)     ! OUT Total throughfall (kg/m2/s).             HYDROL5A.169    
                                                                           HYDROL5A.170    
! Local scalars:                                                           HYDROL5A.171    
      INTEGER                                                              HYDROL5A.172    
     & I                    ! WORK Loop counter.                           HYDROL5A.173    
                                                                           HYDROL5A.174    
                                                                           HYDROL5A.175    
! Local arrays:                                                            HYDROL5A.176    
      INTEGER                                                              HYDROL5A.177    
     & F_TYPE(NPNTS)        ! WORK Plant functional type:                  HYDROL5A.178    
!                           !       1 - Broadleaf Tree                     HYDROL5A.179    
!                           !       2 - Needleleaf Tree                    HYDROL5A.180    
!                           !       3 - C3 Grass                           HYDROL5A.181    
!                           !       4 - C4 Grass                           HYDROL5A.182    
                                                                           HYDROL5A.183    
      REAL                                                                 HYDROL5A.184    
     & ASOIL(NPNTS)         ! WORK Reciprocal areal heat capacity          HYDROL5A.185    
!                                  of the top soil layer (K m2/J).         HYDROL5A.186    
     &,DSMC_DT(NPNTS)       ! WORK Rate of change of soil moisture         HYDROL5A.187    
!                                  due to water falling onto the           HYDROL5A.188    
!                                  surface after surface runoff            HYDROL5A.189    
!                                  (kg/m2/s).                              HYDROL5A.190    
     &,HCAPS(NPNTS)         ! WORK Soil thermal capacity                   HYDROL5A.191    
!                                  including the effects of water          HYDROL5A.192    
!                                  and ice (W/m/K).                        HYDROL5A.193    
     &,SOIL_HT_FLUX12(NPNTS)! WORK Heat flux between soil layers           HYDROL5A.194    
!                                  1 and 2 (W/m2).                         HYDROL5A.195    
     &,V_ROOT(NPNTS)        ! WORK Volumetric soil moisture                HYDROL5A.196    
!                           !      concentration in the rootzone           HYDROL5A.197    
!                           !      (m3 H2O/m3 soil).                       HYDROL5A.198    
     &,V_SOIL(NPNTS)        ! WORK Volumetric soil moisture                HYDROL5A.199    
!                           !      concentration in the top                HYDROL5A.200    
!                           !      soil layer (m3 H2O/m3 soil).            HYDROL5A.201    
     &,W_FLUX(NPNTS,0:NSHYD)! WORK Fluxes of water between layers          HYDROL5A.202    
!                                  (kg/m2/s).                              HYDROL5A.203    
     &,WT_EXT(NPNTS,NSHYD)  ! WORK Fraction of transpiration which         HYDROL5A.204    
!                                  is extracted from each soil layer.      HYDROL5A.205    
! Function & Subroutine calls:                                             HYDROL5A.206    
      EXTERNAL                                                             HYDROL5A.207    
     & HEAT_CAP,SFSNOW,INFILT,SURF_HYD,SOIL_HYD,SOIL_HTC,ICE_HTC           HYDROL5A.208    
                                                                           HYDROL5A.209    
! End of header--------------------------------------------------------    HYDROL5A.210    
                                                                           HYDROL5A.211    
      IF (LTIMER) THEN                                                     HYDROL5A.212    
        CALL TIMER('HYDROL ',103)                                          GPB8F405.152    
      ENDIF                                                                HYDROL5A.214    
!----------------------------------------------------------------------    HYDROL5A.215    
! Calculate the heat capacity of the top soil layer                        HYDROL5A.216    
!----------------------------------------------------------------------    HYDROL5A.217    
      CALL HEAT_CAP (NPNTS,SOIL_PTS,SOIL_INDEX,B,DZSOIL,                   HYDROL5A.218    
     &               HCAP,SATHH,SMCL,STHF,TSOIL,V_SAT,HCAPS,LTIMER)        HYDROL5A.219    
                                                                           HYDROL5A.220    
!----------------------------------------------------------------------    HYDROL5A.221    
! Calculate the reciprocal areal heat capacity of the top soil layer       HYDROL5A.222    
!----------------------------------------------------------------------    HYDROL5A.223    
      DO I=1,NPNTS                                                         HYDROL5A.224    
        ASOIL(I)=1./(DZSOIL(1)*HCAPS(I))                                   HYDROL5A.225    
      ENDDO                                                                HYDROL5A.226    
                                                                           HYDROL5A.227    
!----------------------------------------------------------------------    HYDROL5A.228    
! Calculate the subsurface snowmelt and update the snow mass               HYDROL5A.229    
!----------------------------------------------------------------------    HYDROL5A.230    
      CALL SFSNOW (ASOIL,CON_SNOW,LS_SNOW,SNOWSUB,TSTAR,                   ARE2F404.449    
     &             TIMESTEP,NPNTS,SNOW_DEP,RGRAIN,L_SNOW_ALBEDO,           ARE2F404.450    
     &             TSOIL,SNOW_MELT,SNOMLT_SUB_HTF,STF_HF_SNOW_MELT,        ARE2F404.451    
     &             LTIMER)                                                 ARE2F404.452    
                                                                           HYDROL5A.234    
!----------------------------------------------------------------------    HYDROL5A.235    
! Update the total snowmelt heat flux                                      HYDROL5A.236    
!----------------------------------------------------------------------    HYDROL5A.237    
      IF (STF_HF_SNOW_MELT) THEN                                           HYDROL5A.238    
        DO I=1,NPNTS                                                       HYDROL5A.239    
          HF_SNOW_MELT(I)=LF*SNOW_MELT(I)                                  HYDROL5A.240    
        ENDDO                                                              HYDROL5A.241    
      ENDIF                                                                HYDROL5A.242    
                                                                           HYDROL5A.243    
!----------------------------------------------------------------------    HYDROL5A.244    
! Calculate the maximum surface infiltration rate                          HYDROL5A.245    
!----------------------------------------------------------------------    HYDROL5A.246    
      CALL INFILT (NPNTS,SOIL_PTS,SOIL_INDEX,B,SATCON,INFIL_FAC,STHF,      HYDROL5A.247    
     &             INFIL,LTIMER)                                           HYDROL5A.248    
                                                                           HYDROL5A.249    
!-----------------------------------------------------------------------   HYDROL5A.250    
! Calculate throughfall and surface runoff, and update the canopy water    HYDROL5A.251    
! content                                                                  HYDROL5A.252    
!-----------------------------------------------------------------------   HYDROL5A.253    
      CALL SURF_HYD (NPNTS,E_CANOPY,SNOW_MELT,LS_RAIN,                     HYDROL5A.254    
     &               CON_RAIN,DSMC_DT,SURF_ROFF,CAN_WCNT,                  HYDROL5A.255    
     &               CAN_CPY,INFIL,TOT_TFALL,TIMESTEP)                     HYDROL5A.256    
                                                                           HYDROL5A.257    
!-----------------------------------------------------------------------   HYDROL5A.258    
! Update the layer soil moisture contents and calculate the                HYDROL5A.259    
! gravitational drainage.                                                  HYDROL5A.260    
!-----------------------------------------------------------------------   HYDROL5A.261    
      CALL SOIL_HYD (NPNTS,NSHYD,SOIL_PTS,SOIL_INDEX,B,DZSOIL,             HYDROL5A.262    
     &               EXT,DSMC_DT,SATCON,SATHH,TIMESTEP,V_SAT,              HYDROL5A.263    
     &               SUB_SURF_ROFF,SMCL,STHU,W_FLUX,                       HYDROL5A.264    
     &               STF_SUB_SURF_ROFF,LTIMER)                             HYDROL5A.265    
                                                                           HYDROL5A.266    
!-----------------------------------------------------------------------   HYDROL5A.267    
! Update the soil temperatures and the frozen moisture fractions           HYDROL5A.268    
!-----------------------------------------------------------------------   HYDROL5A.269    
      IF (SOIL_PTS.NE.0) THEN                                              GSM1F404.69     
        CALL SOIL_HTC (NPNTS,NSHYD,SOIL_PTS,SOIL_INDEX,B,                  GSM1F404.70     
     &               DZSOIL,HCAP,HCON,SNOW_DEP,SATHH,                      HYDROL5A.271    
     &               SURF_HT_FLUX,TIMESTEP,V_SAT,                          HYDROL5A.272    
     &               W_FLUX,SMCL,STHU,STHF,TSOIL,LTIMER)                   HYDROL5A.273    
      ENDIF                                                                GSM1F404.71     
                                                                           HYDROL5A.274    
!-----------------------------------------------------------------------   HYDROL5A.275    
! Update the sub-surface temperatures for land ice                         HYDROL5A.276    
!-----------------------------------------------------------------------   HYDROL5A.277    
      IF (LICE_PTS.NE.0)THEN                                               GSM1F404.72     
        CALL ICE_HTC (NPNTS,NSHYD,LICE_PTS,LICE_INDEX,DZSOIL,              GSM1F404.73     
     &              SURF_HT_FLUX,TIMESTEP,                                 HYDROL5A.279    
     &              TSOIL,LTIMER)                                          HYDROL5A.280    
      ENDIF                                                                GSM1F404.74     
                                                                           HYDROL5A.281    
!-----------------------------------------------------------------------   HYDROL5A.282    
! Diagnose the plant functional types at each location (temporary).        HYDROL5A.283    
! Assume : Broadleaf Trees if rootdepth > 0.8m                             HYDROL5A.284    
!          C3 Grass        if rootdepth < 0.8m                             HYDROL5A.285    
!-----------------------------------------------------------------------   HYDROL5A.286    
      DO I=1,NPNTS                                                         HYDROL5A.287    
        IF (ROOTD(I).GT.0.8) THEN                                          HYDROL5A.288    
          F_TYPE(I)=1                                                      HYDROL5A.289    
        ELSE                                                               HYDROL5A.290    
          F_TYPE(I)=3                                                      HYDROL5A.291    
        ENDIF                                                              HYDROL5A.292    
      ENDDO                                                                HYDROL5A.293    
                                                                           HYDROL5A.294    
!-----------------------------------------------------------------------   HYDROL5A.295    
! Diagnose the soil moisture in the root zone.                             HYDROL5A.296    
!-----------------------------------------------------------------------   HYDROL5A.297    
      CALL SMC_ROOT (NPNTS,NSHYD,F_TYPE,DZSOIL,ROOTD,STHU,VFRAC,           APA1F405.321    
     &               V_SAT,V_WILT,SMC,V_ROOT,V_SOIL,WT_EXT,LTIMER)         HYDROL5A.299    
                                                                           HYDROL5A.300    
                                                                           HYDROL5A.301    
      IF (LTIMER) THEN                                                     HYDROL5A.302    
        CALL TIMER('HYDROL ',104)                                          GPB8F405.153    
      ENDIF                                                                HYDROL5A.304    
                                                                           HYDROL5A.305    
      RETURN                                                               HYDROL5A.306    
      END                                                                  HYDROL5A.307    
*ENDIF                                                                     HYDROL5A.308