*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.39SUBROUTINE 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