*IF DEF,A08_7A                                                             SURFHY7A.2      
C ******************************COPYRIGHT******************************    SURFHY7A.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    SURFHY7A.4      
C                                                                          SURFHY7A.5      
C Use, duplication or disclosure of this code is subject to the            SURFHY7A.6      
C restrictions as set forth in the contract.                               SURFHY7A.7      
C                                                                          SURFHY7A.8      
C                Meteorological Office                                     SURFHY7A.9      
C                London Road                                               SURFHY7A.10     
C                BRACKNELL                                                 SURFHY7A.11     
C                Berkshire UK                                              SURFHY7A.12     
C                RG12 2SZ                                                  SURFHY7A.13     
C                                                                          SURFHY7A.14     
C If no contract has been raised with this copy of the code, the use,      SURFHY7A.15     
C duplication or disclosure of it is strictly prohibited.  Permission      SURFHY7A.16     
C to do so must first be obtained in writing from the Head of Numerical    SURFHY7A.17     
C Modelling at the above address.                                          SURFHY7A.18     
C ******************************COPYRIGHT******************************    SURFHY7A.19     
C                                                                          SURFHY7A.20     
CLL  SUBROUTINE SURF_HYD-----------------------------------------------    SURFHY7A.21     
CLL                                                                        SURFHY7A.22     
CLL  PURPOSE : TO CARRY OUT CANOPY AND SURFACE HYDROLOGY CALCULATIONS      SURFHY7A.23     
CLL                                                                        SURFHY7A.24     
CLL            CANOPY WATER CONTENT IS DEPRECIATED BY EVAPORATION          SURFHY7A.25     
CLL                                                                        SURFHY7A.26     
CLL            SNOWMELT IS RUNOFF THE SURFACE WITHOUT INTERACTING          SURFHY7A.27     
CLL            WITH THE CANOPY                                             SURFHY7A.28     
CLL                                                                        SURFHY7A.29     
CLL            THE CANOPY INTERCEPTION AND SURFACE RUNOFF OF               SURFHY7A.30     
CLL            LARGE-SCALE RAIN IS CALCUALTED                              SURFHY7A.31     
CLL                                                                        SURFHY7A.32     
CLL            THE CANOPY INTERCEPTION AND SURFACE RUNOFF OF               SURFHY7A.33     
CLL            CONVECTIVE RAIN IS CALCUALTED                               SURFHY7A.34     
CLL                                                                        SURFHY7A.35     
CLL                                                                        SURFHY7A.36     
CLL  SUITABLE FOR SINGLE COLUMN MODEL USE                                  SURFHY7A.37     
CLL                                                                        SURFHY7A.38     
CLL  WRITTEN FOR CRAY-YMP BY S.ALLEN-BETT AND D.GREGORY                    SURFHY7A.39     
CLL                                                                        SURFHY7A.40     
CLL  MODEL            MODIFICATION HISTORY FROM MODEL VERSION 3.0:         SURFHY7A.41     
CLL VERSION  DATE                                                          SURFHY7A.42     
CLL                                                                        SURFHY7A.43     
CLL  PROGRAMMING STANDARDS : UNIFIED MODEL DOCUMENTATION PAPER NO. 4       SURFHY7A.44     
CLL  VERSION NO. 1 18/1/90                                                 SURFHY7A.45     
CLL                                                                        SURFHY7A.46     
CLL  SYSTEM TASK : P252                                                    SURFHY7A.47     
CLL                                                                        SURFHY7A.48     
CLL  DOCUMENTATION : UNIFIED MODEL DOCUMENTATION PAPER NO 25               SURFHY7A.49     
CLL                                                                        SURFHY7A.50     
CLLEND-----------------------------------------------------------------    SURFHY7A.51     
C                                                                          SURFHY7A.52     
C*L  ARGUMENTS---------------------------------------------------------    SURFHY7A.53     
C                                                                          SURFHY7A.54     

      SUBROUTINE SURF_HYD (NPNTS,NTYPE,TILE_PTS,TILE_INDEX,                 3,13SURFHY7A.55     
     &                     LICE_PTS,LICE_INDEX,                            SURFHY7A.56     
     &                     CAN_CPY,E_CANOPY,FRAC,INFIL,CON_RAIN,           SURFHY7A.57     
     &                     LS_RAIN,SNOW_FRAC,SNOW_MELT,TIMESTEP,           SURFHY7A.58     
     &                     CAN_WCNT,                                       SURFHY7A.59     
     &                     CAN_WCNT_GB,DSMC_DT,SURF_ROFF,TOT_TFALL)        SURFHY7A.60     
                                                                           SURFHY7A.61     
      IMPLICIT NONE                                                        SURFHY7A.62     
                                                                           SURFHY7A.63     
      INTEGER                                                              SURFHY7A.64     
     & NPNTS                ! IN Total number of land points.              SURFHY7A.65     
     &,NTYPE                ! IN Number of tiles.                          SURFHY7A.66     
     &,TILE_PTS(NTYPE)      ! IN Number of tile points.                    SURFHY7A.67     
     &,TILE_INDEX(NPNTS,NTYPE)                                             SURFHY7A.68     
!                           ! IN Index of tile points.                     SURFHY7A.69     
     &,LICE_INDEX(NPNTS)    ! IN Array of land ice points.                 SURFHY7A.70     
     &,LICE_PTS             ! IN Number of land ice points.                SURFHY7A.71     
                                                                           SURFHY7A.72     
      REAL                                                                 SURFHY7A.73     
     & CAN_CPY(NPNTS,NTYPE-1)! IN Canopy capacity for snow-free            SURFHY7A.74     
!                           !     land tiles (kg/m2).                      SURFHY7A.75     
     &,E_CANOPY(NPNTS,NTYPE-1)                                             SURFHY7A.76     
!                           ! IN Snow-free canopy evaporation (kg/m2/s).   SURFHY7A.77     
     &,FRAC(NPNTS,NTYPE)    ! IN Tile fractions.                           SURFHY7A.78     
     &,INFIL(NPNTS,NTYPE)   ! IN Infiltration rate (kg/m2/s).              SURFHY7A.79     
     &,CON_RAIN(NPNTS)      ! IN Convective rain (kg/m2/s).                SURFHY7A.80     
     &,LS_RAIN(NPNTS)       ! IN Large-scale rain (kg/m2/s).               SURFHY7A.81     
     &,SNOW_FRAC(NPNTS)     ! IN Fraction of gridbox with snow cover.      SURFHY7A.82     
     &,SNOW_MELT(NPNTS)     ! IN Snow melt (kg/m2/s).                      SURFHY7A.83     
     &,TIMESTEP             ! IN Timestep (s).                             SURFHY7A.84     
                                                                           SURFHY7A.85     
      REAL                                                                 SURFHY7A.86     
     & CAN_WCNT(NPNTS,NTYPE-1)                                             SURFHY7A.87     
!                           ! INOUT Snow-free tile canopy water contents   SURFHY7A.88     
!                           !       (kg/m2).                               SURFHY7A.89     
                                                                           SURFHY7A.90     
      REAL                                                                 SURFHY7A.91     
     & CAN_WCNT_GB(NPNTS)   ! OUT Gridbox canopy water content (kg/m2).    SURFHY7A.92     
     &,DSMC_DT(NPNTS)       ! OUT Rate of change of soil moisture          SURFHY7A.93     
                            !     content (kg/m2/s).                       SURFHY7A.94     
     &,SURF_ROFF(NPNTS)     ! OUT Cumulative surface runoff (kg/m2/s).     SURFHY7A.95     
     &,TOT_TFALL(NPNTS)     ! OUT Cumulative canopy throughfall            SURFHY7A.96     
                            !     (kg/m2/s).                               SURFHY7A.97     
                                                                           SURFHY7A.98     
!  Workspace -----------------------------------------------------------   SURFHY7A.99     
      REAL                                                                 SURFHY7A.100    
     & CAN_COND(NPNTS)      ! Canopy condensation (kg/m2/s).               SURFHY7A.101    
                                                                           SURFHY7A.102    
      INTEGER                                                              SURFHY7A.103    
     & I                    ! Loop counter (land points).                  SURFHY7A.104    
     &,J                    ! Loop counter (tile points).                  SURFHY7A.105    
     &,N                    ! Loop counter (tiles).                        SURFHY7A.106    
                                                                           SURFHY7A.107    
      EXTERNAL FRUNOFF,SIEVE                                               SURFHY7A.108    
                                                                           SURFHY7A.109    
! Zero cumulative stores                                                   SURFHY7A.110    
      DO I=1,NPNTS                                                         SURFHY7A.111    
        CAN_WCNT_GB(I) = 0.0                                               SURFHY7A.112    
        TOT_TFALL(I) = 0.0                                                 SURFHY7A.113    
        SURF_ROFF(I) = 0.0                                                 SURFHY7A.114    
        DSMC_DT(I)   = 0.0                                                 SURFHY7A.115    
      ENDDO                                                                SURFHY7A.116    
                                                                           SURFHY7A.117    
! Land-ice points                                                          SURFHY7A.118    
      DO J=1,LICE_PTS                                                      SURFHY7A.119    
        I = LICE_INDEX(J)                                                  SURFHY7A.120    
        TOT_TFALL(I) = LS_RAIN(I) + CON_RAIN(I)                            SURFHY7A.121    
        SURF_ROFF(I) = TOT_TFALL(I) + SNOW_MELT(I)                         SURFHY7A.122    
      ENDDO                                                                SURFHY7A.123    
                                                                           SURFHY7A.124    
! Surface runoff of snowmelt                                               SURFHY7A.125    
      DO N=1,NTYPE-1                                                       SURFHY7A.126    
        DO J=1,TILE_PTS(N)                                                 SURFHY7A.127    
          I = TILE_INDEX(J,N)                                              SURFHY7A.128    
          IF ( SNOW_MELT(I) .GT. 0. )                                      SURFHY7A.129    
     &      SURF_ROFF(I) = SURF_ROFF(I) + FRAC(I,N)*SNOW_MELT(I) *         SURFHY7A.130    
     &                     EXP( - SNOW_FRAC(I)*INFIL(I,N)/SNOW_MELT(I) )   SURFHY7A.131    
!                                                            ... P252.14   SURFHY7A.132    
        ENDDO                                                              SURFHY7A.133    
      ENDDO                                                                SURFHY7A.134    
                                                                           SURFHY7A.135    
! Reduce canopy water content by evaporation                               SURFHY7A.136    
      DO N=1,NTYPE-1                                                       SURFHY7A.137    
        DO J=1,TILE_PTS(N)                                                 SURFHY7A.138    
        I = TILE_INDEX(J,N)                                                SURFHY7A.139    
          IF (E_CANOPY(I,N) .GT. 0.0)                                      SURFHY7A.140    
     &      CAN_WCNT(I,N) =                                                SURFHY7A.141    
     &                 MAX( CAN_WCNT(I,N) - E_CANOPY(I,N)*TIMESTEP, 0. )   SURFHY7A.142    
        ENDDO                                                              SURFHY7A.143    
      ENDDO                                                                SURFHY7A.144    
                                                                           SURFHY7A.145    
      DO N=1,NTYPE-1                                                       SURFHY7A.146    
                                                                           SURFHY7A.147    
! Define canopy condensation when evaporation is negative                  SURFHY7A.148    
        DO J=1,TILE_PTS(N)                                                 SURFHY7A.149    
        I = TILE_INDEX(J,N)                                                SURFHY7A.150    
          IF ( E_CANOPY(I,N) .LT. 0. ) THEN                                SURFHY7A.151    
           CAN_COND(I) = - E_CANOPY(I,N)                                   SURFHY7A.152    
          ELSE                                                             SURFHY7A.153    
           CAN_COND(I) = 0.                                                SURFHY7A.154    
          ENDIF                                                            SURFHY7A.155    
        ENDDO                                                              SURFHY7A.156    
                                                                           SURFHY7A.157    
! Canopy interception, throughfall and surface runoff for condensation,    SURFHY7A.158    
! assumed to cover 100% of gridbox                                         SURFHY7A.159    
        CALL SIEVE (NPNTS,TILE_PTS(N),TILE_INDEX(1,N),1.,                  SURFHY7A.160    
     &              CAN_CPY(1,N),CAN_COND,FRAC(1,N),TIMESTEP,              SURFHY7A.161    
     &              CAN_WCNT(1,N),TOT_TFALL)                               SURFHY7A.162    
        CALL FRUNOFF (NPNTS,TILE_PTS(N),TILE_INDEX(1,N),1.,                SURFHY7A.163    
     &                CAN_CPY(1,N),CAN_WCNT(1,N),INFIL(1,N),CAN_COND,      SURFHY7A.164    
     &                FRAC(1,N),TIMESTEP,                                  SURFHY7A.165    
     &                SURF_ROFF)                                           SURFHY7A.166    
                                                                           SURFHY7A.167    
! Canopy interception, throughfall and surface runoff for large-scale      SURFHY7A.168    
! rain, assumed to cover 100% of gridbox                                   SURFHY7A.169    
        CALL SIEVE (NPNTS,TILE_PTS(N),TILE_INDEX(1,N),1.,                  SURFHY7A.170    
     &              CAN_CPY(1,N),LS_RAIN,FRAC(1,N),TIMESTEP,               SURFHY7A.171    
     &              CAN_WCNT(1,N),TOT_TFALL)                               SURFHY7A.172    
        CALL FRUNOFF (NPNTS,TILE_PTS(N),TILE_INDEX(1,N),1.,                SURFHY7A.173    
     &                CAN_CPY(1,N),CAN_WCNT(1,N),INFIL(1,N),LS_RAIN,       SURFHY7A.174    
     &                FRAC(1,N),TIMESTEP,                                  SURFHY7A.175    
     &                SURF_ROFF)                                           SURFHY7A.176    
                                                                           SURFHY7A.177    
! Canopy interception, throughfall and surface runoff for convective       SURFHY7A.178    
! rain, assumed to cover 30% of gridbox                                    SURFHY7A.179    
        CALL SIEVE (NPNTS,TILE_PTS(N),TILE_INDEX(1,N),0.3,                 SURFHY7A.180    
     &              CAN_CPY(1,N),CON_RAIN,FRAC(1,N),TIMESTEP,              SURFHY7A.181    
     &              CAN_WCNT(1,N),TOT_TFALL)                               SURFHY7A.182    
        CALL FRUNOFF (NPNTS,TILE_PTS(N),TILE_INDEX(1,N),0.3,               SURFHY7A.183    
     &                CAN_CPY(1,N),CAN_WCNT(1,N),INFIL(1,N),CON_RAIN,      SURFHY7A.184    
     &                FRAC(1,N),TIMESTEP,                                  SURFHY7A.185    
     &                SURF_ROFF)                                           SURFHY7A.186    
                                                                           SURFHY7A.187    
        DO I=1,NPNTS                                                       SURFHY7A.188    
          CAN_WCNT_GB(I) = CAN_WCNT_GB(I) + FRAC(I,N)*CAN_WCNT(I,N)        SURFHY7A.189    
        ENDDO                                                              SURFHY7A.190    
                                                                           SURFHY7A.191    
      ENDDO                                                                SURFHY7A.192    
                                                                           SURFHY7A.193    
      DO I=1,NPNTS                                                         SURFHY7A.194    
        DSMC_DT(I) = TOT_TFALL(I) + SNOW_MELT(I) - SURF_ROFF(I)            SURFHY7A.195    
      ENDDO                                                                SURFHY7A.196    
                                                                           SURFHY7A.197    
      RETURN                                                               SURFHY7A.198    
      END                                                                  SURFHY7A.199    
*ENDIF                                                                     SURFHY7A.200