*IF DEF,A08_7A                                                             FRUNOF7A.2      
C ******************************COPYRIGHT******************************    FRUNOF7A.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    FRUNOF7A.4      
C                                                                          FRUNOF7A.5      
C Use, duplication or disclosure of this code is subject to the            FRUNOF7A.6      
C restrictions as set forth in the contract.                               FRUNOF7A.7      
C                                                                          FRUNOF7A.8      
C                Meteorological Office                                     FRUNOF7A.9      
C                London Road                                               FRUNOF7A.10     
C                BRACKNELL                                                 FRUNOF7A.11     
C                Berkshire UK                                              FRUNOF7A.12     
C                RG12 2SZ                                                  FRUNOF7A.13     
C                                                                          FRUNOF7A.14     
C If no contract has been raised with this copy of the code, the use,      FRUNOF7A.15     
C duplication or disclosure of it is strictly prohibited.  Permission      FRUNOF7A.16     
C to do so must first be obtained in writing from the Head of Numerical    FRUNOF7A.17     
C Modelling at the above address.                                          FRUNOF7A.18     
C ******************************COPYRIGHT******************************    FRUNOF7A.19     
C                                                                          FRUNOF7A.20     
CLL  SUBROUTINE FRUNOFF------------------------------------------------    FRUNOF7A.21     
CLL                                                                        FRUNOF7A.22     
CLL  PURPOSE : TO CALCULATE SURFACE RUNOFF                                 FRUNOF7A.23     
CLL                                                                        FRUNOF7A.24     
CLL  SUITABLE FOR SINGLE COLUMN MODEL USE                                  FRUNOF7A.25     
CLL                                                                        FRUNOF7A.26     
CLL  WRITTEN FOR CRAY-YMP BY S.ALLEN AND D.GREGORY                         FRUNOF7A.27     
CLL  DEC - FEB 1989/90                                                     FRUNOF7A.28     
CLL                                                                        FRUNOF7A.29     
CLL  MODEL            MODIFICATION HISTORY FROM MODEL VERSION 3.0:         FRUNOF7A.30     
CLL VERSION  DATE                                                          FRUNOF7A.31     
CLL                                                                        FRUNOF7A.32     
CLL  PROGRAMMING STANDARDS : UNIFIED MODEL DOCUMENTATION PAPER NO. 4       FRUNOF7A.33     
CLL  VERSION NO. 1 18/1/90                                                 FRUNOF7A.34     
CLL                                                                        FRUNOF7A.35     
CLL  LOGICAL COMPONENTS : P252                                             FRUNOF7A.36     
CLL                                                                        FRUNOF7A.37     
CLL  SYSTEM TASK :                                                         FRUNOF7A.38     
CLL                                                                        FRUNOF7A.39     
CLL  DOCUMENTATION : UNIFIED MODEL DOCUMENTATION PAPER NO 25               FRUNOF7A.40     
CLL                  SECTION (3B(II)), EQN(P252.14)                        FRUNOF7A.41     
CLL                                                                        FRUNOF7A.42     
CLLEND-----------------------------------------------------------------    FRUNOF7A.43     
C                                                                          FRUNOF7A.44     
C*L  ARGUMENTS---------------------------------------------------------    FRUNOF7A.45     
C                                                                          FRUNOF7A.46     

      SUBROUTINE FRUNOFF (                                                  7FRUNOF7A.47     
     & NPNTS,TILE_PTS,TILE_INDEX,AREA,                                     FRUNOF7A.48     
     & CAN_CPY,CAN_WCNT,INFIL,R,FRAC,TIMESTEP,                             FRUNOF7A.49     
     & SURF_ROFF                                                           FRUNOF7A.50     
     & )                                                                   FRUNOF7A.51     
                                                                           FRUNOF7A.52     
      IMPLICIT NONE                                                        FRUNOF7A.53     
                                                                           FRUNOF7A.54     
      INTEGER                                                              FRUNOF7A.55     
     & NPNTS                ! IN Total number of land points.              FRUNOF7A.56     
     &,TILE_PTS             ! IN Number of tile points.                    FRUNOF7A.57     
     &,TILE_INDEX(NPNTS)    ! IN Index of tile points.                     FRUNOF7A.58     
                                                                           FRUNOF7A.59     
      REAL                                                                 FRUNOF7A.60     
     & AREA                 ! IN Fractional area of gridbox over which     FRUNOF7A.61     
                            !    water falls (%).                          FRUNOF7A.62     
     &,CAN_CPY(NPNTS)       ! IN Canopy capacity (kg/m2).                  FRUNOF7A.63     
     &,CAN_WCNT(NPNTS)      ! IN Canopy water content (kg/m2).             FRUNOF7A.64     
     &,INFIL(NPNTS)         ! IN Infiltration rate (kg/m2/s).              FRUNOF7A.65     
     &,R(NPNTS)             ! IN Water fall rate (kg/m2/s).                FRUNOF7A.66     
     &,FRAC(NPNTS)          ! IN Tile fraction.                            FRUNOF7A.67     
     &,TIMESTEP             ! IN Timestep (s).                             FRUNOF7A.68     
                                                                           FRUNOF7A.69     
      REAL                                                                 FRUNOF7A.70     
     & SURF_ROFF(NPNTS)     ! OUT Cummulative surface runoff (kg/m2/s).    FRUNOF7A.71     
                                                                           FRUNOF7A.72     
!  Workspace --------------------------------------------------------      FRUNOF7A.73     
      REAL                                                                 FRUNOF7A.74     
     & AEXP                 ! Used in the calculation of exponential       FRUNOF7A.75     
     &,AEXP1                ! terms in the surface runoff formula.         FRUNOF7A.76     
     &,AEXP2                !                                              FRUNOF7A.77     
     &,CM                   ! (CAN_CPY - CAN_WCNT)/TIMESTEP                FRUNOF7A.78     
     &,CAN_RATIO            ! CAN_WCNT / CAN_CPY                           FRUNOF7A.79     
     &,RUNOFF               ! Local runoff.                                FRUNOF7A.80     
                                                                           FRUNOF7A.81     
      INTEGER                                                              FRUNOF7A.82     
     & I                    ! Land point index.                            FRUNOF7A.83     
     &,J                    ! Counter for loop over tile points.           FRUNOF7A.84     
                                                                           FRUNOF7A.85     
      DO J=1,TILE_PTS                                                      FRUNOF7A.86     
        I = TILE_INDEX(J)                                                  FRUNOF7A.87     
        RUNOFF = 0.                                                        FRUNOF7A.88     
        IF (R(I).GT.0.0) THEN                                              FRUNOF7A.89     
          IF ( INFIL(I)*TIMESTEP.LE.CAN_WCNT(I)                            FRUNOF7A.90     
     &                                   .AND. CAN_CPY(I).GT.0.0 ) THEN    FRUNOF7A.91     
! Infiltration in timestep < or = canopy water content                     FRUNOF7A.92     
             AEXP = AREA*CAN_CPY(I)/R(I)                                   FRUNOF7A.93     
             IF (CAN_WCNT(I) .GT. 0.0) THEN                                FRUNOF7A.94     
               AEXP1 = EXP( -AEXP*INFIL(I)/CAN_WCNT(I))                    FRUNOF7A.95     
             ELSE                                                          FRUNOF7A.96     
               AEXP1 = 0.0                                                 FRUNOF7A.97     
             END IF                                                        FRUNOF7A.98     
             AEXP2 = EXP( -AEXP/TIMESTEP)                                  FRUNOF7A.99     
             CAN_RATIO = CAN_WCNT(I)/CAN_CPY(I)                            FRUNOF7A.100    
             CAN_RATIO = MIN(CAN_RATIO,1.0)                                ABX1F405.967    
             RUNOFF = R(I) * ( CAN_RATIO*AEXP1 +                           FRUNOF7A.101    
     *                                       (1. - CAN_RATIO)*AEXP2 )      FRUNOF7A.102    
!                                                        ... P252.14A      FRUNOF7A.103    
          ELSE                                                             FRUNOF7A.104    
! Infiltration in timestep > canopy water content                          FRUNOF7A.105    
             CM = (CAN_CPY(I)-CAN_WCNT(I))/TIMESTEP                        FRUNOF7A.106    
             CM = MAX(CM,0.0)                                              ABX1F405.968    
             AEXP = EXP( -AREA*(INFIL(I)+CM)/R(I))                         FRUNOF7A.107    
             RUNOFF = R(I)*AEXP                    !     ... P252.14B      FRUNOF7A.108    
          ENDIF                                                            FRUNOF7A.109    
        ENDIF                                                              FRUNOF7A.110    
        SURF_ROFF(I) = SURF_ROFF(I) + FRAC(I)*RUNOFF                       FRUNOF7A.111    
      ENDDO                                                                FRUNOF7A.112    
                                                                           FRUNOF7A.113    
      RETURN                                                               FRUNOF7A.114    
      END                                                                  FRUNOF7A.115    
*ENDIF                                                                     FRUNOF7A.116