*IF DEF,A08_1A,OR,DEF,A08_5A                                               GKR1F405.3      
C ******************************COPYRIGHT******************************    GTS2F400.3205   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.3206   
C                                                                          GTS2F400.3207   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.3208   
C restrictions as set forth in the contract.                               GTS2F400.3209   
C                                                                          GTS2F400.3210   
C                Meteorological Office                                     GTS2F400.3211   
C                London Road                                               GTS2F400.3212   
C                BRACKNELL                                                 GTS2F400.3213   
C                Berkshire UK                                              GTS2F400.3214   
C                RG12 2SZ                                                  GTS2F400.3215   
C                                                                          GTS2F400.3216   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.3217   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.3218   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.3219   
C Modelling at the above address.                                          GTS2F400.3220   
C ******************************COPYRIGHT******************************    GTS2F400.3221   
!    SUBROUTINE FRUNOFF------------------------------------------------    APA1F405.125    
!                                                                          APA1F405.126    
! Subroutine Interface:                                                    APA1F405.127    

      SUBROUTINE FRUNOFF (NPNTS,R,TFALL,CAN_WCNT,CAN_CPY,INFIL,AREA         7APA1F405.128    
     &,                   RUNOFF,TIMESTEP)                                 APA1F405.129    
                                                                           APA1F405.130    
      IMPLICIT NONE                                                        FRUNOF1A.32     
!                                                                          APA1F405.131    
! Description:                                                             APA1F405.132    
!     Calculates the fast (surface) runoff at the soil surface             APA1F405.133    
!                                                                          APA1F405.134    
! Documentation:                                                           APA1F405.135    
!                                                                          APA1F405.136    
! Current Code Owner: Peter Cox                                            APA1F405.137    
!                                                                          APA1F405.138    
! History:                                                                 APA1F405.139    
! Version  Date    Comment                                                 APA1F405.140    
! -------  ----    -------                                                 APA1F405.141    
! 4.5      6/98    Options to interpret canopy moisture as bimodally       APA1F405.142    
!                  rather than uniformily distributed, with either a       APA1F405.143    
!                  random or maximum overlap of the wet canopy and         APA1F405.144    
!                  the precipitating area (P.M.Cox)                        APA1F405.145    
! 4.5  01/10/98    Removed old section-version defs. K Rogers              APA1F405.146    
!                                                                          APA1F405.147    
! Code Description:                                                        APA1F405.148    
!   Language: FORTRAN 77 + common extensions.                              APA1F405.149    
!                                                                          APA1F405.150    
! System component covered: P25                                            APA1F405.151    
! System Task: P25                                                         APA1F405.152    
!                                                                          APA1F405.153    
! Subroutine arguments                                                     APA1F405.154    
! Scalar arguments with intent(IN):                                        APA1F405.155    
      INTEGER                                                              APA1F405.156    
     & NPNTS                ! IN Number of gridpoints.                     APA1F405.157    
                                                                           APA1F405.158    
      REAL                                                                 APA1F405.159    
     & TIMESTEP             ! IN Model timestep (s).                       APA1F405.160    
     &,AREA                 ! IN Fractional area of the gridbox over       APA1F405.161    
C                           !    which water falls.                        APA1F405.162    
                                                                           APA1F405.163    
! Array arguments with intent(IN):                                         APA1F405.164    
      REAL                                                                 APA1F405.165    
     & R(NPNTS)             ! IN Flux of water incident on the             APA1F405.166    
C                           !    canopy (kg/m2/s).                         APA1F405.167    
     &,TFALL(NPNTS)         ! IN Throughfall (kg/m2/s).                    APA1F405.168    
     &,CAN_WCNT(NPNTS)      ! IN Canopy water content (kg/m2).             APA1F405.169    
     &,CAN_CPY(NPNTS)       ! IN Canopy capacity (kg/m2).                  APA1F405.170    
     &,INFIL(NPNTS)         ! IN Maximum infiltration rate (kg/m2/s).      APA1F405.171    
                                                                           APA1F405.172    
! Array arguments with intent(OUT):                                        APA1F405.173    
      REAL                                                                 APA1F405.174    
     & RUNOFF(NPNTS)        ! OUT Surface runoff (kg/m2/s).                APA1F405.175    
                                                                           APA1F405.176    
! Local scalars:                                                           APA1F405.177    
      INTEGER                                                              APA1F405.178    
     & I                    ! WORK Loop counter.                           APA1F405.179    
                                                                           APA1F405.180    
      REAL                                                                 APA1F405.181    
     & AEXP,AEXP1,AEXP2     ! WORK Exponential terms.                      APA1F405.182    
     &,CAN_RATIO            ! WORK Fractional saturation of the            APA1F405.183    
C                           !      canopy.                                 APA1F405.184    
     &,CM                   ! WORK (CAN_CPY - CAN_WCNT)/TIMESTEP           APA1F405.185    
C                           !      (kg/m2/s).                              APA1F405.186    
*IF DEF,SCMA,AND,-DEF,T3E                                                  APA1F405.187    
      REAL*8 BIG_TMP        ! SCM double real.                             APA1F405.188    
*ENDIF                                                                     APA1F405.189    
                                                                           APA1F405.190    
! Local parameters:                                                        APA1F405.191    
*CALL MOSES_OPT                                                            APA1F405.192    
                                                                           APA1F405.193    
C-----------------------------------------------------------------------   FRUNOF1A.34     
C Uniform canopy water                                                     APA1F405.194    
C-----------------------------------------------------------------------   FRUNOF1A.36     
      IF (TF_MODEL.EQ.1) THEN                                              APA1F405.195    
        DO I=1,NPNTS                                                       APA1F405.196    
          IF (R(I).GT.0.0) THEN                                            APA1F405.197    
            IF (INFIL(I)*TIMESTEP.LE.CAN_WCNT(I).AND.                      APA1F405.198    
     &               CAN_CPY(I).GT.0.0) THEN                               APA1F405.199    
C-----------------------------------------------------------------------   FRUNOF1A.41     
C Equation (P252.14A)                                                      APA1F405.200    
C-----------------------------------------------------------------------   FRUNOF1A.43     
              AEXP=AREA*CAN_CPY(I)/R(I)                                    APA1F405.201    
              IF (CAN_WCNT(I).GT.0.0) THEN                                 APA1F405.202    
                AEXP1=EXP(-AEXP*INFIL(I)/CAN_WCNT(I))                      APA1F405.203    
              ELSE                                                         APA1F405.204    
                AEXP1=0.0                                                  APA1F405.205    
              ENDIF                                                        APA1F405.206    
              AEXP2=EXP(-AEXP/TIMESTEP)                                    APA1F405.207    
              CAN_RATIO=CAN_WCNT(I)/CAN_CPY(I)                             APA1F405.208    
*IF DEF,SCMA,AND,-DEF,T3E                                                  APA1F405.209    
              IF (AEXP1 .LT. 1E-30) AEXP1=0.0                              APA1F405.210    
              IF (AEXP2 .LT. 1E-30) AEXP2=0.0                              APA1F405.211    
              BIG_TMP= DBLE(R(I)) * (DBLE(CAN_RATIO * AEXP1) +             APA1F405.212    
     &          (1.0 - CAN_RATIO)*AEXP2)                                   APA1F405.213    
              IF (BIG_TMP .LT. 1E-35) BIG_TMP=0.0                          APA1F405.214    
              RUNOFF(I)=BIG_TMP                                            APA1F405.215    
*ELSE                                                                      APA1F405.216    
              RUNOFF(I)=R(I)*(CAN_RATIO*AEXP1+(1.0-CAN_RATIO)*AEXP2)       APA1F405.217    
*ENDIF                                                                     APA1F405.218    
            ELSE                                                           APA1F405.219    
C-----------------------------------------------------------------------   FRUNOF1A.60     
C Equation (P254.14B)                                                      APA1F405.220    
C-----------------------------------------------------------------------   FRUNOF1A.62     
              CM=(CAN_CPY(I)-CAN_WCNT(I))/TIMESTEP                         APA1F405.221    
*IF DEF,SCMA,AND,-DEF,T3E                                                  APA1F405.222    
              IF (( AREA*(INFIL(I)+CM)/R(I)) .GT. 30) THEN                 APA1F405.223    
                AEXP=0                                                     APA1F405.224    
              ELSE                                                         APA1F405.225    
                AEXP = EXP( -AREA*(INFIL(I)+CM)/R(I))                      APA1F405.226    
              ENDIF                                                        APA1F405.227    
              BIG_TMP=DBLE(R(I))*AEXP                                      APA1F405.228    
              IF (BIG_TMP .LT. 1E-35) THEN                                 APA1F405.229    
                RUNOFF(I)=0.                                               APA1F405.230    
              ELSE                                                         APA1F405.231    
                RUNOFF(I)=BIG_TMP                                          APA1F405.232    
              ENDIF                                                        APA1F405.233    
*ELSE                                                                      APA1F405.234    
              AEXP=EXP(-AREA*(INFIL(I)+CM)/R(I))                           APA1F405.235    
              RUNOFF(I)=R(I)*AEXP                                          APA1F405.236    
*ENDIF                                                                     APA1F405.237    
            ENDIF                                                          APA1F405.238    
          ELSE                                                             APA1F405.239    
            RUNOFF(I)=R(I)                                                 APA1F405.240    
          ENDIF                                                            APA1F405.241    
        ENDDO                                                              APA1F405.242    
                                                                           APA1F405.243    
C-----------------------------------------------------------------------   FRUNOF1A.67     
C Bimodal canopy water                                                     APA1F405.244    
C-----------------------------------------------------------------------   FRUNOF1A.69     
      ELSEIF (TF_MODEL.EQ.2.OR.TF_MODEL.EQ.3) THEN                         APA1F405.245    
        DO I=1,NPNTS                                                       APA1F405.246    
          IF (R(I).GT.0.0) THEN                                            APA1F405.247    
*IF DEF,SCMA,AND,-DEF,T3E                                                  APA1F405.248    
            IF (( AREA*(INFIL(I))/R(I)) .GT. 30) THEN                      APA1F405.249    
              RUNOFF(I)= 0                                                 APA1F405.250    
            ELSE                                                           APA1F405.251    
              RUNOFF(I)=TFALL(I)*EXP(-AREA*INFIL(I)/R(I))                  APA1F405.252    
            ENDIF                                                          APA1F405.253    
*ELSE                                                                      APA1F405.254    
            RUNOFF(I)=TFALL(I)*EXP(-AREA*INFIL(I)/R(I))                    APA1F405.255    
*ENDIF                                                                     APA1F405.256    
          ELSE                                                             APA1F405.257    
            RUNOFF(I)=R(I)                                                 APA1F405.258    
          ENDIF                                                            APA1F405.259    
        ENDDO                                                              APA1F405.260    
      ENDIF                                                                APA1F405.261    
      RETURN                                                               FRUNOF1A.153    
      END                                                                  FRUNOF1A.154    
*ENDIF                                                                     FRUNOF1A.155