*IF DEF,A70_1A,OR,DEF,A70_1B APB4F405.3 *IF DEF,A01_3A,OR,DEF,A02_3A AGTFX3A.2 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.13076 C GTS2F400.13077 C Use, duplication or disclosure of this code is subject to the GTS2F400.13078 C restrictions as set forth in the contract. GTS2F400.13079 C GTS2F400.13080 C Meteorological Office GTS2F400.13081 C London Road GTS2F400.13082 C BRACKNELL GTS2F400.13083 C Berkshire UK GTS2F400.13084 C RG12 2SZ GTS2F400.13085 C GTS2F400.13086 C If no contract has been raised with this copy of the code, the use, GTS2F400.13087 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.13088 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.13089 C Modelling at the above address. GTS2F400.13090 C ******************************COPYRIGHT****************************** GTS2F400.13091 C GTS2F400.13092 !+ Subroutine to increment the total flux within a spectral band. AGTFX3A.3 ! AGTFX3A.4 ! Method: AGTFX3A.5 ! The total flux is incremented by a multiple of the flux AGTFX3A.6 ! flux within a spectral band. This routine is similar to AGTFX3A.7 ! AUGMENT_FLUX, but here the Planckian flux must be AGTFX3A.8 ! incremented in the IR. AGTFX3A.9 ! AGTFX3A.10 ! Current Owner of Code: J. M. Edwards AGTFX3A.11 ! AGTFX3A.12 ! History: AGTFX3A.13 ! Version Date Comment AGTFX3A.14 ! 4.0 27-07-95 Original Code AGTFX3A.15 ! (J. M. Edwards) AGTFX3A.16 ! AGTFX3A.17 ! Description of Code: AGTFX3A.18 ! FORTRAN 77 with extensions listed in documentation. AGTFX3A.19 ! AGTFX3A.20 !- --------------------------------------------------------------------- AGTFX3A.21SUBROUTINE AUGMENT_TOTAL_FLUX(N_PROFILE, N_LAYER, N_AUGMENT 1AGTFX3A.22 & , ISOLIR, L_CLEAR, L_NET AGTFX3A.23 & , WEIGHT_BAND, PLANCK_SOURCE_BAND AGTFX3A.24 & , FLUX_DIRECT, FLUX_TOTAL AGTFX3A.25 & , FLUX_DIRECT_BAND, FLUX_TOTAL_BAND AGTFX3A.26 & , FLUX_DIRECT_CLEAR, FLUX_TOTAL_CLEAR AGTFX3A.27 & , FLUX_DIRECT_CLEAR_BAND, FLUX_TOTAL_CLEAR_BAND AGTFX3A.28 & , PLANCK_FLUX AGTFX3A.29 & , NPD_PROFILE, NPD_LAYER AGTFX3A.30 & , ALBEDO_SURFACE_DIFF, ALBEDO_SURFACE_DIR AGTFX3A.31 & ) AGTFX3A.32 ! AGTFX3A.33 ! AGTFX3A.34 IMPLICIT NONE AGTFX3A.35 ! AGTFX3A.36 ! AGTFX3A.37 ! SIZES OF DUMMY ARRAYS. AGTFX3A.38 INTEGER !, INTENT(IN) AGTFX3A.39 & NPD_PROFILE AGTFX3A.40 ! MAXIMUM NUMBER OF PROFILES AGTFX3A.41 & , NPD_LAYER AGTFX3A.42 ! MAXIMUM NUMBER OF LAYERS AGTFX3A.43 ! AGTFX3A.44 ! INCLUDE COMDECKS AGTFX3A.45 *CALL SPCRG3A
AGTFX3A.46 ! AGTFX3A.47 ! DUMMY ARGUMENTS. AGTFX3A.48 INTEGER !, INTENT(IN) AGTFX3A.49 & N_PROFILE AGTFX3A.50 ! NUMBER OF PROFILES AGTFX3A.51 & , N_LAYER AGTFX3A.52 ! NUMBER OF LAYERS AGTFX3A.53 & , N_AUGMENT AGTFX3A.54 ! LENGTH OF VECTOR TO AUGMENT AGTFX3A.55 & , ISOLIR AGTFX3A.56 ! SPECTRAL REGION AGTFX3A.57 LOGICAL !, INTENT(IN) AGTFX3A.58 & L_CLEAR AGTFX3A.59 ! CLEAR FLUXES CALCULATED AGTFX3A.60 & , L_NET AGTFX3A.61 ! CALCULATE NET FLUXES AGTFX3A.62 REAL !, INTENT(IN) AGTFX3A.63 & WEIGHT_BAND AGTFX3A.64 ! WEIGHTING FACTOR FOR BAND AGTFX3A.65 & , PLANCK_SOURCE_BAND(NPD_PROFILE, 0: NPD_LAYER) AGTFX3A.66 ! PLANCK FUNCTION IN BAND AGTFX3A.67 & , FLUX_DIRECT_BAND(NPD_PROFILE, 0: NPD_LAYER) AGTFX3A.68 ! DIRECT FLUX IN BAND AGTFX3A.69 & , FLUX_TOTAL_BAND(NPD_PROFILE, 2*NPD_LAYER+2) AGTFX3A.70 ! TOTAL FLUX IN BAND AGTFX3A.71 & , FLUX_DIRECT_CLEAR_BAND(NPD_PROFILE, 0: NPD_LAYER) AGTFX3A.72 ! CLEAR DIRECT FLUX IN BAND AGTFX3A.73 & , FLUX_TOTAL_CLEAR_BAND(NPD_PROFILE, 2*NPD_LAYER+2) AGTFX3A.74 ! CLEAR TOTAL FLUX IN BAND AGTFX3A.75 REAL !, INTENT(INOUT) AGTFX3A.76 & FLUX_DIRECT(NPD_PROFILE, 0: NPD_LAYER) AGTFX3A.77 ! DIRECT FLUX AGTFX3A.78 & , FLUX_TOTAL(NPD_PROFILE, 2*NPD_LAYER+2) AGTFX3A.79 ! TOTAL FLUX AGTFX3A.80 & , FLUX_DIRECT_CLEAR(NPD_PROFILE, 0: NPD_LAYER) AGTFX3A.81 ! CLEAR DIRECT FLUX AGTFX3A.82 & , FLUX_TOTAL_CLEAR(NPD_PROFILE, 2*NPD_LAYER+2) AGTFX3A.83 ! CLEAR TOTAL FLUX AGTFX3A.84 & , PLANCK_FLUX(NPD_PROFILE, 0: NPD_LAYER) AGTFX3A.85 ! PLANCKIAN FLUX AT EACH LAYER AGTFX3A.86 ! VARIABLES SPECIFIC TO THE UM. AGTFX3A.87 REAL !, INTENT(IN) AGTFX3A.88 & ALBEDO_SURFACE_DIFF(NPD_PROFILE) AGTFX3A.89 ! DIFFUSE ALBEDO AGTFX3A.90 & , ALBEDO_SURFACE_DIR(NPD_PROFILE) AGTFX3A.91 ! DIRECT ALBEDO AGTFX3A.92 ! AGTFX3A.93 ! LOCAL ARGUMENTS. AGTFX3A.94 INTEGER AGTFX3A.95 & I AGTFX3A.96 ! LOOP VARIABLE AGTFX3A.97 & , L AGTFX3A.98 ! LOOP VARIABLE AGTFX3A.99 ! AGTFX3A.100 ! AGTFX3A.101 ! INCREMENT THE TOTAL FLUXES. AGTFX3A.102 IF (ISOLIR.EQ.IP_SOLAR) THEN AGTFX3A.103 DO I=0, N_LAYER AGTFX3A.104 DO L=1, N_PROFILE AGTFX3A.105 FLUX_DIRECT(L, I)=FLUX_DIRECT(L, I) AGTFX3A.106 & +WEIGHT_BAND*FLUX_DIRECT_BAND(L, I) AGTFX3A.107 ENDDO AGTFX3A.108 ENDDO AGTFX3A.109 ENDIF AGTFX3A.110 DO I=1, N_AUGMENT AGTFX3A.111 DO L=1, N_PROFILE AGTFX3A.112 FLUX_TOTAL(L, I)=FLUX_TOTAL(L, I) AGTFX3A.113 & +WEIGHT_BAND*FLUX_TOTAL_BAND(L, I) AGTFX3A.114 ENDDO AGTFX3A.115 ENDDO AGTFX3A.116 ! AGTFX3A.117 IF (L_CLEAR) THEN AGTFX3A.118 IF (ISOLIR.EQ.IP_SOLAR) THEN AGTFX3A.119 DO I=0, N_LAYER AGTFX3A.120 DO L=1, N_PROFILE AGTFX3A.121 FLUX_DIRECT_CLEAR(L, I)=FLUX_DIRECT_CLEAR(L, I) AGTFX3A.122 & +WEIGHT_BAND*FLUX_DIRECT_CLEAR_BAND(L, I) AGTFX3A.123 ENDDO AGTFX3A.124 ENDDO AGTFX3A.125 ENDIF AGTFX3A.126 DO I=1, N_AUGMENT AGTFX3A.127 DO L=1, N_PROFILE AGTFX3A.128 FLUX_TOTAL_CLEAR(L, I)=FLUX_TOTAL_CLEAR(L, I) AGTFX3A.129 & +WEIGHT_BAND*FLUX_TOTAL_CLEAR_BAND(L, I) AGTFX3A.130 ENDDO AGTFX3A.131 ENDDO AGTFX3A.132 ! BOTH UPWARD AND DOWNWARD FLUXES ARE NEEDED AT THE SURFACE AGTFX3A.133 ! FOR DIAGNOSTICS. IF THE NET FLUX IS CALCULATED WE DETERMINE AGTFX3A.134 ! THE DIFFUSE UPWARD FLUX AND PUT IT WHERE IT BELONGS IN THE AGTFX3A.135 ! ARRAY. IF THE FULL FLUXES ARE CALCULATED NO ACTION IS NEEDED. AGTFX3A.136 IF (L_NET) THEN AGTFX3A.137 DO L=1, N_PROFILE AGTFX3A.138 FLUX_TOTAL_CLEAR(L, 2*N_LAYER+2) AGTFX3A.139 & =(ALBEDO_SURFACE_DIFF(L) AGTFX3A.140 & *FLUX_TOTAL_CLEAR_BAND(L, N_LAYER+1) AGTFX3A.141 & +ALBEDO_SURFACE_DIR(L) AGTFX3A.142 & *FLUX_DIRECT_CLEAR_BAND(L, N_LAYER)) AGTFX3A.143 & /(1.0E+00-ALBEDO_SURFACE_DIFF(L)) AGTFX3A.144 ENDDO AGTFX3A.145 ENDIF AGTFX3A.146 ENDIF AGTFX3A.147 ! AGTFX3A.148 ! SUM THE PLANCKIAN FLUXES FOR LATER ADDITION TO THE DIFFERENTIAL AGTFX3A.149 ! FLUXES. THIS IS NOT NECESSARY FOR A NET-FLUX SCHEME AGTFX3A.150 IF ( (ISOLIR.EQ.IP_INFRA_RED).AND.(.NOT.L_NET) ) THEN AGTFX3A.151 DO I=0, N_LAYER AGTFX3A.152 DO L=1, N_PROFILE AGTFX3A.153 PLANCK_FLUX(L, I)=PLANCK_FLUX(L, I) AGTFX3A.154 & +WEIGHT_BAND*PLANCK_SOURCE_BAND(L, I) AGTFX3A.155 ENDDO AGTFX3A.156 ENDDO AGTFX3A.157 ENDIF AGTFX3A.158 ! AGTFX3A.159 ! AGTFX3A.160 RETURN AGTFX3A.161 END AGTFX3A.162 *ENDIF DEF,A01_3A,OR,DEF,A02_3A AGTFX3A.163 *ENDIF DEF,A70_1A,OR,DEF,A70_1B APB4F405.4