*IF DEF,A70_1B SLVTPA3B.2 *IF DEF,A01_3A,OR,DEF,A02_3A SLVTPA3B.3 C *****************************COPYRIGHT****************************** SLVTPA3B.4 C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved. SLVTPA3B.5 C SLVTPA3B.6 C Use, duplication or disclosure of this code is subject to the SLVTPA3B.7 C restrictions as set forth in the contract. SLVTPA3B.8 C SLVTPA3B.9 C Meteorological Office SLVTPA3B.10 C London Road SLVTPA3B.11 C BRACKNELL SLVTPA3B.12 C Berkshire UK SLVTPA3B.13 C RG12 2SZ SLVTPA3B.14 C SLVTPA3B.15 C If no contract has been raised with this copy of the code, the use, SLVTPA3B.16 C duplication or disclosure of it is strictly prohibited. Permission SLVTPA3B.17 C to do so must first be obtained in writing from the Head of Numerical SLVTPA3B.18 C Modelling at the above address. SLVTPA3B.19 C ******************************COPYRIGHT****************************** SLVTPA3B.20 C SLVTPA3B.21 !+ Subroutine to solve for triple overlaps with approximate scattering. SLVTPA3B.22 ! SLVTPA3B.23 ! Method: SLVTPA3B.24 ! The flux is propagated downwards, ignoring reflection terms. SLVTPA3B.25 ! Since the routine uses differential fluxes, this effectively SLVTPA3B.26 ! treats the upward flux as Planckian at this point. Upward SLVTPA3B.27 ! fluxes are calculated using the newly available approximate SLVTPA3B.28 ! downward fluxes in the reflected terms. SLVTPA3B.29 ! SLVTPA3B.30 ! Current Owner of Code: J. M. Edwards SLVTPA3B.31 ! SLVTPA3B.32 ! History: SLVTPA3B.33 ! Version Date Comment SLVTPA3B.34 ! 4.5 11-06-98 Optimised version SLVTPA3B.35 ! (P. Burton) SLVTPA3B.36 ! SLVTPA3B.37 ! Description of Code: SLVTPA3B.38 ! FORTRAN 77 with extensions listed in documentation. SLVTPA3B.39 ! SLVTPA3B.40 !- --------------------------------------------------------------------- SLVTPA3B.41SUBROUTINE SOLVER_TRIPLE_APP_SCAT(N_PROFILE, N_LAYER, N_CLOUD_TOP 1SLVTPA3B.42 & , T, R, S_DOWN, S_UP SLVTPA3B.43 & , T_STRAT, R_STRAT, S_DOWN_STRAT, S_UP_STRAT SLVTPA3B.44 & , T_CONV, R_CONV, S_DOWN_CONV, S_UP_CONV SLVTPA3B.45 & , V11, V12, V13, V21, V22, V23, V31, V32, V33 SLVTPA3B.46 & , U11, U12, U13, U21, U22, U23, U31, U32, U33 SLVTPA3B.47 & , L_NET SLVTPA3B.48 & , FLUX_INC_DOWN SLVTPA3B.49 & , SOURCE_GROUND_FREE, SOURCE_GROUND_STRAT SLVTPA3B.50 & , SOURCE_GROUND_CONV, ALBEDO_SURFACE_DIFF SLVTPA3B.51 & , FLUX_TOTAL SLVTPA3B.52 & , NPD_PROFILE, NPD_LAYER SLVTPA3B.53 & ) SLVTPA3B.54 ! SLVTPA3B.55 ! SLVTPA3B.56 IMPLICIT NONE SLVTPA3B.57 ! SLVTPA3B.58 ! SLVTPA3B.59 ! SIZES OF DUMMY ARRAYS. SLVTPA3B.60 INTEGER !, INTENT(IN) SLVTPA3B.61 & NPD_PROFILE SLVTPA3B.62 ! MAXIMUM NUMBER OF PROFILES SLVTPA3B.63 & , NPD_LAYER SLVTPA3B.64 ! MAXIMUM NUMBER OF LAYERS SLVTPA3B.65 ! SLVTPA3B.66 ! SLVTPA3B.67 ! DUMMY ARGUMENTS. SLVTPA3B.68 INTEGER !, INTENT(IN) SLVTPA3B.69 & N_PROFILE SLVTPA3B.70 ! NUMBER OF PROFILES SLVTPA3B.71 & , N_LAYER SLVTPA3B.72 ! NUMBER OF LAYERS SLVTPA3B.73 & , N_CLOUD_TOP SLVTPA3B.74 ! TOPMOST CLOUDY LAYER SLVTPA3B.75 LOGICAL !, INTENT(IN) SLVTPA3B.76 & L_NET SLVTPA3B.77 ! FLAG FOR CALCULATION OF NET FLUXES SLVTPA3B.78 REAL !, INTENT(IN) SLVTPA3B.79 & T(NPD_PROFILE, NPD_LAYER) SLVTPA3B.80 ! CLEAR-SKY TRANSMISSION SLVTPA3B.81 & , R(NPD_PROFILE, NPD_LAYER) SLVTPA3B.82 ! CLEAR-SKY REFLECTION SLVTPA3B.83 & , S_DOWN(NPD_PROFILE, NPD_LAYER) SLVTPA3B.84 ! CLEAR-SKY DOWNWARD SOURCE FUNCTION SLVTPA3B.85 & , S_UP(NPD_PROFILE, NPD_LAYER) SLVTPA3B.86 ! CLEAR-SKY UPWARD SOURCE FUNCTION SLVTPA3B.87 & , T_STRAT(NPD_PROFILE, NPD_LAYER) SLVTPA3B.88 ! STRATFIFORM TRANSMISSION SLVTPA3B.89 & , R_STRAT(NPD_PROFILE, NPD_LAYER) SLVTPA3B.90 ! STRATFIFORM REFLECTION SLVTPA3B.91 & , S_DOWN_STRAT(NPD_PROFILE, NPD_LAYER) SLVTPA3B.92 ! DOWNWARD STRATFIFORM SOURCE FUNCTION SLVTPA3B.93 & , S_UP_STRAT(NPD_PROFILE, NPD_LAYER) SLVTPA3B.94 ! UPWARD STRATFIFORM SOURCE FUNCTION SLVTPA3B.95 & , T_CONV(NPD_PROFILE, NPD_LAYER) SLVTPA3B.96 ! CONVECTIVE TRANSMISSION SLVTPA3B.97 & , R_CONV(NPD_PROFILE, NPD_LAYER) SLVTPA3B.98 ! CONVECTIVE REFLECTION SLVTPA3B.99 & , S_DOWN_CONV(NPD_PROFILE, NPD_LAYER) SLVTPA3B.100 ! DOWNWARD CONVECTIVE SOURCE FUNCTION SLVTPA3B.101 & , S_UP_CONV(NPD_PROFILE, NPD_LAYER) SLVTPA3B.102 ! UPWARD CONVECTIVE SOURCE FUNCTION SLVTPA3B.103 REAL !, INTENT(IN) SLVTPA3B.104 & V11(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.105 ! ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION SLVTPA3B.106 & , V12(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.107 ! ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION SLVTPA3B.108 & , V13(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.109 ! ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION SLVTPA3B.110 & , V21(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.111 ! ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION SLVTPA3B.112 & , V22(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.113 ! ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION SLVTPA3B.114 & , V23(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.115 ! ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION SLVTPA3B.116 & , V31(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.117 ! ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION SLVTPA3B.118 & , V32(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.119 ! ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION SLVTPA3B.120 & , V33(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.121 ! ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION SLVTPA3B.122 REAL SLVTPA3B.123 & U11(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.124 ! ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION SLVTPA3B.125 & , U12(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.126 ! ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION SLVTPA3B.127 & , U13(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.128 ! ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION SLVTPA3B.129 & , U21(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.130 ! ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION SLVTPA3B.131 & , U22(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.132 ! ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION SLVTPA3B.133 & , U23(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.134 ! ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION SLVTPA3B.135 & , U31(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.136 ! ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION SLVTPA3B.137 & , U32(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.138 ! ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION SLVTPA3B.139 & , U33(NPD_PROFILE, 0: NPD_LAYER) SLVTPA3B.140 ! ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION SLVTPA3B.141 REAL !, INTENT(IN) SLVTPA3B.142 & FLUX_INC_DOWN(NPD_PROFILE) SLVTPA3B.143 ! INCIDENT FLUX SLVTPA3B.144 & , SOURCE_GROUND_FREE(NPD_PROFILE) SLVTPA3B.145 ! SOURCE FROM GROUND (CLEAR SKY) SLVTPA3B.146 & , SOURCE_GROUND_STRAT(NPD_PROFILE) SLVTPA3B.147 ! SOURCE FROM GROUND (CLOUDY REGION) SLVTPA3B.148 & , SOURCE_GROUND_CONV(NPD_PROFILE) SLVTPA3B.149 ! SOURCE FROM GROUND (CLOUDY REGION) SLVTPA3B.150 & , ALBEDO_SURFACE_DIFF(NPD_PROFILE) SLVTPA3B.151 ! DIFFUSE ALBEDO SLVTPA3B.152 REAL !, INTENT(OUT) SLVTPA3B.153 & FLUX_TOTAL(NPD_PROFILE, 2*NPD_LAYER+2) SLVTPA3B.154 ! TOTAL FLUX SLVTPA3B.155 ! SLVTPA3B.156 ! LOCAL VARIABLES. SLVTPA3B.157 INTEGER SLVTPA3B.158 & I SLVTPA3B.159 ! LOOP VARIABLE SLVTPA3B.160 & , L SLVTPA3B.161 ! LOOP VARIABLE SLVTPA3B.162 ! SLVTPA3B.163 ! SLVTPA3B.164 ! TEMPORARY FLUXES SLVTPA3B.165 REAL SLVTPA3B.166 & FLUX_UP(3,NPD_PROFILE,0:NPD_LAYER) SLVTPA3B.167 & , FLUX_DOWN(3,NPD_PROFILE,0:NPD_LAYER) SLVTPA3B.168 & , FLUX_PROPAG_1(NPD_PROFILE) SLVTPA3B.169 ! TEMPORARY FLUXES FOR PROPAGATION ACROSS LAYERS SLVTPA3B.170 & , FLUX_PROPAG_2(NPD_PROFILE) SLVTPA3B.171 ! TEMPORARY FLUXES FOR PROPAGATION ACROSS LAYERS SLVTPA3B.172 & , FLUX_PROPAG_3(NPD_PROFILE) SLVTPA3B.173 ! TEMPORARY FLUXES FOR PROPAGATION ACROSS LAYERS SLVTPA3B.174 ! SLVTPA3B.175 ! SLVTPA3B.176 ! SLVTPA3B.177 ! SLVTPA3B.178 ! THE ARRAYS FLUX_DOWN AND FLUX_UP WILL EVENTUALLY CONTAIN THE TOTAL SLVTPA3B.179 ! FLUXES, BUT INITIALLY THEY ARE USED FOR THE CLEAR FLUXES. SLVTPA3B.180 ! NOTE THAT DOWNWARD FLUXES REFER TO VALUES JUST BELOW THE INTERFACE SLVTPA3B.181 ! AND UPWARD FLUXES TO VALUES JUST ABOVE IT. SLVTPA3B.182 ! SLVTPA3B.183 ! SLVTPA3B.184 ! DOWNWARD FLUX: SLVTPA3B.185 ! SLVTPA3B.186 ! REGION ABOVE CLOUDS: SLVTPA3B.187 DO L=1, N_PROFILE SLVTPA3B.188 FLUX_TOTAL(L, 2)=FLUX_INC_DOWN(L) SLVTPA3B.189 ENDDO SLVTPA3B.190 DO I=1, N_CLOUD_TOP-1 SLVTPA3B.191 DO L=1, N_PROFILE SLVTPA3B.192 FLUX_TOTAL(L, 2*I+2)=T(L, I)*FLUX_TOTAL(L, 2*I) SLVTPA3B.193 & +S_DOWN(L, I) SLVTPA3B.194 ENDDO SLVTPA3B.195 ENDDO SLVTPA3B.196 ! SLVTPA3B.197 ! PASS INTO THE CLOUDY REGION. HERE, DOWNWARD FLUXES HOLD VALUES SLVTPA3B.198 ! JUST BELOW THE LEVEL AND UPWARD FLUXES THE VALUES JUST ABOVE IT. SLVTPA3B.199 ! THUS THE FLUXES IMPINGING ON THE LAYER ARE HELD. SLVTPA3B.200 I=N_CLOUD_TOP-1 SLVTPA3B.201 DO L=1, N_PROFILE SLVTPA3B.202 FLUX_DOWN(1,L, I)=V11(L, I)*FLUX_TOTAL(L, 2*I+2) SLVTPA3B.203 FLUX_DOWN(2,L, I)=V21(L, I)*FLUX_TOTAL(L, 2*I+2) SLVTPA3B.204 FLUX_DOWN(3,L, I)=V31(L, I)*FLUX_TOTAL(L, 2*I+2) SLVTPA3B.205 ENDDO SLVTPA3B.206 ! SLVTPA3B.207 DO I=N_CLOUD_TOP, N_LAYER-1 SLVTPA3B.208 ! SLVTPA3B.209 ! PROPAGTE THE FLUX ACROSS THE LAYER. SLVTPA3B.210 SLVTPA3B.211 DO L=1, N_PROFILE SLVTPA3B.212 FLUX_PROPAG_1(L)=T(L, I)*FLUX_DOWN(1,L, I-1) SLVTPA3B.213 FLUX_PROPAG_2(L)=T_STRAT(L, I)*FLUX_DOWN(2,L, I-1) SLVTPA3B.214 FLUX_PROPAG_3(L)=T_CONV(L, I)*FLUX_DOWN(3,L, I-1) SLVTPA3B.215 END DO SLVTPA3B.216 SLVTPA3B.217 DO L=1, N_PROFILE SLVTPA3B.218 FLUX_PROPAG_1(L) = FLUX_PROPAG_1(L) SLVTPA3B.219 & +S_DOWN(L, I) SLVTPA3B.220 FLUX_PROPAG_2(L) = FLUX_PROPAG_2(L) SLVTPA3B.221 & +S_DOWN_STRAT(L, I) SLVTPA3B.222 END DO SLVTPA3B.223 DO L=1, N_PROFILE SLVTPA3B.224 FLUX_PROPAG_3(L) = FLUX_PROPAG_3(L) SLVTPA3B.225 & +S_DOWN_CONV(L, I) SLVTPA3B.226 END DO SLVTPA3B.227 ! SLVTPA3B.228 ! TRANSFER ACROSS THE INTERFACE. SLVTPA3B.229 SLVTPA3B.230 DO L=1,N_PROFILE SLVTPA3B.231 FLUX_DOWN(1,L, I)=V11(L, I)*FLUX_PROPAG_1(L) SLVTPA3B.232 FLUX_DOWN(2,L, I)=V21(L, I)*FLUX_PROPAG_1(L) SLVTPA3B.233 FLUX_DOWN(3,L, I)=V31(L, I)*FLUX_PROPAG_1(L) SLVTPA3B.234 END DO SLVTPA3B.235 SLVTPA3B.236 DO L=1,N_PROFILE SLVTPA3B.237 FLUX_DOWN(1,L,I) = FLUX_DOWN(1,L,I) SLVTPA3B.238 & +V12(L, I)*FLUX_PROPAG_2(L) SLVTPA3B.239 FLUX_DOWN(2,L,I) = FLUX_DOWN(2,L,I) SLVTPA3B.240 & +V22(L, I)*FLUX_PROPAG_2(L) SLVTPA3B.241 FLUX_DOWN(3,L,I) = FLUX_DOWN(3,L,I) SLVTPA3B.242 & +V32(L, I)*FLUX_PROPAG_2(L) SLVTPA3B.243 END DO SLVTPA3B.244 SLVTPA3B.245 DO L=1,N_PROFILE SLVTPA3B.246 FLUX_DOWN(1,L,I) = FLUX_DOWN(1,L,I) SLVTPA3B.247 & +V13(L, I)*FLUX_PROPAG_3(L) SLVTPA3B.248 FLUX_DOWN(2,L,I) = FLUX_DOWN(2,L,I) SLVTPA3B.249 & +V23(L, I)*FLUX_PROPAG_3(L) SLVTPA3B.250 FLUX_DOWN(3,L,I) = FLUX_DOWN(3,L,I) SLVTPA3B.251 & +V33(L, I)*FLUX_PROPAG_3(L) SLVTPA3B.252 ! SLVTPA3B.253 ENDDO SLVTPA3B.254 ENDDO SLVTPA3B.255 ! SLVTPA3B.256 ! PROPAGATE ACROSS THE BOTTOM LAYER AND FORM THE REFLECTED BEAM. SLVTPA3B.257 ! WE DO NOT TRANSFER FLUXES ACROSS THE BOTTOM INTERFACE, SO AS SLVTPA3B.258 ! TO MAKE THE REFLECTION CONSISTENT BETWEEN REGIONS. SLVTPA3B.259 DO L=1, N_PROFILE SLVTPA3B.260 ! SLVTPA3B.261 ! PROPAGTE THE FLUX THROUGH THE LAYER. SLVTPA3B.262 FLUX_DOWN(1,L, N_LAYER) SLVTPA3B.263 & =T(L, N_LAYER)*FLUX_DOWN(1,L, N_LAYER-1) SLVTPA3B.264 FLUX_DOWN(2,L, N_LAYER) SLVTPA3B.265 & =T_STRAT(L, N_LAYER)*FLUX_DOWN(2,L, N_LAYER-1) SLVTPA3B.266 FLUX_DOWN(3,L, N_LAYER) SLVTPA3B.267 & =T_CONV(L, N_LAYER)*FLUX_DOWN(3,L, N_LAYER-1) SLVTPA3B.268 END DO SLVTPA3B.269 DO L=1,N_PROFILE SLVTPA3B.270 FLUX_DOWN(1,L, N_LAYER)=FLUX_DOWN(1,L, N_LAYER) SLVTPA3B.271 & +S_DOWN(L, N_LAYER) SLVTPA3B.272 FLUX_DOWN(2,L, N_LAYER)=FLUX_DOWN(2,L, N_LAYER) SLVTPA3B.273 & +S_DOWN_STRAT(L, N_LAYER) SLVTPA3B.274 FLUX_DOWN(3,L, N_LAYER)=FLUX_DOWN(3,L, N_LAYER) SLVTPA3B.275 & +S_DOWN_CONV(L, N_LAYER) SLVTPA3B.276 END DO SLVTPA3B.277 SLVTPA3B.278 DO L=1,N_PROFILE SLVTPA3B.279 ! SLVTPA3B.280 ! REFLECT FROM THE SURFACE. SLVTPA3B.281 FLUX_UP(1,L, N_LAYER) SLVTPA3B.282 & =ALBEDO_SURFACE_DIFF(L)*FLUX_DOWN(1,L, N_LAYER) SLVTPA3B.283 FLUX_UP(2,L, N_LAYER) SLVTPA3B.284 & =ALBEDO_SURFACE_DIFF(L)*FLUX_DOWN(2,L, N_LAYER) SLVTPA3B.285 FLUX_UP(3,L, N_LAYER) SLVTPA3B.286 & =ALBEDO_SURFACE_DIFF(L)*FLUX_DOWN(3,L, N_LAYER) SLVTPA3B.287 END DO SLVTPA3B.288 SLVTPA3B.289 DO L=1,N_PROFILE SLVTPA3B.290 FLUX_UP(1,L, N_LAYER)= FLUX_UP(1,L, N_LAYER) SLVTPA3B.291 & +SOURCE_GROUND_FREE(L) SLVTPA3B.292 FLUX_UP(2,L, N_LAYER)= FLUX_UP(2,L, N_LAYER) SLVTPA3B.293 & +SOURCE_GROUND_STRAT(L) SLVTPA3B.294 FLUX_UP(3,L, N_LAYER)= FLUX_UP(3,L, N_LAYER) SLVTPA3B.295 & +SOURCE_GROUND_CONV(L) SLVTPA3B.296 END DO SLVTPA3B.297 SLVTPA3B.298 DO L=1,N_PROFILE SLVTPA3B.299 ! PROPAGATE ACROSS THE BOTTOM LAYER. SLVTPA3B.300 FLUX_PROPAG_1(L) SLVTPA3B.301 & =T(L, N_LAYER)*FLUX_UP(1,L, N_LAYER) SLVTPA3B.302 FLUX_PROPAG_2(L) SLVTPA3B.303 & =T_STRAT(L, N_LAYER)*FLUX_UP(2,L, N_LAYER) SLVTPA3B.304 FLUX_PROPAG_3(L) SLVTPA3B.305 & =T_CONV(L, N_LAYER)*FLUX_UP(3,L, N_LAYER) SLVTPA3B.306 END DO SLVTPA3B.307 SLVTPA3B.308 DO L=1,N_PROFILE SLVTPA3B.309 SLVTPA3B.310 FLUX_PROPAG_1(L)=FLUX_PROPAG_1(L) SLVTPA3B.311 & +S_UP(L, N_LAYER) SLVTPA3B.312 FLUX_PROPAG_2(L)=FLUX_PROPAG_2(L) SLVTPA3B.313 & +S_UP_STRAT(L, N_LAYER) SLVTPA3B.314 END DO SLVTPA3B.315 SLVTPA3B.316 DO L=1,N_PROFILE SLVTPA3B.317 FLUX_PROPAG_1(L)=FLUX_PROPAG_1(L) SLVTPA3B.318 & +R(L, N_LAYER)*FLUX_DOWN(1,L, N_LAYER-1) SLVTPA3B.319 FLUX_PROPAG_2(L)=FLUX_PROPAG_2(L) SLVTPA3B.320 & +R_STRAT(L, N_LAYER)*FLUX_DOWN(2,L, N_LAYER-1) SLVTPA3B.321 FLUX_PROPAG_3(L)=FLUX_PROPAG_3(L) SLVTPA3B.322 & +R_CONV(L, N_LAYER)*FLUX_DOWN(3,L, N_LAYER-1) SLVTPA3B.323 END DO SLVTPA3B.324 SLVTPA3B.325 DO L=1,N_PROFILE SLVTPA3B.326 FLUX_PROPAG_3(L)=FLUX_PROPAG_3(L) SLVTPA3B.327 & +S_UP_CONV(L, N_LAYER) SLVTPA3B.328 ENDDO SLVTPA3B.329 ! SLVTPA3B.330 ! SLVTPA3B.331 ! SLVTPA3B.332 ! WORK BACK UP THROUGH THE COLUMN ASSIGNING THE UPWARD FLUXES. SLVTPA3B.333 DO I=N_LAYER-1, N_CLOUD_TOP, -1 SLVTPA3B.334 SLVTPA3B.335 ! SLVTPA3B.336 DO L=1, N_PROFILE SLVTPA3B.337 FLUX_UP(1,L, I)=U11(L, I)*FLUX_PROPAG_1(L) SLVTPA3B.338 FLUX_UP(2,L, I)=U21(L, I)*FLUX_PROPAG_1(L) SLVTPA3B.339 FLUX_UP(3,L, I)=U31(L, I)*FLUX_PROPAG_1(L) SLVTPA3B.340 END DO SLVTPA3B.341 SLVTPA3B.342 DO L=1, N_PROFILE SLVTPA3B.343 FLUX_UP(1,L,I)= FLUX_UP(1,L,I) SLVTPA3B.344 & +U12(L, I)*FLUX_PROPAG_2(L) SLVTPA3B.345 FLUX_UP(2,L,I)= FLUX_UP(2,L,I) SLVTPA3B.346 & +U22(L, I)*FLUX_PROPAG_2(L) SLVTPA3B.347 FLUX_UP(3,L,I)= FLUX_UP(3,L,I) SLVTPA3B.348 & +U32(L, I)*FLUX_PROPAG_2(L) SLVTPA3B.349 END DO SLVTPA3B.350 DO L=1, N_PROFILE SLVTPA3B.351 FLUX_UP(1,L,I)= FLUX_UP(1,L,I) SLVTPA3B.352 & +U13(L, I)*FLUX_PROPAG_3(L) SLVTPA3B.353 FLUX_UP(2,L,I)= FLUX_UP(2,L,I) SLVTPA3B.354 & +U23(L, I)*FLUX_PROPAG_3(L) SLVTPA3B.355 FLUX_UP(3,L,I)= FLUX_UP(3,L,I) SLVTPA3B.356 & +U33(L, I)*FLUX_PROPAG_3(L) SLVTPA3B.357 ! SLVTPA3B.358 END DO SLVTPA3B.359 DO L=1,N_PROFILE SLVTPA3B.360 FLUX_PROPAG_1(L)=T(L, I)*FLUX_UP(1,L, I) SLVTPA3B.361 FLUX_PROPAG_2(L)=T_STRAT(L, I)*FLUX_UP(2,L, I) SLVTPA3B.362 FLUX_PROPAG_3(L)=T_CONV(L, I)*FLUX_UP(3,L, I) SLVTPA3B.363 END DO SLVTPA3B.364 SLVTPA3B.365 DO L=1,N_PROFILE SLVTPA3B.366 FLUX_PROPAG_1(L) = FLUX_PROPAG_1(L) SLVTPA3B.367 & +S_UP(L, I) SLVTPA3B.368 FLUX_PROPAG_2(L) = FLUX_PROPAG_2(L) SLVTPA3B.369 & +S_UP_STRAT(L, I) SLVTPA3B.370 END DO SLVTPA3B.371 SLVTPA3B.372 DO L=1,N_PROFILE SLVTPA3B.373 FLUX_PROPAG_3(L) = FLUX_PROPAG_3(L) SLVTPA3B.374 & +S_UP_CONV(L, I) SLVTPA3B.375 END DO SLVTPA3B.376 DO L=1,N_PROFILE SLVTPA3B.377 FLUX_PROPAG_1(L) = FLUX_PROPAG_1(L) SLVTPA3B.378 & +R(L, I)*FLUX_DOWN(1,L, I-1) SLVTPA3B.379 FLUX_PROPAG_2(L) = FLUX_PROPAG_2(L) SLVTPA3B.380 & +R_STRAT(L, I)*FLUX_DOWN(2,L, I-1) SLVTPA3B.381 FLUX_PROPAG_3(L) = FLUX_PROPAG_3(L) SLVTPA3B.382 & +R_CONV(L, I)*FLUX_DOWN(3,L, I-1) SLVTPA3B.383 ! SLVTPA3B.384 ENDDO SLVTPA3B.385 ENDDO SLVTPA3B.386 ! SLVTPA3B.387 ! PROPAGATE INTO THE CLOUD-FREE REGION. SLVTPA3B.388 I=N_CLOUD_TOP-1 SLVTPA3B.389 DO L=1, N_PROFILE SLVTPA3B.390 FLUX_TOTAL(L, 2*I+1)=FLUX_PROPAG_1(L)+FLUX_PROPAG_2(L) SLVTPA3B.391 & +FLUX_PROPAG_3(L) SLVTPA3B.392 ENDDO SLVTPA3B.393 ! SLVTPA3B.394 ! CONTINUE THROUGH THE LAYERS ABOVE CLOUDS. SLVTPA3B.395 DO I=N_CLOUD_TOP-1, 1, -1 SLVTPA3B.396 DO L=1, N_PROFILE SLVTPA3B.397 FLUX_TOTAL(L, 2*I-1)=T(L, I)*FLUX_TOTAL(L, 2*I+1) SLVTPA3B.398 & +R(L, I)*FLUX_TOTAL(L, 2*I)+S_UP(L, I) SLVTPA3B.399 ENDDO SLVTPA3B.400 ENDDO SLVTPA3B.401 ! SLVTPA3B.402 ! ASSIGN THE TOTAL FLUXES ON THE INTERMEDIATE CLOUDY LAYERS. SLVTPA3B.403 DO I=N_CLOUD_TOP, N_LAYER SLVTPA3B.404 DO L=1, N_PROFILE SLVTPA3B.405 FLUX_TOTAL(L, 2*I+1)=FLUX_UP(1,L, I)+FLUX_UP(2,L, I) SLVTPA3B.406 & +FLUX_UP(3,L, I) SLVTPA3B.407 FLUX_TOTAL(L, 2*I+2)=FLUX_DOWN(1,L, I)+FLUX_DOWN(2,L, I) SLVTPA3B.408 & +FLUX_DOWN(3,L, I) SLVTPA3B.409 ENDDO SLVTPA3B.410 ENDDO SLVTPA3B.411 ! SLVTPA3B.412 ! REDUCE TO NET FLUXES IF REQUIRED. SLVTPA3B.413 IF (L_NET) THEN SLVTPA3B.414 DO I=0, N_LAYER SLVTPA3B.415 DO L=1, N_PROFILE SLVTPA3B.416 FLUX_TOTAL(L, I+1)=FLUX_TOTAL(L, 2*I+2) SLVTPA3B.417 & -FLUX_TOTAL(L, 2*I-1) SLVTPA3B.418 ENDDO SLVTPA3B.419 ENDDO SLVTPA3B.420 ENDIF SLVTPA3B.421 SLVTPA3B.422 RETURN SLVTPA3B.423 END SLVTPA3B.424 *ENDIF DEF,A01_3A,OR,DEF,A02_3A SLVTPA3B.425 *ENDIF DEF,A70_1B SLVTPA3B.426