*IF DEF,A70_1B                                                             AGFX3B.2      
*IF DEF,A01_3A,OR,DEF,A02_3A                                               AGFX3B.3      
C ******************************COPYRIGHT******************************    AGFX3B.4      
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved.    AGFX3B.5      
C                                                                          AGFX3B.6      
C Use, duplication or disclosure of this code is subject to the            AGFX3B.7      
C restrictions as set forth in the contract.                               AGFX3B.8      
C                                                                          AGFX3B.9      
C                Meteorological Office                                     AGFX3B.10     
C                London Road                                               AGFX3B.11     
C                BRACKNELL                                                 AGFX3B.12     
C                Berkshire UK                                              AGFX3B.13     
C                RG12 2SZ                                                  AGFX3B.14     
C                                                                          AGFX3B.15     
C If no contract has been raised with this copy of the code, the use,      AGFX3B.16     
C duplication or disclosure of it is strictly prohibited.  Permission      AGFX3B.17     
C to do so must first be obtained in writing from the Head of Numerical    AGFX3B.18     
C Modelling at the above address.                                          AGFX3B.19     
C ******************************COPYRIGHT******************************    AGFX3B.20     
C                                                                          AGFX3B.21     
!+ Subroutine to increment a sum of fluxes.                                AGFX3B.22     
!                                                                          AGFX3B.23     
! Method:                                                                  AGFX3B.24     
!       The arrays holding the summed fluxes are incremented               AGFX3B.25     
!       by a weighted sum of the variables suffixed with _INCR.            AGFX3B.26     
!       Arguments specify which arrays are to be incremented.              AGFX3B.27     
!                                                                          AGFX3B.28     
! Current Owner of Code: J. M. Edwards                                     AGFX3B.29     
!                                                                          AGFX3B.30     
! History:                                                                 AGFX3B.31     
!       Version         Date                    Comment                    AGFX3B.32     
!       4.5             11-06-98                Optimised version          AGFX3B.33     
!                                               (P. Burton)                AGFX3B.34     
!                                                                          AGFX3B.35     
! Description of Code:                                                     AGFX3B.36     
!   FORTRAN 77  with extensions listed in documentation.                   AGFX3B.37     
!                                                                          AGFX3B.38     
!- ---------------------------------------------------------------------   AGFX3B.39     

      SUBROUTINE AUGMENT_FLUX(N_PROFILE, N_LAYER, N_AUGMENT                 7AGFX3B.40     
     &   , ISOLIR, L_CLEAR                                                 AGFX3B.41     
     &   , WEIGHT_INCR                                                     AGFX3B.42     
     &   , FLUX_DIRECT, FLUX_TOTAL                                         AGFX3B.43     
     &   , FLUX_DIRECT_INCR, FLUX_TOTAL_INCR                               AGFX3B.44     
     &   , FLUX_DIRECT_CLEAR, FLUX_TOTAL_CLEAR                             AGFX3B.45     
     &   , FLUX_DIRECT_INCR_CLEAR, FLUX_TOTAL_INCR_CLEAR                   AGFX3B.46     
     &   , NPD_PROFILE, NPD_LAYER                                          AGFX3B.47     
     &   )                                                                 AGFX3B.48     
!                                                                          AGFX3B.49     
!                                                                          AGFX3B.50     
      IMPLICIT NONE                                                        AGFX3B.51     
!                                                                          AGFX3B.52     
!                                                                          AGFX3B.53     
!     SIZES OF DUMMY ARRAYS.                                               AGFX3B.54     
      INTEGER   !, INTENT(IN)                                              AGFX3B.55     
     &     NPD_PROFILE                                                     AGFX3B.56     
!             MAXIMUM NUMBER OF PROFILES                                   AGFX3B.57     
     &   , NPD_LAYER                                                       AGFX3B.58     
!             MAXIMUM NUMBER OF LAYERS                                     AGFX3B.59     
!                                                                          AGFX3B.60     
!     INCLUDE COMDECKS                                                     AGFX3B.61     
*CALL SPCRG3A                                                              AGFX3B.62     
!                                                                          AGFX3B.63     
!     DUMMY ARGUMENTS.                                                     AGFX3B.64     
      INTEGER   !, INTENT(IN)                                              AGFX3B.65     
     &     N_PROFILE                                                       AGFX3B.66     
!             NUMBER OF PROFILES                                           AGFX3B.67     
     &   , N_LAYER                                                         AGFX3B.68     
!             NUMBER OF LAYERS                                             AGFX3B.69     
     &   , N_AUGMENT                                                       AGFX3B.70     
!             LENGTH OF VECTOR TO AUGMENT                                  AGFX3B.71     
     &   , ISOLIR                                                          AGFX3B.72     
!             SPECTRAL REGION                                              AGFX3B.73     
      LOGICAL   !, INTENT(IN)                                              AGFX3B.74     
     &     L_CLEAR                                                         AGFX3B.75     
!             CLEAR FLUXES CALCULATED                                      AGFX3B.76     
      REAL  !, INTENT(IN)                                                  AGFX3B.77     
     &     WEIGHT_INCR                                                     AGFX3B.78     
!             WEIGHT TO APPLY TO FLUXES                                    AGFX3B.79     
     &   , FLUX_DIRECT_INCR(NPD_PROFILE, 0: NPD_LAYER)                     AGFX3B.80     
!             DIRECT FLUX IN BAND                                          AGFX3B.81     
     &   , FLUX_TOTAL_INCR(NPD_PROFILE, 2*NPD_LAYER+2)                     AGFX3B.82     
!             TOTAL FLUX IN BAND                                           AGFX3B.83     
     &   , FLUX_DIRECT_INCR_CLEAR(NPD_PROFILE, 0: NPD_LAYER)               AGFX3B.84     
!             CLEAR DIRECT FLUX IN BAND                                    AGFX3B.85     
     &   , FLUX_TOTAL_INCR_CLEAR(NPD_PROFILE, 2*NPD_LAYER+2)               AGFX3B.86     
!             CLEAR TOTAL FLUX IN BAND                                     AGFX3B.87     
      REAL  !, INTENT(INOUT)                                               AGFX3B.88     
     &     FLUX_DIRECT(NPD_PROFILE, 0: NPD_LAYER)                          AGFX3B.89     
!             DIRECT FLUX                                                  AGFX3B.90     
     &   , FLUX_TOTAL(NPD_PROFILE, 2*NPD_LAYER+2)                          AGFX3B.91     
!             TOTAL FLUX                                                   AGFX3B.92     
     &   , FLUX_DIRECT_CLEAR(NPD_PROFILE, 0: NPD_LAYER)                    AGFX3B.93     
!             CLEAR DIRECT FLUX                                            AGFX3B.94     
     &   , FLUX_TOTAL_CLEAR(NPD_PROFILE, 2*NPD_LAYER+2)                    AGFX3B.95     
!             CLEAR TOTAL FLUX                                             AGFX3B.96     
!                                                                          AGFX3B.97     
!     LOCAL ARGUMENTS.                                                     AGFX3B.98     
      INTEGER                                                              AGFX3B.99     
     &     I                                                               AGFX3B.100    
!             LOOP VARIABLE                                                AGFX3B.101    
     &   , L                                                               AGFX3B.102    
!             LOOP VARIABLE                                                AGFX3B.103    
!                                                                          AGFX3B.104    
!                                                                          AGFX3B.105    
!     INCREMENT THE ACTUAL FLUXES.                                         AGFX3B.106    
                                                                           AGFX3B.107    
! There are four possible cases                                            AGFX3B.108    
                                                                           AGFX3B.109    
      IF(ISOLIR.EQ.IP_SOLAR.AND.L_CLEAR) THEN                              AGFX3B.110    
                                                                           AGFX3B.111    
        DO I=0,N_LAYER                                                     AGFX3B.112    
          DO L=1,N_PROFILE                                                 AGFX3B.113    
            FLUX_DIRECT(L,I) = FLUX_DIRECT(L,I)+                           AGFX3B.114    
     &        WEIGHT_INCR*FLUX_DIRECT_INCR(L,I)                            AGFX3B.115    
            FLUX_DIRECT_CLEAR(L, I)=FLUX_DIRECT_CLEAR(L, I)+               AGFX3B.116    
     &        WEIGHT_INCR*FLUX_DIRECT_INCR_CLEAR(L, I)                     AGFX3B.117    
          END DO                                                           AGFX3B.118    
        END DO                                                             AGFX3B.119    
                                                                           AGFX3B.120    
        DO I=1, N_AUGMENT                                                  AGFX3B.121    
          DO L=1, N_PROFILE                                                AGFX3B.122    
            FLUX_TOTAL(L, I)=FLUX_TOTAL(L, I)+                             AGFX3B.123    
     &        WEIGHT_INCR*FLUX_TOTAL_INCR(L, I)                            AGFX3B.124    
            FLUX_TOTAL_CLEAR(L, I)=FLUX_TOTAL_CLEAR(L, I)+                 AGFX3B.125    
     &        WEIGHT_INCR*FLUX_TOTAL_INCR_CLEAR(L, I)                      AGFX3B.126    
          ENDDO                                                            AGFX3B.127    
        ENDDO                                                              AGFX3B.128    
                                                                           AGFX3B.129    
      ELSE IF(ISOLIR.EQ.IP_SOLAR.AND..NOT.L_CLEAR) THEN                    AGFX3B.130    
                                                                           AGFX3B.131    
        DO I=0, N_LAYER                                                    AGFX3B.132    
          DO L=1, N_PROFILE                                                AGFX3B.133    
            FLUX_DIRECT(L, I)=FLUX_DIRECT(L, I)+                           AGFX3B.134    
     &        WEIGHT_INCR*FLUX_DIRECT_INCR(L, I)                           AGFX3B.135    
          ENDDO                                                            AGFX3B.136    
        ENDDO                                                              AGFX3B.137    
                                                                           AGFX3B.138    
        DO I=1, N_AUGMENT                                                  AGFX3B.139    
          DO L=1, N_PROFILE                                                AGFX3B.140    
            FLUX_TOTAL(L, I)=FLUX_TOTAL(L, I)+                             AGFX3B.141    
     &        WEIGHT_INCR*FLUX_TOTAL_INCR(L, I)                            AGFX3B.142    
          ENDDO                                                            AGFX3B.143    
        ENDDO                                                              AGFX3B.144    
                                                                           AGFX3B.145    
      ELSE IF(ISOLIR.NE.IP_SOLAR.AND.L_CLEAR) THEN                         AGFX3B.146    
                                                                           AGFX3B.147    
        DO I=1, N_AUGMENT                                                  AGFX3B.148    
          DO L=1, N_PROFILE                                                AGFX3B.149    
            FLUX_TOTAL(L, I)=FLUX_TOTAL(L, I)+                             AGFX3B.150    
     &        WEIGHT_INCR*FLUX_TOTAL_INCR(L, I)                            AGFX3B.151    
            FLUX_TOTAL_CLEAR(L, I)=FLUX_TOTAL_CLEAR(L, I)+                 AGFX3B.152    
     &        WEIGHT_INCR*FLUX_TOTAL_INCR_CLEAR(L, I)                      AGFX3B.153    
          ENDDO                                                            AGFX3B.154    
        ENDDO                                                              AGFX3B.155    
                                                                           AGFX3B.156    
      ELSE IF(ISOLIR.NE.IP_SOLAR.AND..NOT.L_CLEAR) THEN                    AGFX3B.157    
                                                                           AGFX3B.158    
        DO I=1, N_AUGMENT                                                  AGFX3B.159    
          DO L=1, N_PROFILE                                                AGFX3B.160    
            FLUX_TOTAL(L, I)=FLUX_TOTAL(L, I)+                             AGFX3B.161    
     &        WEIGHT_INCR*FLUX_TOTAL_INCR(L, I)                            AGFX3B.162    
          ENDDO                                                            AGFX3B.163    
        ENDDO                                                              AGFX3B.164    
                                                                           AGFX3B.165    
      END IF                                                               AGFX3B.166    
                                                                           AGFX3B.167    
!                                                                          AGFX3B.168    
      RETURN                                                               AGFX3B.169    
      END                                                                  AGFX3B.170    
*ENDIF DEF,A01_3A,OR,DEF,A02_3A                                            AGFX3B.171    
*ENDIF DEF,A70_1B                                                          AGFX3B.172