*IF DEF,A70_1A,OR,DEF,A70_1B APB4F405.63 *IF DEF,A01_3A,OR,DEF,A02_3A OVMXM3A.2 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.13620 C GTS2F400.13621 C Use, duplication or disclosure of this code is subject to the GTS2F400.13622 C restrictions as set forth in the contract. GTS2F400.13623 C GTS2F400.13624 C Meteorological Office GTS2F400.13625 C London Road GTS2F400.13626 C BRACKNELL GTS2F400.13627 C Berkshire UK GTS2F400.13628 C RG12 2SZ GTS2F400.13629 C GTS2F400.13630 C If no contract has been raised with this copy of the code, the use, GTS2F400.13631 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.13632 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.13633 C Modelling at the above address. GTS2F400.13634 C ******************************COPYRIGHT****************************** GTS2F400.13635 C GTS2F400.13636 !+ Subroutine to find maximally overlapped energy transfer coefficients. OVMXM3A.3 ! OVMXM3A.4 ! Method: OVMXM3A.5 ! Straightforward. OVMXM3A.6 ! OVMXM3A.7 ! Current Owner of Code: J. M. Edwards OVMXM3A.8 ! OVMXM3A.9 ! History: OVMXM3A.10 ! Version Date Comment OVMXM3A.11 ! 4.0 27-07-95 Original Code OVMXM3A.12 ! (J. M. Edwards) OVMXM3A.13 ! 4.2 Nov. 96 T3E migration: CALL WHENFGT replaced GSS2F402.121 ! by portable fortran code. GSS2F402.122 ! S.J.Swarbrick GSS2F402.123 ! 4.5 18-05-98 Reference to obsolete ADB1F405.446 ! solvers removed. ADB1F405.447 ! (J. M. Edwards) ADB1F405.448 !LL 4.5 27/04/98 Add Fujitsu vectorization directive. GRB0F405.148 !LL RBarnes@ecmwf.int GRB0F405.149 ! OVMXM3A.14 ! Description of Code: OVMXM3A.15 ! FORTRAN 77 with extensions listed in documentation. OVMXM3A.16 ! OVMXM3A.17 !- --------------------------------------------------------------------- OVMXM3A.18 ! Fujitsu directive to encourage vectorization for whole routine GRB0F405.150 !OCL NOVREC GRB0F405.151SUBROUTINE OVERLAP_MIX_MAXIMUM(N_PROFILE, N_LAYER, N_CLOUD_TOP 1OVMXM3A.19 & , ISOLIR, I_SOLVER OVMXM3A.20 & , W_CLOUD, W_FREE OVMXM3A.21 & , CLOUD_OVERLAP OVMXM3A.22 & , NPD_PROFILE, NPD_LAYER OVMXM3A.23 & ) OVMXM3A.24 ! OVMXM3A.25 ! OVMXM3A.26 ! OVMXM3A.27 IMPLICIT NONE OVMXM3A.28 ! OVMXM3A.29 ! OVMXM3A.30 ! SIZES OF DUMMY ARRAYS. OVMXM3A.31 INTEGER !, INTENT(IN) OVMXM3A.32 & NPD_PROFILE OVMXM3A.33 ! MAXIMUM NUMBER OF PROFILES OVMXM3A.34 & , NPD_LAYER OVMXM3A.35 ! MAXIMUM NUMBER OF LAYERS OVMXM3A.36 ! OVMXM3A.37 ! INCLUDE COMDECKS. OVMXM3A.38 *CALL DIMFIX3A
OVMXM3A.39 *CALL PRMCH3A
OVMXM3A.40 *CALL PRECSN3A
OVMXM3A.41 *CALL SPCRG3A
OVMXM3A.42 *CALL SOLVER3A
OVMXM3A.43 *CALL CLCFPT3A
OVMXM3A.44 ! OVMXM3A.45 ! DUMMY ARGUMENTS. OVMXM3A.46 INTEGER !, INTENT(IN) OVMXM3A.47 & N_PROFILE OVMXM3A.48 ! NUMBER OF PROFILES OVMXM3A.49 & , N_LAYER OVMXM3A.50 ! NUMBER OF LAYERS OVMXM3A.51 & , N_CLOUD_TOP OVMXM3A.52 ! TOPMOST CLOUDY LAYER OVMXM3A.53 & , ISOLIR OVMXM3A.54 ! SPECTRAL REGION OVMXM3A.55 & , I_SOLVER OVMXM3A.56 ! SOLVER TO BE USED OVMXM3A.57 REAL !, INTENT(IN) OVMXM3A.58 & W_CLOUD(NPD_PROFILE, NPD_LAYER) OVMXM3A.59 ! CLOUD AMOUNTS OVMXM3A.60 ! OVMXM3A.61 REAL !, INTENT(OUT) OVMXM3A.62 & W_FREE(NPD_PROFILE, NPD_LAYER) OVMXM3A.63 ! CLOUD-FREE AMOUNTS OVMXM3A.64 & , CLOUD_OVERLAP(NPD_PROFILE, 0: NPD_LAYER, NPD_OVERLAP_COEFF) OVMXM3A.65 ! COEFFICIENTS FOR TRANSFER OF ENERGY AT INTERFACE OVMXM3A.66 ! OVMXM3A.67 ! OVMXM3A.68 ! LOCAL ARGUMENTS. OVMXM3A.69 INTEGER OVMXM3A.70 & I OVMXM3A.71 ! LOOP VARIABLE OVMXM3A.72 & , L OVMXM3A.73 ! LOOP VARIABLE OVMXM3A.74 & , K OVMXM3A.75 ! LOOP VARIABLE OVMXM3A.76 & , KK OVMXM3A.77 ! LOOP VARIABLE OVMXM3A.78 & , N_INDEX OVMXM3A.79 ! NUMBER OF INDICES IN WHEN TEST OVMXM3A.80 & , INDEX(NPD_PROFILE) OVMXM3A.81 ! INDICES OF WHEN TEST OVMXM3A.82 REAL OVMXM3A.83 & G_FF(NPD_PROFILE, 0: NPD_LAYER) OVMXM3A.84 ! BASIC TRANSFER COEFFICIENT OVMXM3A.85 & , G_FC(NPD_PROFILE, 0: NPD_LAYER) OVMXM3A.86 ! BASIC TRANSFER COEFFICIENT OVMXM3A.87 & , G_CF(NPD_PROFILE, 0: NPD_LAYER) OVMXM3A.88 ! BASIC TRANSFER COEFFICIENT OVMXM3A.89 & , G_CC(NPD_PROFILE, 0: NPD_LAYER) OVMXM3A.90 ! BASIC TRANSFER COEFFICIENT OVMXM3A.91 & , B_FF(NPD_PROFILE, 0: NPD_LAYER) OVMXM3A.92 ! BASIC TRANSFER COEFFICIENT OVMXM3A.93 & , B_FC(NPD_PROFILE, 0: NPD_LAYER) OVMXM3A.94 ! BASIC TRANSFER COEFFICIENT OVMXM3A.95 & , B_CF(NPD_PROFILE, 0: NPD_LAYER) OVMXM3A.96 ! BASIC TRANSFER COEFFICIENT OVMXM3A.97 & , B_CC(NPD_PROFILE, 0: NPD_LAYER) OVMXM3A.98 ! BASIC TRANSFER COEFFICIENT OVMXM3A.99 ! OVMXM3A.100 ! SUBROUTINES CALLED: OVMXM3A.101 ! OVMXM3A.104 ! CRAY DIRECTIVES FOR THE WHOLE ROUTINE: ADB1F402.578 ! POINTS ARE NOT REPEATED IN THE INDEXING ARRAY, SO IT IS SAFE ADB1F402.579 ! TO VECTORIZE OVER INDIRECTLY ADDRESSED ARRAYS. ADB1F402.580 Cfpp$ NODEPCHK R ADB1F402.581 ! ADB1F402.582 ! OVMXM3A.105 ! OVMXM3A.106 ! SET THE FREE FRACTIONS IN EACH LAYER. OVMXM3A.107 DO I=1, N_CLOUD_TOP-1 OVMXM3A.108 DO L=1, N_PROFILE OVMXM3A.109 W_FREE(L, I)=1.0E+00 OVMXM3A.110 ENDDO OVMXM3A.111 ENDDO OVMXM3A.112 DO I=N_CLOUD_TOP, N_LAYER OVMXM3A.113 DO L=1, N_PROFILE OVMXM3A.114 W_FREE(L, I)=1.0E+00-W_CLOUD(L, I) OVMXM3A.115 ENDDO OVMXM3A.116 ENDDO OVMXM3A.117 ! OVMXM3A.118 ! EVALUATE THE EXTENT OF OVERLAP BETWEEN LAYERS OF CLOUD OVMXM3A.119 ! AT THE INTERFACE BETWEEN THE ITH AND (I+1)ST LAYER ON THE OVMXM3A.120 ! ASSUMPTION OF MAXIMUM OVERLAP BETWEEN ADJACENT LAYERS. OVMXM3A.121 ! THE TOP AND BOTTOM BOUNDARIES ARE EXCEPTIONAL. OVMXM3A.122 ! OVMXM3A.123 ! HERE IS IS EASIEST TO FIND THE BASIC TRANSFER COEFFICIENTS OVMXM3A.124 ! AND DEDUCE ALL OTHERS FROM THEM. OVMXM3A.125 ! OVMXM3A.126 ! COEFFICIENTS ARE NOT REQUIRED IF THERE ARE NO CLOUDY LAYERS, ADB1F401.722 ! IN WHICH CASE N_CLOUD_TOP WILL BE SET TO N_LAYER+1. ADB1F401.723 IF (N_CLOUD_TOP.LE.N_LAYER) THEN ADB1F401.724 DO L=1, N_PROFILE ADB1F401.725 ! OVMXM3A.128 ! TOPMOST CLOUDY BOUNDARY: ADB1F401.726 G_FF(L, N_CLOUD_TOP-1)=W_FREE(L, N_CLOUD_TOP) ADB1F401.727 G_FC(L, N_CLOUD_TOP-1)=W_CLOUD(L, N_CLOUD_TOP) ADB1F401.728 G_CF(L, N_CLOUD_TOP-1)=0.0E+00 ADB1F401.729 G_CC(L, N_CLOUD_TOP-1)=1.0E+00 ADB1F401.730 B_FF(L, N_CLOUD_TOP-1)=1.0E+00 ADB1F401.731 B_FC(L, N_CLOUD_TOP-1)=1.0E+00 ADB1F401.732 B_CF(L, N_CLOUD_TOP-1)=0.0E+00 ADB1F401.733 B_CC(L, N_CLOUD_TOP-1)=0.0E+00 ADB1F401.734 ! OVMXM3A.138 ! BOTTOM BOUNDARY: ADB1F401.735 G_FF(L, N_LAYER)=1.0E+00 ADB1F401.736 G_FC(L, N_LAYER)=0.0E+00 ADB1F401.737 G_CF(L, N_LAYER)=1.0E+00 ADB1F401.738 G_CC(L, N_LAYER)=0.0E+00 ADB1F401.739 B_FF(L, N_LAYER)=W_FREE(L, N_LAYER) ADB1F401.740 B_FC(L, N_LAYER)=0.0E+00 ADB1F401.741 B_CF(L, N_LAYER)=W_CLOUD(L, N_LAYER) ADB1F401.742 B_CC(L, N_LAYER)=1.0E+00 ADB1F401.743 ! OVMXM3A.148 ENDDO ADB1F401.744 ENDIF ADB1F401.745 ! OVMXM3A.150 DO I=N_CLOUD_TOP, N_LAYER-1 OVMXM3A.151 ! OVMXM3A.152 ! SET DEFAULT VALUES FOR COMPLETELY CLEAR OR CLOUDY LAYERS OVMXM3A.153 ! AND OVERWRITE IN NORMAL CASES. OVMXM3A.154 ! OVMXM3A.155 ! GAMMAS: OVMXM3A.156 ! OVMXM3A.157 DO L=1, N_PROFILE OVMXM3A.158 G_CC(L, I)=1.0E+00 OVMXM3A.159 G_FF(L, I)=1.0E+00 OVMXM3A.160 ENDDO OVMXM3A.161 ! GSS2F402.126 N_INDEX=0 GSS2F402.127 DO L =1,N_PROFILE GSS2F402.128 IF (W_CLOUD(L,I).GT.TOL_DIV) THEN GSS2F402.129 N_INDEX =N_INDEX+1 GSS2F402.130 INDEX(N_INDEX)=L GSS2F402.131 END IF GSS2F402.132 END DO GSS2F402.133 ! GSS2F402.134 DO K=1, N_INDEX OVMXM3A.164 KK=INDEX(K) OVMXM3A.165 G_CC(KK, I)=MIN(1.0E+00, W_CLOUD(KK, I+1)/W_CLOUD(KK, I)) OVMXM3A.166 ENDDO OVMXM3A.167 ! GSS2F402.137 N_INDEX=0 GSS2F402.138 DO L =1,N_PROFILE GSS2F402.139 IF (W_FREE(L,I).GT.TOL_DIV) THEN GSS2F402.140 N_INDEX =N_INDEX+1 GSS2F402.141 INDEX(N_INDEX)=L GSS2F402.142 END IF GSS2F402.143 END DO GSS2F402.144 ! GSS2F402.145 DO K=1, N_INDEX OVMXM3A.170 KK=INDEX(K) OVMXM3A.171 G_FF(KK, I)=MIN(1.0E+00, W_FREE(KK, I+1)/W_FREE(KK, I)) OVMXM3A.172 ENDDO OVMXM3A.173 ! INFER THE OTHER VALUES FROM GENERIC RELATIONS. OVMXM3A.174 DO L=1, N_PROFILE OVMXM3A.175 G_FC(L, I)=1.0E+00-G_FF(L, I) OVMXM3A.176 G_CF(L, I)=1.0E+00-G_CC(L, I) OVMXM3A.177 ENDDO OVMXM3A.178 ! OVMXM3A.179 ! OVMXM3A.180 ! BETAS: OVMXM3A.181 ! OVMXM3A.182 DO L=1, N_PROFILE OVMXM3A.183 B_CC(L, I)=1.0E+00 OVMXM3A.184 B_FF(L, I)=1.0E+00 OVMXM3A.185 ENDDO OVMXM3A.186 ! GSS2F402.148 N_INDEX=0 GSS2F402.149 DO L =1,N_PROFILE GSS2F402.150 IF (W_CLOUD(L,I+1).GT.TOL_DIV) THEN GSS2F402.151 N_INDEX =N_INDEX+1 GSS2F402.152 INDEX(N_INDEX)=L GSS2F402.153 END IF GSS2F402.154 END DO GSS2F402.155 ! GSS2F402.156 DO K=1, N_INDEX OVMXM3A.189 KK=INDEX(K) OVMXM3A.190 B_CC(KK, I)=MIN(1.0E+00, W_CLOUD(KK, I)/W_CLOUD(KK, I+1)) OVMXM3A.191 ENDDO OVMXM3A.192 ! GSS2F402.159 N_INDEX=0 GSS2F402.160 DO L =1,N_PROFILE GSS2F402.161 IF (W_FREE(L,I+1).GT.TOL_DIV) THEN GSS2F402.162 N_INDEX =N_INDEX+1 GSS2F402.163 INDEX(N_INDEX)=L GSS2F402.164 END IF GSS2F402.165 END DO GSS2F402.166 ! GSS2F402.167 DO K=1, N_INDEX OVMXM3A.195 KK=INDEX(K) OVMXM3A.196 B_FF(KK, I)=MIN(1.0E+00, W_FREE(KK, I)/W_FREE(KK, I+1)) OVMXM3A.197 ENDDO OVMXM3A.198 ! INFER THE OTHER VALUSE FROM GENERIC RELATIONS. OVMXM3A.199 DO L=1, N_PROFILE OVMXM3A.200 B_FC(L, I)=1.0E+00-B_CC(L, I) OVMXM3A.201 B_CF(L, I)=1.0E+00-B_FF(L, I) OVMXM3A.202 ENDDO OVMXM3A.203 ! OVMXM3A.204 ENDDO OVMXM3A.205 ! OVMXM3A.206 ! NOW CALCULATE THE OVERLAPPED ARRAYS USING THE BASIC COEFFICIENTS. OVMXM3A.207 ! OVMXM3A.208 ! IN THE SOLAR REGION COEFFICIENTS FOR DOWNWARD COUPLING OF THE OVMXM3A.209 ! FLUXES ARE REQUIRED. THESE COEFFICIENTS ARE ALSO NEEDED FOR OVMXM3A.210 ! INFRA-RED CALCULATIONS WITH APPROXIMATE SCATTERING, OR ADB1F401.746 ! WHENEVER THE DIRECT SOLVER IS USED. ADB1F401.747 ! OVMXM3A.212 IF ( (I_SOLVER.EQ.IP_SOLVER_MIX_DIRECT).OR. ADB1F405.449 & (ISOLIR.EQ.IP_SOLAR).OR. ADB1F401.750 & ( (ISOLIR.EQ.IP_INFRA_RED).AND. OVMXM3A.214 & (I_SOLVER.EQ.IP_SOLVER_MIX_APP_SCAT) ) ) THEN ADB1F405.450 ! OVMXM3A.217 DO I=N_CLOUD_TOP-1, N_LAYER OVMXM3A.218 DO L=1, N_PROFILE OVMXM3A.219 CLOUD_OVERLAP(L, I, IP_CLOVLP_GFF)=G_FF(L, I) OVMXM3A.220 CLOUD_OVERLAP(L, I, IP_CLOVLP_GFC)=G_FC(L, I) OVMXM3A.221 CLOUD_OVERLAP(L, I, IP_CLOVLP_GCF)=G_CF(L, I) OVMXM3A.222 CLOUD_OVERLAP(L, I, IP_CLOVLP_GCC)=G_CC(L, I) OVMXM3A.223 ENDDO OVMXM3A.224 ENDDO OVMXM3A.225 ! OVMXM3A.226 ENDIF OVMXM3A.227 ! OVMXM3A.228 ! WITH APPROXIMATE SCATTERING IN THE LONGWAVE, OR WHENEVER ADB1F401.751 ! A DIRECT SOLVER IS USED, THE CORRESPONDING ADB1F401.752 ! UPWARD COEFFICIENTS ARE NEEDED. OVMXM3A.230 ! OVMXM3A.231 IF ( (I_SOLVER.EQ.IP_SOLVER_MIX_DIRECT).OR. ADB1F405.451 & ( (ISOLIR.EQ.IP_INFRA_RED).AND. ADB1F405.452 & (I_SOLVER.EQ.IP_SOLVER_MIX_APP_SCAT) ) ) THEN ADB1F405.453 ! OVMXM3A.235 DO I=N_CLOUD_TOP-1, N_LAYER OVMXM3A.236 DO L=1, N_PROFILE OVMXM3A.237 CLOUD_OVERLAP(L, I, IP_CLOVLP_BFF)=B_FF(L, I) OVMXM3A.238 CLOUD_OVERLAP(L, I, IP_CLOVLP_BFC)=B_FC(L, I) OVMXM3A.239 CLOUD_OVERLAP(L, I, IP_CLOVLP_BCF)=B_CF(L, I) OVMXM3A.240 CLOUD_OVERLAP(L, I, IP_CLOVLP_BCC)=B_CC(L, I) OVMXM3A.241 ENDDO OVMXM3A.242 ENDDO OVMXM3A.243 ENDIF OVMXM3A.244 ! OVMXM3A.245 ! OVMXM3A.246 IF (I_SOLVER.EQ.IP_SOLVER_MIX_11) THEN ADB1F405.454 ! OVMXM3A.261 DO I=N_CLOUD_TOP-1, N_LAYER OVMXM3A.262 DO L=1, N_PROFILE OVMXM3A.263 CLOUD_OVERLAP(L, I, IP_CLOVLP_GM) OVMXM3A.264 & =G_FF(L, I)+G_CC(L, I)-G_CF(L, I)-G_FC(L, I) OVMXM3A.265 CLOUD_OVERLAP(L, I, IP_CLOVLP_GP) OVMXM3A.266 & =G_FF(L, I)-G_CC(L, I)+G_CF(L, I)-G_FC(L, I) OVMXM3A.267 CLOUD_OVERLAP(L, I, IP_CLOVLP_BM) OVMXM3A.268 & =B_FF(L, I)+B_CC(L, I)-B_CF(L, I)-B_FC(L, I) OVMXM3A.269 CLOUD_OVERLAP(L, I, IP_CLOVLP_BP) OVMXM3A.270 & =B_FF(L, I)-B_CC(L, I)-B_CF(L, I)+B_FC(L, I) OVMXM3A.271 ENDDO OVMXM3A.272 ENDDO OVMXM3A.273 ! OVMXM3A.274 ! OVMXM3A.275 ENDIF OVMXM3A.276 ! OVMXM3A.277 ! OVMXM3A.278 ! OVMXM3A.279 RETURN OVMXM3A.280 END OVMXM3A.281 *ENDIF DEF,A01_3A,OR,DEF,A02_3A OVMXM3A.282 *ENDIF DEF,A70_1A,OR,DEF,A70_1B APB4F405.64