*IF DEF,A70_1A,OR,DEF,A70_1B APB4F405.119 *IF DEF,A01_3A,OR,DEF,A02_3A TCFB3A.2 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.14181 C GTS2F400.14182 C Use, duplication or disclosure of this code is subject to the GTS2F400.14183 C restrictions as set forth in the contract. GTS2F400.14184 C GTS2F400.14185 C Meteorological Office GTS2F400.14186 C London Road GTS2F400.14187 C BRACKNELL GTS2F400.14188 C Berkshire UK GTS2F400.14189 C RG12 2SZ GTS2F400.14190 C GTS2F400.14191 C If no contract has been raised with this copy of the code, the use, GTS2F400.14192 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.14193 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.14194 C Modelling at the above address. GTS2F400.14195 C ******************************COPYRIGHT****************************** GTS2F400.14196 C GTS2F400.14197 !+ Subroutine to calculate basic coefficients in two-stream equations. TCFB3A.3 ! TCFB3A.4 ! Method: TCFB3A.5 ! Depending on the two-stream equations employed, the TCFB3A.6 ! appropriate coefficients for the fluxes are calculated. TCFB3A.7 ! TCFB3A.8 ! Current Owner of Code: J. M. Edwards TCFB3A.9 ! TCFB3A.10 ! History: TCFB3A.11 ! Version Date Comment TCFB3A.12 ! 4.0 27-07-95 Original Code TCFB3A.13 ! (J. M. Edwards) TCFB3A.14 ! 4.2 08-08-96 PIFM85 restored to ADB1F402.752 ! original form. PIFM80 ADB1F402.753 ! introduced. ADB1F402.754 ! (J. M. Edwards) ADB1F402.755 ! TCFB3A.15 ! Description of Code: TCFB3A.16 ! FORTRAN 77 with extensions listed in documentation. TCFB3A.17 ! TCFB3A.18 !- --------------------------------------------------------------------- TCFB3A.19SUBROUTINE TWO_COEFF_BASIC(IERR 2TCFB3A.20 & , N_PROFILE, I_LAYER_FIRST, I_LAYER_LAST TCFB3A.21 & , I_2STREAM TCFB3A.22 & , ASYMMETRY, OMEGA TCFB3A.23 & , SUM, DIFF TCFB3A.24 & , NPD_PROFILE, NPD_LAYER TCFB3A.25 & ) TCFB3A.26 ! TCFB3A.27 ! TCFB3A.28 ! TCFB3A.29 IMPLICIT NONE TCFB3A.30 ! TCFB3A.31 ! TCFB3A.32 ! SIZES OF DUMMY ARRAYS. TCFB3A.33 INTEGER !, INTENT(IN) TCFB3A.34 & NPD_PROFILE TCFB3A.35 ! MAXIMUM NUMBER OF PROFILES TCFB3A.36 & , NPD_LAYER TCFB3A.37 ! MAXIMUM NUMBER OF LAYERS TCFB3A.38 ! TCFB3A.39 ! INCLUDE COMDECKS. TCFB3A.40 *CALL STDIO3A
TCFB3A.41 *CALL TWOSTR3A
TCFB3A.42 *CALL ELSASS3A
TCFB3A.43 *CALL ERROR3A
TCFB3A.44 ! TCFB3A.45 ! TCFB3A.46 ! TCFB3A.47 ! DUMMY ARGUMENTS. TCFB3A.48 INTEGER !, INTENT(OUT) TCFB3A.49 & IERR TCFB3A.50 ! ERROR FLAG TCFB3A.51 INTEGER !, INTENT(IN) TCFB3A.52 & N_PROFILE TCFB3A.53 ! NUMBER OF PROFILES TCFB3A.54 & , I_LAYER_FIRST TCFB3A.55 ! FIRST LAYER TO CONSIDER TCFB3A.56 & , I_LAYER_LAST TCFB3A.57 ! LAST LAYER TO CONSIDER TCFB3A.58 & , I_2STREAM TCFB3A.59 ! TWO STREAM SCHEME TCFB3A.60 ! TCFB3A.61 ! OPTICAL PROPERTIES OF LAYER: TCFB3A.62 REAL !, INTENT(IN) TCFB3A.63 & ASYMMETRY(NPD_PROFILE, NPD_LAYER) TCFB3A.64 ! ASYMMETRY FACTOR TCFB3A.65 & , OMEGA(NPD_PROFILE, NPD_LAYER) TCFB3A.66 ! ALBEDO OF SINGLE SCATTERING TCFB3A.67 ! TCFB3A.68 ! TCFB3A.69 ! COEFFICIENTS IN THE TWO-STREAM EQUATIONS: TCFB3A.70 REAL !, INTENT(OUT) TCFB3A.71 & SUM(NPD_PROFILE, NPD_LAYER) TCFB3A.72 ! SUM OF ALPHA_1 AND ALPHA_2 TCFB3A.73 & , DIFF(NPD_PROFILE, NPD_LAYER) TCFB3A.74 ! DIFFERENCE OF ALPHA_1 AND ALPHA_2 TCFB3A.75 ! TCFB3A.76 ! LOCAL VARIABLES. TCFB3A.77 INTEGER TCFB3A.78 & I TCFB3A.79 ! LOOP VARIABLE TCFB3A.80 & , L TCFB3A.81 ! LOOP VARIABLE TCFB3A.82 ! TCFB3A.83 REAL TCFB3A.84 & ROOT_3 TCFB3A.85 ! SQUARE ROOT OF 3 TCFB3A.86 ! TCFB3A.87 ! TCFB3A.88 PARAMETER( TCFB3A.89 & ROOT_3=1.7320508075688772E+00 TCFB3A.90 & ) TCFB3A.91 ! TCFB3A.92 ! TCFB3A.93 ! TCFB3A.94 ! TCFB3A.95 IF (I_2STREAM.EQ.IP_EDDINGTON) THEN TCFB3A.96 DO I=I_LAYER_FIRST, I_LAYER_LAST TCFB3A.97 DO L=1, N_PROFILE TCFB3A.98 SUM(L, I)=1.5E+00*(1.0E+00 TCFB3A.99 & -OMEGA(L, I)*ASYMMETRY(L, I)) TCFB3A.100 DIFF(L, I)=2.0E+00*(1.0E+00-OMEGA(L, I)) TCFB3A.101 ENDDO TCFB3A.102 ENDDO TCFB3A.103 ! TCFB3A.104 ELSE IF (I_2STREAM.EQ.IP_ELSASSER) THEN TCFB3A.105 DO I=I_LAYER_FIRST, I_LAYER_LAST TCFB3A.106 DO L=1, N_PROFILE TCFB3A.107 SUM(L, I)=ELSASSER_FACTOR TCFB3A.108 & -1.5E+00*OMEGA(L, I)*ASYMMETRY(L, I) TCFB3A.109 DIFF(L, I)=ELSASSER_FACTOR*(1.0E+00-OMEGA(L, I)) TCFB3A.110 ENDDO TCFB3A.111 ENDDO TCFB3A.112 ! TCFB3A.113 ELSE IF (I_2STREAM.EQ.IP_DISCRETE_ORD) THEN TCFB3A.114 DO I=I_LAYER_FIRST, I_LAYER_LAST TCFB3A.115 DO L=1, N_PROFILE TCFB3A.116 SUM(L, I)=ROOT_3*(1.0E+00 TCFB3A.117 & -OMEGA(L, I)*ASYMMETRY(L, I)) TCFB3A.118 DIFF(L, I)=ROOT_3*(1.0E+00-OMEGA(L, I)) TCFB3A.119 ENDDO TCFB3A.120 ENDDO TCFB3A.121 ! TCFB3A.122 ELSE IF (I_2STREAM.EQ.IP_PIFM85) THEN ADB1F401.1126 DO I=I_LAYER_FIRST, I_LAYER_LAST TCFB3A.124 DO L=1, N_PROFILE TCFB3A.125 SUM(L, I)=2.0E+00 TCFB3A.126 & -1.5E+00*OMEGA(L, I)*ASYMMETRY(L, I) TCFB3A.127 DIFF(L, I)=2.0E+00*(1.0E+00-OMEGA(L, I)) TCFB3A.128 ENDDO TCFB3A.129 ENDDO TCFB3A.130 ! TCFB3A.131 ELSE IF (I_2STREAM.EQ.IP_2S_TEST) THEN TCFB3A.132 DO I=I_LAYER_FIRST, I_LAYER_LAST TCFB3A.133 DO L=1, N_PROFILE TCFB3A.134 SUM(L, I)=1.5E+00 TCFB3A.135 & -1.5E+00*OMEGA(L, I)*ASYMMETRY(L, I) TCFB3A.136 DIFF(L, I)=1.5E+00*(1.0E+00-OMEGA(L, I)) TCFB3A.137 ENDDO TCFB3A.138 ENDDO TCFB3A.139 ! TCFB3A.140 ELSE IF (I_2STREAM.EQ.IP_HEMI_MEAN) THEN TCFB3A.141 DO I=I_LAYER_FIRST, I_LAYER_LAST TCFB3A.142 DO L=1, N_PROFILE TCFB3A.143 SUM(L, I)=2.0E+00 TCFB3A.144 & *(1.0E+00-OMEGA(L, I)*ASYMMETRY(L, I)) TCFB3A.145 DIFF(L, I)=2.0E+00*(1.0E+00-OMEGA(L, I)) TCFB3A.146 ENDDO TCFB3A.147 ENDDO TCFB3A.148 ! TCFB3A.149 ELSE IF (I_2STREAM.EQ.IP_PIFM80) THEN ADB1F402.756 DO I=I_LAYER_FIRST, I_LAYER_LAST ADB1F402.757 DO L=1, N_PROFILE ADB1F402.758 SUM(L, I)=2.0E+00 ADB1F402.759 & -1.5E+00*OMEGA(L, I)*ASYMMETRY(L, I) ADB1F402.760 & -0.5E+00*OMEGA(L, I) ADB1F402.761 DIFF(L, I)=2.0E+00*(1.0E+00-OMEGA(L, I)) ADB1F402.762 ENDDO ADB1F402.763 ENDDO ADB1F402.764 ! ADB1F402.765 ELSE IF (I_2STREAM.EQ.IP_IFM) THEN TCFB3A.150 WRITE(IU_ERR, '(/A)') TCFB3A.151 & '*** ERROR: THE IMPROVED FLUX METHOD HAS ' TCFB3A.152 & //'NOT BEEN IMPLEMENTED.' TCFB3A.153 IERR=I_ERR_FATAL TCFB3A.154 RETURN TCFB3A.155 ! TCFB3A.156 ELSE IF (I_2STREAM.EQ.IP_ZDK_FLUX) THEN TCFB3A.157 WRITE(IU_ERR, '(/A)') TCFB3A.158 & '*** ERROR: ZDUNKOWSKI''S FLUX METHOD HAS ' TCFB3A.159 & //'NOT BEEN IMPLEMENTED.' TCFB3A.160 IERR=I_ERR_FATAL TCFB3A.161 RETURN TCFB3A.162 ! TCFB3A.163 ELSE IF (I_2STREAM.EQ.IP_KRSCHG_FLUX) THEN TCFB3A.164 WRITE(IU_ERR, '(/A)') TCFB3A.165 & '*** ERROR: KERSCHGEN''S FLUX METHOD HAS ' TCFB3A.166 & //'NOT BEEN IMPLEMENTED.' TCFB3A.167 IERR=I_ERR_FATAL TCFB3A.168 RETURN TCFB3A.169 ! TCFB3A.170 ELSE IF (I_2STREAM.EQ.IP_COAKLEY_CHYLEK_1) THEN TCFB3A.171 WRITE(IU_ERR, '(/A)') TCFB3A.172 & '*** ERROR: COAKLEY-CHYLEK''S FIRST METHOD HAS ' TCFB3A.173 & //'NOT BEEN IMPLEMENTED.' TCFB3A.174 IERR=I_ERR_FATAL TCFB3A.175 RETURN TCFB3A.176 ! TCFB3A.177 ELSE IF (I_2STREAM.EQ.IP_COAKLEY_CHYLEK_2) THEN TCFB3A.178 WRITE(IU_ERR, '(/A)') TCFB3A.179 & '*** ERROR: COAKLEY-CHYLEK''S SECOND METHOD HAS ' TCFB3A.180 & //'NOT BEEN IMPLEMENTED.' TCFB3A.181 IERR=I_ERR_FATAL TCFB3A.182 RETURN TCFB3A.183 ! TCFB3A.184 ELSE IF (I_2STREAM.EQ.IP_MEADOR_WEAVER) THEN TCFB3A.185 WRITE(IU_ERR, '(/A)') TCFB3A.186 & '*** ERROR: MEADOR & WEAVER''S METHOD HAS ' TCFB3A.187 & //'NOT BEEN IMPLEMENTED.' TCFB3A.188 IERR=I_ERR_FATAL TCFB3A.189 RETURN TCFB3A.190 ! TCFB3A.191 ELSE TCFB3A.192 WRITE(IU_ERR, '(/A)') TCFB3A.193 & '*** ERROR: AN ILLEGAL PARAMETER HAS BEEN SUPPLIED ' TCFB3A.194 & //'TO DEFINE THE 2-STREAM SCHEME.' TCFB3A.195 IERR=I_ERR_FATAL TCFB3A.196 RETURN TCFB3A.197 ! TCFB3A.198 ENDIF TCFB3A.199 ! TCFB3A.200 ! TCFB3A.201 ! TCFB3A.202 RETURN TCFB3A.203 END TCFB3A.204 *ENDIF DEF,A01_3A,OR,DEF,A02_3A TCFB3A.205 *ENDIF DEF,A70_1A,OR,DEF,A70_1B APB4F405.120