*IF DEF,A70_1B                                                             TWCFRG3B.2      
*IF DEF,A01_3A,OR,DEF,A02_3A                                               TWCFRG3B.3      
C *****************************COPYRIGHT******************************     TWCFRG3B.4      
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved.    TWCFRG3B.5      
C                                                                          TWCFRG3B.6      
C Use, duplication or disclosure of this code is subject to the            TWCFRG3B.7      
C restrictions as set forth in the contract.                               TWCFRG3B.8      
C                                                                          TWCFRG3B.9      
C                Meteorological Office                                     TWCFRG3B.10     
C                London Road                                               TWCFRG3B.11     
C                BRACKNELL                                                 TWCFRG3B.12     
C                Berkshire UK                                              TWCFRG3B.13     
C                RG12 2SZ                                                  TWCFRG3B.14     
C                                                                          TWCFRG3B.15     
C If no contract has been raised with this copy of the code, the use,      TWCFRG3B.16     
C duplication or disclosure of it is strictly prohibited.  Permission      TWCFRG3B.17     
C to do so must first be obtained in writing from the Head of Numerical    TWCFRG3B.18     
C Modelling at the above address.                                          TWCFRG3B.19     
C ******************************COPYRIGHT******************************    TWCFRG3B.20     
C                                                                          TWCFRG3B.21     
!+ Subroutine to calculate two-stream coefficients in the regions.         TWCFRG3B.22     
!                                                                          TWCFRG3B.23     
! Method:                                                                  TWCFRG3B.24     
!   The coefficients for each region are determined and                    TWCFRG3B.25     
!       averaged.                                                          TWCFRG3B.26     
!                                                                          TWCFRG3B.27     
! Current Owner of Code: J. M. Edwards                                     TWCFRG3B.28     
!                                                                          TWCFRG3B.29     
! History:                                                                 TWCFRG3B.30     
!       Version         Date                    Comment                    TWCFRG3B.31     
!       4.5             11-06-98                Optimised version          TWCFRG3B.32     
!                                               (P. Burton)                TWCFRG3B.33     
!                                                                          TWCFRG3B.34     
! Description of Code:                                                     TWCFRG3B.35     
!   FORTRAN 77  with extensions listed in documentation.                   TWCFRG3B.36     
!                                                                          TWCFRG3B.37     
!- ---------------------------------------------------------------------   TWCFRG3B.38     

      SUBROUTINE TWO_COEFF_REGION(IERR                                      1,4TWCFRG3B.39     
     &   , N_PROFILE, N_LAYER, N_CLOUD_TOP                                 TWCFRG3B.40     
     &   , I_2STREAM, L_IR_SOURCE_QUAD, N_SOURCE_COEFF                     TWCFRG3B.41     
     &   , N_CLOUD_TYPE, FRAC_CLOUD                                        TWCFRG3B.42     
     &   , I_REGION_CLOUD, FRAC_REGION                                     TWCFRG3B.43     
     &   , ASYMMETRY_FREE, OMEGA_FREE, TAU_FREE                            TWCFRG3B.44     
     &   , ASYMMETRY_CLOUD, OMEGA_CLOUD, TAU_CLOUD                         TWCFRG3B.45     
     &   , ISOLIR, SEC_0                                                   TWCFRG3B.46     
     &   , TRANS, REFLECT, TRANS_0                                         TWCFRG3B.47     
     &   , SOURCE_COEFF                                                    TWCFRG3B.48     
     &   , NPD_PROFILE, NPD_LAYER                                          TWCFRG3B.49     
     &   )                                                                 TWCFRG3B.50     
!                                                                          TWCFRG3B.51     
!                                                                          TWCFRG3B.52     
!                                                                          TWCFRG3B.53     
      IMPLICIT NONE                                                        TWCFRG3B.54     
!                                                                          TWCFRG3B.55     
!                                                                          TWCFRG3B.56     
!     SIZES OF DUMMY ARRAYS.                                               TWCFRG3B.57     
      INTEGER   !, INTENT(IN)                                              TWCFRG3B.58     
     &     NPD_PROFILE                                                     TWCFRG3B.59     
!             MAXIMUM NUMBER OF PROFILES                                   TWCFRG3B.60     
     &   , NPD_LAYER                                                       TWCFRG3B.61     
!             MAXIMUM NUMBER OF LAYERS                                     TWCFRG3B.62     
!                                                                          TWCFRG3B.63     
!     INCLUDE COMDECKS.                                                    TWCFRG3B.64     
*CALL DIMFIX3A                                                             TWCFRG3B.65     
*CALL SPCRG3A                                                              TWCFRG3B.66     
*CALL ERROR3A                                                              TWCFRG3B.67     
*CALL CLDREG3A                                                             TWCFRG3B.68     
!                                                                          TWCFRG3B.69     
!                                                                          TWCFRG3B.70     
!                                                                          TWCFRG3B.71     
!     DUMMY ARGUMENTS.                                                     TWCFRG3B.72     
      INTEGER   !, INTENT(OUT)                                             TWCFRG3B.73     
     &     IERR                                                            TWCFRG3B.74     
!             ERROR FLAG                                                   TWCFRG3B.75     
      INTEGER   !, INTENT(IN)                                              TWCFRG3B.76     
     &     N_PROFILE                                                       TWCFRG3B.77     
!             NUMBER OF PROFILES                                           TWCFRG3B.78     
     &   , N_LAYER                                                         TWCFRG3B.79     
!             NUMBER OF LAYERS                                             TWCFRG3B.80     
     &   , N_CLOUD_TOP                                                     TWCFRG3B.81     
!             TOPMOST CLOUDY LAYER                                         TWCFRG3B.82     
     &   , ISOLIR                                                          TWCFRG3B.83     
!             SPECTRAL REGION                                              TWCFRG3B.84     
     &   , N_CLOUD_TYPE                                                    TWCFRG3B.85     
!             NUMBER OF TYPES OF CLOUDS                                    TWCFRG3B.86     
     &   , I_2STREAM                                                       TWCFRG3B.87     
!             TWO STREAM SCHEME                                            TWCFRG3B.88     
     &   , N_SOURCE_COEFF                                                  TWCFRG3B.89     
!             NUMBER OF SOURCE COEFFICIENTS                                TWCFRG3B.90     
!                                                                          TWCFRG3B.91     
      INTEGER   !, INTENT(IN)                                              TWCFRG3B.92     
     &     I_REGION_CLOUD(NPD_CLOUD_TYPE)                                  TWCFRG3B.93     
!             REGIONS IN WHICH TYPES OF CLOUDS FALL                        TWCFRG3B.94     
!                                                                          TWCFRG3B.95     
      LOGICAL   !, INTENT(IN)                                              TWCFRG3B.96     
     &     L_IR_SOURCE_QUAD                                                TWCFRG3B.97     
!             USE A QUADRATIC SOURCE IN THE INFRA-RED                      TWCFRG3B.98     
!                                                                          TWCFRG3B.99     
!     OPTICAL PROPERTIES OF LAYER:                                         TWCFRG3B.100    
      REAL      !, INTENT(IN)                                              TWCFRG3B.101    
     &     FRAC_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE)              TWCFRG3B.102    
!             FRACTIONS OF DIFFERENT TYPES OF CLOUDS                       TWCFRG3B.103    
     &   , FRAC_REGION(NPD_PROFILE, NPD_LAYER, NPD_REGION)                 TWCFRG3B.104    
!             FRACTIONS OF TOTAL CLOUD OCCUPIED BY EACH REGION             TWCFRG3B.105    
     &   , ASYMMETRY_FREE(NPD_PROFILE, NPD_LAYER)                          TWCFRG3B.106    
!             CLEAR-SKY ASYMMETRY FACTOR                                   TWCFRG3B.107    
     &   , OMEGA_FREE(NPD_PROFILE, NPD_LAYER)                              TWCFRG3B.108    
!             CLEAR-SKY ALBEDO OF SINGLE SCATTERING                        TWCFRG3B.109    
     &   , TAU_FREE(NPD_PROFILE, NPD_LAYER)                                TWCFRG3B.110    
!             CLEAR-SKY OPTICAL DEPTH                                      TWCFRG3B.111    
     &   , ASYMMETRY_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE)         TWCFRG3B.112    
!             ASYMMETRY FACTOR                                             TWCFRG3B.113    
     &   , OMEGA_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE)             TWCFRG3B.114    
!             ALBEDO OF SINGLE SCATTERING                                  TWCFRG3B.115    
     &   , TAU_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE)               TWCFRG3B.116    
!             OPTICAL DEPTH                                                TWCFRG3B.117    
!                                                                          TWCFRG3B.118    
!     SOLAR BEAM                                                           TWCFRG3B.119    
      REAL      !, INTENT(IN)                                              TWCFRG3B.120    
     &     SEC_0(NPD_PROFILE)                                              TWCFRG3B.121    
!             SECANT OF ZENITH ANGLE                                       TWCFRG3B.122    
!                                                                          TWCFRG3B.123    
!                                                                          TWCFRG3B.124    
!     COEFFICIENTS IN THE TWO-STREAM EQUATIONS:                            TWCFRG3B.125    
      REAL      !, INTENT(OUT)                                             TWCFRG3B.126    
     &     TRANS(NPD_PROFILE, NPD_LAYER, NPD_REGION)                       TWCFRG3B.127    
!             DIFFUSE TRANSMISSION COEFFICIENT                             TWCFRG3B.128    
     &   , REFLECT(NPD_PROFILE, NPD_LAYER, NPD_REGION)                     TWCFRG3B.129    
!             DIFFUSE REFLECTION COEFFICIENT                               TWCFRG3B.130    
     &   , TRANS_0(NPD_PROFILE, NPD_LAYER, NPD_REGION)                     TWCFRG3B.131    
!             DIRECT TRANSMISSION COEFFICIENT                              TWCFRG3B.132    
     &   , SOURCE_COEFF(NPD_PROFILE, NPD_LAYER                             TWCFRG3B.133    
     &      , NPD_SOURCE_COEFF, NPD_REGION)                                TWCFRG3B.134    
!             SOURCE COEFFICIENTS IN TWO-STREAM EQUATIONS                  TWCFRG3B.135    
!                                                                          TWCFRG3B.136    
!     LOCAL VARIABLES.                                                     TWCFRG3B.137    
      INTEGER                                                              TWCFRG3B.138    
     &     N_REGION                                                        TWCFRG3B.139    
!             NUMBER OF REGIONS                                            TWCFRG3B.140    
      INTEGER                                                              TWCFRG3B.141    
     &     I                                                               TWCFRG3B.142    
!             LOOP VARIABLE                                                TWCFRG3B.143    
     &   , J                                                               TWCFRG3B.144    
!             LOOP VARIABLE                                                TWCFRG3B.145    
     &   , K                                                               TWCFRG3B.146    
!             LOOP VARIABLE                                                TWCFRG3B.147    
     &   , L                                                               TWCFRG3B.148    
!             LOOP VARIABLE                                                TWCFRG3B.149    
     &   , I_REGION                                                        TWCFRG3B.150    
!             LOOP VARIABLE OVER REGIONS                                   TWCFRG3B.151    
!                                                                          TWCFRG3B.152    
!     COEFFICIENTS IN THE TWO-STREAM EQUATIONS:                            TWCFRG3B.153    
      REAL      !, INTENT(OUT)                                             TWCFRG3B.154    
     &     TRANS_TEMP(NPD_PROFILE, NPD_LAYER)                              TWCFRG3B.155    
!             TEMPORARY DIFFUSE TRANSMISSION COEFFICIENT                   TWCFRG3B.156    
     &   , REFLECT_TEMP(NPD_PROFILE, NPD_LAYER)                            TWCFRG3B.157    
!             TEMPORARY DIFFUSE REFLECTION COEFFICIENT                     TWCFRG3B.158    
     &   , TRANS_0_TEMP(NPD_PROFILE, NPD_LAYER)                            TWCFRG3B.159    
!             TEMPORARY DIRECT TRANSMISSION COEFFICIENT                    TWCFRG3B.160    
     &   , SOURCE_COEFF_TEMP(NPD_PROFILE, NPD_LAYER, NPD_SOURCE_COEFF)     TWCFRG3B.161    
!             TEMPORARY SOURCE COEFFICIENTS IN TWO-STREAM EQUATIONS        TWCFRG3B.162    
!                                                                          TWCFRG3B.163    
!     VARIABLES FOR GATHERING:                                             TWCFRG3B.164    
      INTEGER                                                              TWCFRG3B.165    
     &     N_LIST                                                          TWCFRG3B.166    
!             NUMBER OF POINTS IN LIST                                     TWCFRG3B.167    
     &   , L_LIST(NPD_PROFILE)                                             TWCFRG3B.168    
!             LIST OF COLLECTED POINTS                                     TWCFRG3B.169    
     &   , LL                                                              TWCFRG3B.170    
      REAL                                                                 TWCFRG3B.171    
     &     TAU_GATHERED(NPD_PROFILE, NPD_LAYER)                            TWCFRG3B.172    
!             GATHERED OPTICAL DEPTH                                       TWCFRG3B.173    
     &   , OMEGA_GATHERED(NPD_PROFILE, NPD_LAYER)                          TWCFRG3B.174    
!             GATHERED ALEBDO OF SINGLE SCATTERING                         TWCFRG3B.175    
     &   , ASYMMETRY_GATHERED(NPD_PROFILE, NPD_LAYER)                      TWCFRG3B.176    
!             GATHERED ASYMMETRY                                           TWCFRG3B.177    
     &   , SEC_0_GATHERED(NPD_PROFILE)                                     TWCFRG3B.178    
!             GATHERED ASYMMETRY                                           TWCFRG3B.179    
     &   , TMP_INV(NPD_PROFILE)                                            TWCFRG3B.180    
!             Temporary work array                                         TWCFRG3B.181    
!                                                                          TWCFRG3B.182    
!     SUBROUTINES CALLED:                                                  TWCFRG3B.183    
      EXTERNAL                                                             TWCFRG3B.184    
     &     TWO_COEFF                                                       TWCFRG3B.185    
!                                                                          TWCFRG3B.186    
!     CRAY DIRECTIVES FOR THE WHOLE ROUTINE:                               TWCFRG3B.187    
!     POINTS ARE NOT REPEATED IN THE INDEXING ARRAY, SO IT IS SAFE         TWCFRG3B.188    
!     TO VECTORIZE OVER INDIRECTLY ADDRESSED ARRAYS.                       TWCFRG3B.189    
Cfpp$ NODEPCHK R                                                           TWCFRG3B.190    
!                                                                          TWCFRG3B.191    
!                                                                          TWCFRG3B.192    
!                                                                          TWCFRG3B.193    
!     FOR THE TRIPLE OVERLAP THE NUMBER OF REGIONS IS 3.                   TWCFRG3B.194    
      N_REGION=3                                                           TWCFRG3B.195    
!                                                                          TWCFRG3B.196    
!     DETERMINE THE OPTICAL PROPERTIES OF THE CLEAR-SKY REGIONS OF         TWCFRG3B.197    
!     THE LAYERS.                                                          TWCFRG3B.198    
!                                                                          TWCFRG3B.199    
      CALL TWO_COEFF(IERR                                                  TWCFRG3B.200    
     &   , N_PROFILE, 1, N_LAYER                                           TWCFRG3B.201    
     &   , I_2STREAM, L_IR_SOURCE_QUAD                                     TWCFRG3B.202    
     &   , ASYMMETRY_FREE, OMEGA_FREE, TAU_FREE                            TWCFRG3B.203    
     &   , ISOLIR, SEC_0                                                   TWCFRG3B.204    
     &   , TRANS(1, 1, IP_REGION_CLEAR)                                    TWCFRG3B.205    
     &   , REFLECT(1, 1, IP_REGION_CLEAR)                                  TWCFRG3B.206    
     &   , TRANS_0(1, 1, IP_REGION_CLEAR)                                  TWCFRG3B.207    
     &   , SOURCE_COEFF(1, 1, 1, IP_REGION_CLEAR)                          TWCFRG3B.208    
     &   , NPD_PROFILE, NPD_LAYER                                          TWCFRG3B.209    
     &   )                                                                 TWCFRG3B.210    
      IF (IERR.NE.I_NORMAL) RETURN                                         TWCFRG3B.211    
!                                                                          TWCFRG3B.212    
!                                                                          TWCFRG3B.213    
!     NOW DEAL WITH CLOUDS.                                                TWCFRG3B.214    
!                                                                          TWCFRG3B.215    
!     INITIALIZE THE FULL ARRAYS FOR CLOUDY REGIONS.                       TWCFRG3B.216    
!                                                                          TWCFRG3B.217    
      DO I_REGION=1, N_REGION                                              TWCFRG3B.218    
         IF (I_REGION.NE.IP_REGION_CLEAR) THEN                             TWCFRG3B.219    
            IF(ISOLIR.NE.IP_SOLAR) THEN                                    TWCFRG3B.220    
               DO I=N_CLOUD_TOP, N_LAYER                                   TWCFRG3B.221    
                  DO L=1, N_PROFILE                                        TWCFRG3B.222    
                     TRANS(L, I, I_REGION)=0.0E+00                         TWCFRG3B.223    
                     REFLECT(L, I, I_REGION)=0.0E+00                       TWCFRG3B.224    
                  ENDDO                                                    TWCFRG3B.225    
               ENDDO                                                       TWCFRG3B.226    
            ELSE IF (ISOLIR.EQ.IP_SOLAR) THEN                              TWCFRG3B.227    
               DO I=N_CLOUD_TOP, N_LAYER                                   TWCFRG3B.228    
                  DO L=1, N_PROFILE                                        TWCFRG3B.229    
                     TRANS(L, I, I_REGION)=0.0E+00                         TWCFRG3B.230    
                     REFLECT(L, I, I_REGION)=0.0E+00                       TWCFRG3B.231    
                     TRANS_0(L, I, I_REGION)=0.0E+00                       TWCFRG3B.232    
                  ENDDO                                                    TWCFRG3B.233    
               ENDDO                                                       TWCFRG3B.234    
            ENDIF                                                          TWCFRG3B.235    
            DO J=1, N_SOURCE_COEFF                                         TWCFRG3B.236    
               DO I=N_CLOUD_TOP, N_LAYER                                   TWCFRG3B.237    
                  DO L=1, N_PROFILE                                        TWCFRG3B.238    
                     SOURCE_COEFF(L, I, J, I_REGION)=0.0E+00               TWCFRG3B.239    
                  ENDDO                                                    TWCFRG3B.240    
               ENDDO                                                       TWCFRG3B.241    
            ENDDO                                                          TWCFRG3B.242    
!                                                                          TWCFRG3B.243    
!                                                                          TWCFRG3B.244    
         ENDIF                                                             TWCFRG3B.245    
!                                                                          TWCFRG3B.246    
      ENDDO                                                                TWCFRG3B.247    
!                                                                          TWCFRG3B.248    
!                                                                          TWCFRG3B.249    
!                                                                          TWCFRG3B.250    
!     CONSIDER EACH TYPE OF CLOUD IN TURN, CHECKING WHICH REGION IT        TWCFRG3B.251    
!     CONTRUBUTES TO AND FORM WEIGHTED SUMS OF CLOUD PROPERTIES.           TWCFRG3B.252    
!                                                                          TWCFRG3B.253    
      DO K=1, N_CLOUD_TYPE                                                 TWCFRG3B.254    
!                                                                          TWCFRG3B.255    
!                                                                          TWCFRG3B.256    
!        SET THE REGION IN WHICH CLOUDS OF THIS TYPE ARE INCLUDED.         TWCFRG3B.257    
         I_REGION=I_REGION_CLOUD(K)                                        TWCFRG3B.258    
!                                                                          TWCFRG3B.259    
         DO I=N_CLOUD_TOP, N_LAYER                                         TWCFRG3B.260    
!                                                                          TWCFRG3B.261    
!           FORM A LIST OF POINTS WHERE CLOUD OF THIS TYPE EXISTS          TWCFRG3B.262    
!           ON THIS ROW FOR GATHERING.                                     TWCFRG3B.263    
            N_LIST=0                                                       TWCFRG3B.264    
            DO L=1, N_PROFILE                                              TWCFRG3B.265    
               IF (FRAC_CLOUD(L, I, K).GT.0.0E+00) THEN                    TWCFRG3B.266    
                  N_LIST=N_LIST+1                                          TWCFRG3B.267    
                  L_LIST(N_LIST)=L                                         TWCFRG3B.268    
               ENDIF                                                       TWCFRG3B.269    
            ENDDO                                                          TWCFRG3B.270    
!                                                                          TWCFRG3B.271    
!                                                                          TWCFRG3B.272    
            IF (N_LIST.GT.0) THEN                                          TWCFRG3B.273    
!                                                                          TWCFRG3B.274    
!              GATHER THE OPTICAL PROPERTIES. THOUGH WE CONSIDER ONLY      TWCFRG3B.275    
!              ONE LAYER AT A TIME THE LOWER ROUTINES WILL OPERATE ON      TWCFRG3B.276    
!              ARRAYS WITH VERTICAL STRUCTURE, SO THE GATHERED ARRAYS      TWCFRG3B.277    
!              ARE TWO-DIMENSIONAL.                                        TWCFRG3B.278    
!                                                                          TWCFRG3B.279    
               DO L=1, N_LIST                                              TWCFRG3B.280    
                  TAU_GATHERED(L, I)                                       TWCFRG3B.281    
     &              =TAU_CLOUD(L_LIST(L), I, K)                            TWCFRG3B.282    
                  OMEGA_GATHERED(L, I)                                     TWCFRG3B.283    
     &              =OMEGA_CLOUD(L_LIST(L), I, K)                          TWCFRG3B.284    
                  ASYMMETRY_GATHERED(L, I)                                 TWCFRG3B.285    
     &              =ASYMMETRY_CLOUD(L_LIST(L), I, K)                      TWCFRG3B.286    
               ENDDO                                                       TWCFRG3B.287    
               IF (ISOLIR.EQ.IP_SOLAR) THEN                                TWCFRG3B.288    
                  DO L=1, N_LIST                                           TWCFRG3B.289    
                     SEC_0_GATHERED(L)=SEC_0(L_LIST(L))                    TWCFRG3B.290    
                  ENDDO                                                    TWCFRG3B.291    
               ENDIF                                                       TWCFRG3B.292    
!                                                                          TWCFRG3B.293    
!                                                                          TWCFRG3B.294    
               CALL TWO_COEFF(IERR                                         TWCFRG3B.295    
     &            , N_LIST, I, I                                           TWCFRG3B.296    
     &            , I_2STREAM, L_IR_SOURCE_QUAD                            TWCFRG3B.297    
     &            , ASYMMETRY_GATHERED, OMEGA_GATHERED                     TWCFRG3B.298    
     &            , TAU_GATHERED                                           TWCFRG3B.299    
     &            , ISOLIR, SEC_0_GATHERED                                 TWCFRG3B.300    
     &            , TRANS_TEMP, REFLECT_TEMP, TRANS_0_TEMP                 TWCFRG3B.301    
     &            , SOURCE_COEFF_TEMP                                      TWCFRG3B.302    
     &            , NPD_PROFILE, NPD_LAYER                                 TWCFRG3B.303    
     &            )                                                        TWCFRG3B.304    
               IF (IERR.NE.I_NORMAL) RETURN                                TWCFRG3B.305    
!                                                                          TWCFRG3B.306    
!                                                                          TWCFRG3B.307    
                                                                           TWCFRG3B.308    
               DO L=1, N_LIST                                              TWCFRG3B.309    
                  LL=L_LIST(L)                                             TWCFRG3B.310    
                  TRANS(LL, I, I_REGION)=TRANS(LL, I, I_REGION)            TWCFRG3B.311    
     &               +FRAC_CLOUD(LL, I, K)*TRANS_TEMP(L, I)                TWCFRG3B.312    
                  REFLECT(LL, I, I_REGION)=REFLECT(LL, I, I_REGION)        TWCFRG3B.313    
     &               +FRAC_CLOUD(LL, I, K)*REFLECT_TEMP(L, I)              TWCFRG3B.314    
               ENDDO                                                       TWCFRG3B.315    
               DO J=1, N_SOURCE_COEFF                                      TWCFRG3B.316    
                  DO L=1, N_LIST                                           TWCFRG3B.317    
                     LL=L_LIST(L)                                          TWCFRG3B.318    
                     SOURCE_COEFF(LL, I, J, I_REGION)                      TWCFRG3B.319    
     &                  =SOURCE_COEFF(LL, I, J, I_REGION)                  TWCFRG3B.320    
     &                  +FRAC_CLOUD(LL, I, K)                              TWCFRG3B.321    
     &                  *SOURCE_COEFF_TEMP(L, I, J)                        TWCFRG3B.322    
                  ENDDO                                                    TWCFRG3B.323    
               ENDDO                                                       TWCFRG3B.324    
               IF (ISOLIR.EQ.IP_SOLAR) THEN                                TWCFRG3B.325    
                  DO L=1, N_LIST                                           TWCFRG3B.326    
                     LL=L_LIST(L)                                          TWCFRG3B.327    
                     TRANS_0(LL, I, I_REGION)=TRANS_0(LL, I, I_REGION)     TWCFRG3B.328    
     &                  +FRAC_CLOUD(LL, I, K)*TRANS_0_TEMP(L, I)           TWCFRG3B.329    
                  ENDDO                                                    TWCFRG3B.330    
               ENDIF                                                       TWCFRG3B.331    
!                                                                          TWCFRG3B.332    
            ENDIF                                                          TWCFRG3B.333    
!                                                                          TWCFRG3B.334    
         ENDDO                                                             TWCFRG3B.335    
      ENDDO                                                                TWCFRG3B.336    
!                                                                          TWCFRG3B.337    
!                                                                          TWCFRG3B.338    
!     FINALLY, SCALE THE WEIGHTED SUMS BY THE CLOUD FRACTIONS.             TWCFRG3B.339    
      DO I_REGION=1, N_REGION                                              TWCFRG3B.340    
         IF (I_REGION.NE.IP_REGION_CLEAR) THEN                             TWCFRG3B.341    
            DO I=N_CLOUD_TOP, N_LAYER                                      TWCFRG3B.342    
!                                                                          TWCFRG3B.343    
!              GATHER POINTS WITHIN THIS REGION.                           TWCFRG3B.344    
               N_LIST=0                                                    TWCFRG3B.345    
               DO L=1,N_PROFILE                                            TWCFRG3B.346    
                  IF (FRAC_REGION(L, I, I_REGION).GT.0.0E+00) THEN         TWCFRG3B.347    
                     N_LIST=N_LIST+1                                       TWCFRG3B.348    
                     L_LIST(N_LIST)=L                                      TWCFRG3B.349    
                  ENDIF                                                    TWCFRG3B.350    
               ENDDO                                                       TWCFRG3B.351    
               IF(ISOLIR.NE.IP_SOLAR) THEN                                 TWCFRG3B.352    
                  DO L=1, N_LIST                                           TWCFRG3B.353    
                     LL=L_LIST(L)                                          TWCFRG3B.354    
                     TMP_INV(L)=1.0/FRAC_REGION(LL,I,I_REGION)             TWCFRG3B.355    
                     TRANS(LL, I, I_REGION)=TRANS(LL, I, I_REGION)         TWCFRG3B.356    
     &                    *TMP_INV(L)                                      TWCFRG3B.357    
                     REFLECT(LL, I, I_REGION)=REFLECT(LL, I, I_REGION)     TWCFRG3B.358    
     &                    *TMP_INV(L)                                      TWCFRG3B.359    
                  ENDDO                                                    TWCFRG3B.360    
               ELSE IF(ISOLIR.EQ.IP_SOLAR) THEN                            TWCFRG3B.361    
                  DO L=1, N_LIST                                           TWCFRG3B.362    
                     LL=L_LIST(L)                                          TWCFRG3B.363    
                     TMP_INV(L)=1.0/FRAC_REGION(LL,I,I_REGION)             TWCFRG3B.364    
                     TRANS(LL, I, I_REGION)=TRANS(LL, I, I_REGION)         TWCFRG3B.365    
     &                    *TMP_INV(L)                                      TWCFRG3B.366    
                     REFLECT(LL, I, I_REGION)=REFLECT(LL, I, I_REGION)     TWCFRG3B.367    
     &                    *TMP_INV(L)                                      TWCFRG3B.368    
                     TRANS_0(LL, I, I_REGION)=TRANS_0(LL, I, I_REGION)     TWCFRG3B.369    
     &                    *TMP_INV(L)                                      TWCFRG3B.370    
                  ENDDO                                                    TWCFRG3B.371    
               END IF                                                      TWCFRG3B.372    
               DO J=1, N_SOURCE_COEFF                                      TWCFRG3B.373    
                  DO L=1, N_LIST                                           TWCFRG3B.374    
                     LL=L_LIST(L)                                          TWCFRG3B.375    
                     SOURCE_COEFF(LL, I, J, I_REGION)                      TWCFRG3B.376    
     &                  =SOURCE_COEFF(LL, I, J, I_REGION)                  TWCFRG3B.377    
     &                  *TMP_INV(L)                                        TWCFRG3B.378    
                  ENDDO                                                    TWCFRG3B.379    
               ENDDO                                                       TWCFRG3B.380    
            ENDDO                                                          TWCFRG3B.381    
         ENDIF                                                             TWCFRG3B.382    
      ENDDO                                                                TWCFRG3B.383    
                                                                           TWCFRG3B.384    
      RETURN                                                               TWCFRG3B.385    
      END                                                                  TWCFRG3B.386    
*ENDIF DEF,A01_3A,OR,DEF,A02_3A                                            TWCFRG3B.387    
*ENDIF DEF,A70_1B                                                          TWCFRG3B.388