*IF DEF,A70_1A,OR,DEF,A70_1B                                               APB4F405.125    
*IF DEF,A01_3A,OR,DEF,A02_3A                                               TRPCLM3A.3      
C *****************************COPYRIGHT******************************     TRPCLM3A.4      
C (c) CROWN COPYRIGHT 1996, METEOROLOGICAL OFFICE, All Rights Reserved.    TRPCLM3A.5      
C                                                                          TRPCLM3A.6      
C Use, duplication or disclosure of this code is subject to the            TRPCLM3A.7      
C restrictions as set forth in the contract.                               TRPCLM3A.8      
C                                                                          TRPCLM3A.9      
C                Meteorological Office                                     TRPCLM3A.10     
C                London Road                                               TRPCLM3A.11     
C                BRACKNELL                                                 TRPCLM3A.12     
C                Berkshire UK                                              TRPCLM3A.13     
C                RG12 2SZ                                                  TRPCLM3A.14     
C                                                                          TRPCLM3A.15     
C If no contract has been raised with this copy of the code, the use,      TRPCLM3A.16     
C duplication or disclosure of it is strictly prohibited.  Permission      TRPCLM3A.17     
C to do so must first be obtained in writing from the Head of Numerical    TRPCLM3A.18     
C Modelling at the above address.                                          TRPCLM3A.19     
C ******************************COPYRIGHT******************************    TRPCLM3A.20     
C                                                                          TRPCLM3A.21     
!+ Subroutine to solve the two-stream equations in a triple column.        TRPCLM3A.22     
!                                                                          TRPCLM3A.23     
! Method:                                                                  TRPCLM3A.24     
!       The atmospheric column is divided into three regions               TRPCLM3A.25     
!       in each layer and the two-stream coefficients are determined       TRPCLM3A.26     
!       for each region. The equations are then solved using               TRPCLM3A.27     
!       appropriate coupling of the fluxes at the boundaries               TRPCLM3A.28     
!       of layers.                                                         TRPCLM3A.29     
!                                                                          TRPCLM3A.30     
! Current Owner of Code: J. M. Edwards                                     TRPCLM3A.31     
!                                                                          TRPCLM3A.32     
! History:                                                                 TRPCLM3A.33     
!       Version         Date                    Comment                    TRPCLM3A.34     
!       4.2             15-05-96                Original Code              TRPCLM3A.35     
!                                               (J. M. Edwards)            TRPCLM3A.36     
!       4.5             18-05-98                Variable for obsolete      ADB1F405.978    
!                                               solver removed. EXTERNAL   ADB1F405.979    
!                                               statement corrected.       ADB1F405.980    
!                                               Unused variables           ADB1F405.981    
!                                               removed.                   ADB1F405.982    
!                                               (J. M. Edwards)            ADB1F405.983    
!                                                                          TRPCLM3A.37     
! Description of Code:                                                     TRPCLM3A.38     
!   FORTRAN 77  with extensions listed in documentation.                   TRPCLM3A.39     
!                                                                          TRPCLM3A.40     
!- ---------------------------------------------------------------------   TRPCLM3A.41     

      SUBROUTINE TRIPLE_COLUMN(IERR                                         1,7TRPCLM3A.42     
!                       Atmospheric Properties                             TRPCLM3A.43     
     &   , N_PROFILE, N_LAYER                                              TRPCLM3A.44     
!                       Two-stream Scheme                                  TRPCLM3A.45     
     &   , I_2STREAM                                                       TRPCLM3A.46     
!                       Corrections to Two-stream Equations                TRPCLM3A.47     
     &   , L_2_STREAM_CORRECT, PLANCK_SOURCE, GROUND_EMISSION              TRPCLM3A.48     
!                       Options for Solver                                 TRPCLM3A.49     
     &   , I_SOLVER, L_NET                                                 ADB1F405.984    
!                       Options for Equivalent Extinction                  TRPCLM3A.51     
     &   , L_SCALE_SOLAR, ADJUST_SOLAR_KE                                  TRPCLM3A.52     
!                       Spectral Region                                    TRPCLM3A.53     
     &   , ISOLIR                                                          TRPCLM3A.54     
!                       Infra-red Properties                               TRPCLM3A.55     
     &   , DIFF_PLANCK                                                     TRPCLM3A.56     
     &   , L_IR_SOURCE_QUAD, DIFF_PLANCK_2                                 TRPCLM3A.57     
!                       Conditions at TOA                                  TRPCLM3A.58     
     &   , FLUX_INC_DOWN, FLUX_INC_DIRECT, SEC_0                           TRPCLM3A.59     
!                       Conditions at Surface                              TRPCLM3A.60     
     &   , ALBEDO_SURFACE_DIFF, ALBEDO_SURFACE_DIR, SOURCE_GROUND          TRPCLM3A.61     
!                       Clear-sky Single Scattering Properties             TRPCLM3A.62     
     &   , TAU_FREE, OMEGA_FREE, ASYMMETRY_FREE                            TRPCLM3A.63     
!                       Cloud Geometry                                     TRPCLM3A.64     
     &   , N_CLOUD_TOP                                                     TRPCLM3A.65     
     &   , N_CLOUD_TYPE, FRAC_CLOUD                                        TRPCLM3A.66     
     &   , I_REGION_CLOUD, FRAC_REGION                                     TRPCLM3A.67     
     &   , W_FREE, W_CLOUD                                                 ADB1F405.985    
     &   , CLOUD_OVERLAP                                                   TRPCLM3A.70     
!                       Cloudy Optical Properties                          TRPCLM3A.71     
     &   , TAU_CLOUD, OMEGA_CLOUD, ASYMMETRY_CLOUD                         TRPCLM3A.72     
!                       Fluxes Calculated                                  TRPCLM3A.73     
     &   , FLUX_DIRECT, FLUX_TOTAL                                         TRPCLM3A.74     
!                       Flags for Clear-sky Calculations                   TRPCLM3A.75     
     &   , L_CLEAR, I_SOLVER_CLEAR                                         TRPCLM3A.76     
!                       Clear-sky Fluxes Calculated                        TRPCLM3A.77     
     &   , FLUX_DIRECT_CLEAR, FLUX_TOTAL_CLEAR                             TRPCLM3A.78     
!                       Dimensions of Arrays                               TRPCLM3A.79     
     &   , NPD_PROFILE, NPD_LAYER                                          TRPCLM3A.80     
     &   )                                                                 TRPCLM3A.81     
!                                                                          TRPCLM3A.82     
!                                                                          TRPCLM3A.83     
!                                                                          TRPCLM3A.84     
      IMPLICIT NONE                                                        TRPCLM3A.85     
!                                                                          TRPCLM3A.86     
!                                                                          TRPCLM3A.87     
!     SIZES OF DUMMY ARRAYS.                                               TRPCLM3A.88     
      INTEGER   !, INTENT(IN)                                              TRPCLM3A.89     
     &     NPD_PROFILE                                                     TRPCLM3A.90     
!             MAXIMUM NUMBER OF PROFILES                                   TRPCLM3A.91     
     &   , NPD_LAYER                                                       TRPCLM3A.92     
!             MAXIMUM NUMBER OF LAYERS                                     TRPCLM3A.93     
!                                                                          TRPCLM3A.94     
!     INCLUDE COMDECKS.                                                    TRPCLM3A.95     
*CALL STDIO3A                                                              TRPCLM3A.96     
*CALL DIMFIX3A                                                             TRPCLM3A.97     
*CALL ERROR3A                                                              TRPCLM3A.98     
*CALL PRMCH3A                                                              TRPCLM3A.99     
*CALL PRECSN3A                                                             TRPCLM3A.100    
*CALL SPCRG3A                                                              TRPCLM3A.101    
*CALL SOLVER3A                                                             TRPCLM3A.102    
*CALL CLCFPT3A                                                             TRPCLM3A.103    
*CALL CLDREG3A                                                             TRPCLM3A.104    
!                                                                          TRPCLM3A.105    
!     DUMMY VARIABLES.                                                     TRPCLM3A.106    
      INTEGER   !, INTENT(IN)                                              TRPCLM3A.107    
     &     N_PROFILE                                                       TRPCLM3A.108    
!             NUMBER OF PROFILES                                           TRPCLM3A.109    
     &   , N_LAYER                                                         TRPCLM3A.110    
!             NUMBER OF LAYERS                                             TRPCLM3A.111    
     &   , N_CLOUD_TOP                                                     TRPCLM3A.112    
!             TOP CLOUDY LAYER                                             TRPCLM3A.113    
     &   , N_CLOUD_TYPE                                                    TRPCLM3A.114    
!             NUMBER OF TYPES OF CLOUDS                                    TRPCLM3A.115    
     &   , ISOLIR                                                          TRPCLM3A.124    
!             SPECTRAL REGION                                              TRPCLM3A.125    
     &   , I_2STREAM                                                       TRPCLM3A.126    
!             TWO-STREAM SCHEME                                            TRPCLM3A.127    
     &   , I_SOLVER                                                        TRPCLM3A.128    
!             SOLVER USED                                                  TRPCLM3A.129    
     &   , I_SOLVER_CLEAR                                                  TRPCLM3A.132    
!             SOLVER FOR CLEAR-SKY FLUXES                                  TRPCLM3A.133    
      INTEGER   !, INTENT(OUT)                                             TRPCLM3A.134    
     &     IERR                                                            TRPCLM3A.135    
!             ERROR FLAG                                                   TRPCLM3A.136    
      LOGICAL   !, INTENT(IN)                                              TRPCLM3A.137    
     &     L_NET                                                           TRPCLM3A.138    
!             CALCULATE NET FLUXES                                         TRPCLM3A.139    
     &   , L_CLEAR                                                         TRPCLM3A.140    
!             CALCULATE CLEAR-SKY FLUXES                                   TRPCLM3A.141    
     &   , L_SCALE_SOLAR                                                   TRPCLM3A.142    
!             FLAG TO SCALE SOLAR                                          TRPCLM3A.143    
     &   , L_IR_SOURCE_QUAD                                                TRPCLM3A.144    
!             USE QUADRATIC SOURCE TERM                                    TRPCLM3A.145    
     &   , L_2_STREAM_CORRECT                                              TRPCLM3A.146    
!             EDGE CORRECTION TO 2-STREAM                                  TRPCLM3A.147    
!                                                                          TRPCLM3A.148    
!     OPTICAL PROPERTIES:                                                  TRPCLM3A.149    
      REAL      !, INTENT(IN)                                              TRPCLM3A.150    
     &     TAU_FREE(NPD_PROFILE, NPD_LAYER)                                TRPCLM3A.151    
!             FREE OPTICAL DEPTH                                           TRPCLM3A.152    
     &   , OMEGA_FREE(NPD_PROFILE, NPD_LAYER)                              TRPCLM3A.153    
!             FREE ALBEDO OF SINGLE SCATTERING                             TRPCLM3A.154    
     &   , ASYMMETRY_FREE(NPD_PROFILE, NPD_LAYER)                          TRPCLM3A.155    
!             CLEAR-SKY ASYMMETRY                                          TRPCLM3A.156    
     &   , TAU_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE)               TRPCLM3A.157    
!             CLOUDY OPTICAL DEPTH                                         TRPCLM3A.158    
     &   , OMEGA_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE)             TRPCLM3A.159    
!             CLOUDY ALBEDO OF SINGLE SCATTERING                           TRPCLM3A.160    
     &   , ASYMMETRY_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE)         TRPCLM3A.161    
!             CLOUDY ASYMMETRY                                             TRPCLM3A.162    
!                                                                          TRPCLM3A.163    
!     CLOUD GEOMETRY:                                                      TRPCLM3A.164    
      INTEGER   !, INTENT(IN)                                              TRPCLM3A.165    
     &     I_REGION_CLOUD(NPD_CLOUD_TYPE)                                  TRPCLM3A.166    
!             REGIONS IN WHICH TYPES OF CLOUDS FALL                        TRPCLM3A.167    
      REAL      !, INTENT(IN)                                              TRPCLM3A.168    
     &     W_CLOUD(NPD_PROFILE, NPD_LAYER)                                 TRPCLM3A.169    
!             CLOUDY FRACTIONS IN EACH LAYER                               TRPCLM3A.170    
     &   , W_FREE(NPD_PROFILE, NPD_LAYER)                                  TRPCLM3A.171    
!             CLEAR SKY FRACTIONS IN EACH LAYER                            TRPCLM3A.172    
     &   , FRAC_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE)              TRPCLM3A.173    
!             FRACTIONS OF DIFFERENT TYPES OF CLOUD                        TRPCLM3A.174    
     &   , CLOUD_OVERLAP(NPD_PROFILE, 0: NPD_LAYER, NPD_OVERLAP_COEFF)     TRPCLM3A.175    
!             ENERGY TRANSFER COEFFICIENTS                                 TRPCLM3A.176    
     &   , FRAC_REGION(NPD_PROFILE, NPD_LAYER, NPD_REGION)                 TRPCLM3A.177    
!             FRACTIONS OF TOTAL CLOUD OCCUPIED BY EACH REGION             TRPCLM3A.178    
      REAL      !, INTENT(IN)                                              TRPCLM3A.179    
     &     SEC_0(NPD_PROFILE)                                              TRPCLM3A.180    
!             SECANT OF SOLAR ZENITH ANGLE                                 TRPCLM3A.181    
     &   , ALBEDO_SURFACE_DIFF(NPD_PROFILE)                                TRPCLM3A.182    
!             DIFFUSE ALBEDO                                               TRPCLM3A.183    
     &   , ALBEDO_SURFACE_DIR(NPD_PROFILE)                                 TRPCLM3A.184    
!             DIRECT ALBEDO                                                TRPCLM3A.185    
     &   , FLUX_INC_DOWN(NPD_PROFILE)                                      TRPCLM3A.186    
!             INCIDENT TOTAL FLUX                                          TRPCLM3A.187    
     &   , FLUX_INC_DIRECT(NPD_PROFILE)                                    TRPCLM3A.188    
!             INCIDENT DIRECT FLUX                                         TRPCLM3A.189    
     &   , DIFF_PLANCK(NPD_PROFILE, NPD_LAYER)                             TRPCLM3A.190    
!             CHANGE IN PLANCK FUNCTION                                    TRPCLM3A.191    
     &   , SOURCE_GROUND(NPD_PROFILE)                                      TRPCLM3A.192    
!             FLUX FROM SURFACE                                            TRPCLM3A.193    
     &   , ADJUST_SOLAR_KE(NPD_PROFILE, NPD_LAYER)                         TRPCLM3A.194    
!             ADJUSTMENT OF SOLAR BEAM WITH EQUIVALENT EXTINCTION          TRPCLM3A.195    
     &   , DIFF_PLANCK_2(NPD_PROFILE, NPD_LAYER)                           TRPCLM3A.196    
!             2x2ND DIFFERENCE OF PLANCKIAN                                TRPCLM3A.197    
     &   , PLANCK_SOURCE(NPD_PROFILE, 0: NPD_LAYER)                        TRPCLM3A.198    
!             PLANCKIAN SOURCE FUNCTION                                    TRPCLM3A.199    
     &   , GROUND_EMISSION(NPD_PROFILE)                                    TRPCLM3A.200    
!             TOTAL FLUX EMITTED FROM GROUND                               TRPCLM3A.201    
!                                                                          TRPCLM3A.202    
!     FLUXES CALCULATED                                                    TRPCLM3A.203    
      REAL      !, INTENT(OUT)                                             TRPCLM3A.204    
     &     FLUX_DIRECT(NPD_PROFILE, 0: NPD_LAYER)                          TRPCLM3A.205    
!             DIRECT FLUX                                                  TRPCLM3A.206    
     &   , FLUX_TOTAL(NPD_PROFILE, 2*NPD_LAYER+2)                          TRPCLM3A.207    
!             LONG FLUX VECTOR                                             TRPCLM3A.208    
     &   , FLUX_DIRECT_CLEAR(NPD_PROFILE, 0: NPD_LAYER)                    TRPCLM3A.209    
!             CLEAR DIRECT FLUX                                            TRPCLM3A.210    
     &   , FLUX_TOTAL_CLEAR(NPD_PROFILE, 2*NPD_LAYER+2)                    TRPCLM3A.211    
!             CLEAR TOTAL FLUX                                             TRPCLM3A.212    
!                                                                          TRPCLM3A.213    
!                                                                          TRPCLM3A.214    
!                                                                          TRPCLM3A.215    
!     LOCAL VARIABALES.                                                    TRPCLM3A.216    
      INTEGER                                                              TRPCLM3A.217    
     &     N_SOURCE_COEFF                                                  TRPCLM3A.218    
!             NUMBER OF SOURCE COEFFICIENTS                                TRPCLM3A.219    
     &   , N_REGION                                                        TRPCLM3A.220    
!             NUMBER OF REGIONS                                            TRPCLM3A.221    
     &   , I                                                               TRPCLM3A.222    
!             LOOP VARIABLE                                                TRPCLM3A.223    
     &   , L                                                               TRPCLM3A.224    
!             LOOP VARIABLE                                                TRPCLM3A.225    
     &   , K                                                               TRPCLM3A.226    
!             LOOP VARIABLE                                                TRPCLM3A.227    
     &   , N_TOP                                                           TRPCLM3A.228    
!             TOP-MOST LAYER FOR CALCULATION                               TRPCLM3A.229    
!                                                                          TRPCLM3A.230    
!                                                                          TRPCLM3A.231    
!     CLEAR-SKY COEFFICIENTS:                                              TRPCLM3A.232    
      REAL                                                                 TRPCLM3A.233    
     &     TRANS(NPD_PROFILE, NPD_LAYER, NPD_REGION)                       TRPCLM3A.234    
!             TRANSMISSION COEFFICIENTS                                    TRPCLM3A.235    
     &   , REFLECT(NPD_PROFILE, NPD_LAYER, NPD_REGION)                     TRPCLM3A.236    
!             REFLECTION COEFFICIENTS                                      TRPCLM3A.237    
     &   , TRANS_0(NPD_PROFILE, NPD_LAYER, NPD_REGION)                     TRPCLM3A.238    
!             DIRECT TRANSMISSION COEFFICIENTS                             TRPCLM3A.239    
     &   , SOURCE_COEFF(NPD_PROFILE, NPD_LAYER                             TRPCLM3A.240    
     &      , NPD_SOURCE_COEFF, NPD_REGION)                                TRPCLM3A.241    
!             SOURCE COEFFICIENTS                                          TRPCLM3A.242    
     &   , S_DOWN(NPD_PROFILE, NPD_LAYER, NPD_REGION)                      TRPCLM3A.243    
!             FREE DOWNWARD SOURCE                                         TRPCLM3A.244    
     &   , S_UP(NPD_PROFILE, NPD_LAYER, NPD_REGION)                        TRPCLM3A.245    
!             FREE UPWARD SOURCE                                           TRPCLM3A.246    
     &   , S_DOWN_CLEAR(NPD_PROFILE, NPD_LAYER)                            TRPCLM3A.247    
!             CLEAR DOWNWARD SOURCE                                        TRPCLM3A.248    
     &   , S_UP_CLEAR(NPD_PROFILE, NPD_LAYER)                              TRPCLM3A.249    
!             CLEAR UPWARD SOURCE                                          TRPCLM3A.250    
!                                                                          TRPCLM3A.251    
!     SOURCE FUNCTIONS AT THE CROUND                                       TRPCLM3A.252    
      REAL                                                                 TRPCLM3A.253    
     &     SOURCE_FLUX_GROUND(NPD_PROFILE, NPD_REGION)                     TRPCLM3A.254    
!             SOURCE OF FLUX FROM GROUND                                   TRPCLM3A.255    
     &   , FLUX_DIRECT_GROUND(NPD_PROFILE, NPD_REGION)                     TRPCLM3A.256    
!             DIRECT FLUX AT GROUND IN EACH REGION                         TRPCLM3A.257    
!                                                                          TRPCLM3A.258    
!                                                                          TRPCLM3A.259    
!     FUNCTIONS CALLED:                                                    TRPCLM3A.260    
      INTEGER                                                              TRPCLM3A.261    
     &     SET_N_SOURCE_COEFF                                              TRPCLM3A.262    
!             FUNCTION TO SET NUMBER OF SOURCE COEFFICIENTS                TRPCLM3A.263    
!                                                                          TRPCLM3A.264    
!     SUBROUTINES CALLED:                                                  TRPCLM3A.265    
      EXTERNAL                                                             TRPCLM3A.266    
     &     TWO_COEFF_REGION, IR_SOURCE, TRIPLE_SOLAR_SOURCE                ADB1F405.986    
     &   , SOLVER_TRIPLE, SOLVER_TRIPLE_APP_SCAT                           ADB1F405.987    
     &   , CLEAR_SUPPLEMENT                                                TRPCLM3A.270    
!                                                                          TRPCLM3A.271    
!                                                                          TRPCLM3A.272    
!     SET THE NUMBER OF REGIONS FOR POSSIBLE FUTURE EXPANSION.             TRPCLM3A.273    
      N_REGION=3                                                           TRPCLM3A.274    
!                                                                          TRPCLM3A.275    
!                                                                          TRPCLM3A.276    
!     SET THE NUMBER OF SOURCE COEFFICIENTS FOR THE APPROXIMATION          TRPCLM3A.277    
      N_SOURCE_COEFF=SET_N_SOURCE_COEFF(ISOLIR, L_IR_SOURCE_QUAD)          TRPCLM3A.278    
!                                                                          TRPCLM3A.279    
!                                                                          TRPCLM3A.280    
      CALL TWO_COEFF_REGION(IERR                                           TRPCLM3A.281    
     &   , N_PROFILE, N_LAYER, N_CLOUD_TOP                                 TRPCLM3A.282    
     &   , I_2STREAM, L_IR_SOURCE_QUAD, N_SOURCE_COEFF                     TRPCLM3A.283    
     &   , N_CLOUD_TYPE, FRAC_CLOUD                                        TRPCLM3A.284    
     &   , I_REGION_CLOUD, FRAC_REGION                                     TRPCLM3A.285    
     &   , ASYMMETRY_FREE, OMEGA_FREE, TAU_FREE                            TRPCLM3A.286    
     &   , ASYMMETRY_CLOUD, OMEGA_CLOUD, TAU_CLOUD                         TRPCLM3A.287    
     &   , ISOLIR, SEC_0                                                   TRPCLM3A.288    
     &   , TRANS, REFLECT, TRANS_0, SOURCE_COEFF                           TRPCLM3A.289    
     &   , NPD_PROFILE, NPD_LAYER                                          TRPCLM3A.290    
     &   )                                                                 TRPCLM3A.291    
      IF (IERR.NE.I_NORMAL) RETURN                                         TRPCLM3A.292    
!                                                                          TRPCLM3A.293    
!                                                                          TRPCLM3A.294    
      IF (ISOLIR.EQ.IP_INFRA_RED) THEN                                     TRPCLM3A.295    
!                                                                          TRPCLM3A.296    
!        EDGE CORRECTIONS FOR THE TWO-STREAM EQUATIONS DO NOT              TRPCLM3A.297    
!        REALLY FIT WITH THIS METHOD OF TREATING CLOUDS. OPTICAL           TRPCLM3A.298    
!        DEPTHS AND TRANSMISSIONS MUST BE PASSED TO THE SUBROUTINE         TRPCLM3A.299    
!        TO FILL THE ARGUMENT LIST, BUT IT IS NOT INTENDED THAT            TRPCLM3A.300    
!        THESE ARRAYS WILL BE USED.                                        TRPCLM3A.301    
!                                                                          TRPCLM3A.302    
         DO K=1, N_REGION                                                  TRPCLM3A.303    
            IF (K.EQ.IP_REGION_CLEAR) THEN                                 TRPCLM3A.304    
               N_TOP=1                                                     TRPCLM3A.305    
            ELSE                                                           TRPCLM3A.306    
               N_TOP=N_CLOUD_TOP                                           TRPCLM3A.307    
            ENDIF                                                          TRPCLM3A.308    
!                                                                          TRPCLM3A.309    
            CALL IR_SOURCE(N_PROFILE, N_TOP, N_LAYER                       TRPCLM3A.310    
     &         , SOURCE_COEFF(1, 1, 1, K), DIFF_PLANCK                     TRPCLM3A.311    
     &         , L_IR_SOURCE_QUAD, DIFF_PLANCK_2                           TRPCLM3A.312    
     &         , L_2_STREAM_CORRECT, PLANCK_SOURCE                         TRPCLM3A.313    
     &         , GROUND_EMISSION, N_LAYER                                  TRPCLM3A.314    
     &         , TAU_FREE, TRANS                                           TRPCLM3A.315    
     &         , S_DOWN(1, 1, K), S_UP(1, 1, K)                            TRPCLM3A.316    
     &         , NPD_PROFILE, NPD_LAYER                                    TRPCLM3A.317    
     &         )                                                           TRPCLM3A.318    
         ENDDO                                                             TRPCLM3A.319    
!                                                                          TRPCLM3A.320    
!                                                                          TRPCLM3A.321    
!        WEIGHT THE SOURCE FUNCTIONS BY THE AREA FRACTIONS, BUT            TRPCLM3A.322    
!        SAVE THE CLEAR-SKY FRACTIONS FOR DIAGNOSTIC USE IF                TRPCLM3A.323    
!        REQUIRED.                                                         TRPCLM3A.324    
         IF (L_CLEAR) THEN                                                 TRPCLM3A.325    
            DO I=1, N_LAYER                                                TRPCLM3A.326    
               DO L=1, N_PROFILE                                           TRPCLM3A.327    
                  S_DOWN_CLEAR(L, I)=S_DOWN(L, I, IP_REGION_CLEAR)         TRPCLM3A.328    
                  S_UP_CLEAR(L, I)=S_UP(L, I, IP_REGION_CLEAR)             TRPCLM3A.329    
               ENDDO                                                       TRPCLM3A.330    
            ENDDO                                                          TRPCLM3A.331    
         ENDIF                                                             TRPCLM3A.332    
         DO I=N_CLOUD_TOP, N_LAYER                                         TRPCLM3A.333    
            DO L=1, N_PROFILE                                              TRPCLM3A.334    
               S_DOWN(L, I, IP_REGION_CLEAR)                               TRPCLM3A.335    
     &            =W_FREE(L, I)*S_DOWN(L, I, IP_REGION_CLEAR)              TRPCLM3A.336    
               S_UP(L, I, IP_REGION_CLEAR)                                 TRPCLM3A.337    
     &            =W_FREE(L, I)*S_UP(L, I, IP_REGION_CLEAR)                TRPCLM3A.338    
               S_DOWN(L, I, IP_REGION_STRAT)                               TRPCLM3A.339    
     &            =W_CLOUD(L, I)                                           TRPCLM3A.340    
     &            *FRAC_REGION(L, I, IP_REGION_STRAT)                      TRPCLM3A.341    
     &            *S_DOWN(L, I, IP_REGION_STRAT)                           TRPCLM3A.342    
               S_UP(L, I, IP_REGION_STRAT)                                 TRPCLM3A.343    
     &            =W_CLOUD(L, I)                                           TRPCLM3A.344    
     &            *FRAC_REGION(L, I, IP_REGION_STRAT)                      TRPCLM3A.345    
     &            *S_UP(L, I, IP_REGION_STRAT)                             TRPCLM3A.346    
               S_DOWN(L, I, IP_REGION_CONV)                                TRPCLM3A.347    
     &            =W_CLOUD(L, I)                                           TRPCLM3A.348    
     &            *FRAC_REGION(L, I, IP_REGION_CONV)                       TRPCLM3A.349    
     &            *S_DOWN(L, I, IP_REGION_CONV)                            TRPCLM3A.350    
               S_UP(L, I, IP_REGION_CONV)                                  TRPCLM3A.351    
     &            =W_CLOUD(L, I)                                           TRPCLM3A.352    
     &            *FRAC_REGION(L, I, IP_REGION_CONV)                       TRPCLM3A.353    
     &            *S_UP(L, I, IP_REGION_CONV)                              TRPCLM3A.354    
            ENDDO                                                          TRPCLM3A.355    
         ENDDO                                                             TRPCLM3A.356    
!                                                                          TRPCLM3A.357    
      ENDIF                                                                TRPCLM3A.358    
!                                                                          TRPCLM3A.359    
!                                                                          TRPCLM3A.360    
!     CALCULATE THE APPROPRIATE SOURCE TERMS FOR THE SOLAR: CLOUDY         TRPCLM3A.361    
!     AND CLEAR PROPERTIES ARE BOTH NEEDED HERE.                           TRPCLM3A.362    
!                                                                          TRPCLM3A.363    
      IF (ISOLIR.EQ.IP_SOLAR) THEN                                         TRPCLM3A.364    
!                                                                          TRPCLM3A.365    
         CALL TRIPLE_SOLAR_SOURCE(N_PROFILE, N_LAYER, N_CLOUD_TOP          TRPCLM3A.366    
     &      , FLUX_INC_DIRECT                                              TRPCLM3A.367    
     &      , L_SCALE_SOLAR, ADJUST_SOLAR_KE                               TRPCLM3A.368    
     &      , TRANS_0, SOURCE_COEFF                                        TRPCLM3A.369    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V11)                           TRPCLM3A.370    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V12)                           TRPCLM3A.371    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V13)                           TRPCLM3A.372    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V21)                           TRPCLM3A.373    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V22)                           TRPCLM3A.374    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V23)                           TRPCLM3A.375    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V31)                           TRPCLM3A.376    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V32)                           TRPCLM3A.377    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V33)                           TRPCLM3A.378    
     &      , FLUX_DIRECT, FLUX_DIRECT_GROUND                              TRPCLM3A.379    
     &      , S_UP, S_DOWN                                                 TRPCLM3A.380    
     &      , NPD_PROFILE, NPD_LAYER                                       TRPCLM3A.381    
     &   )                                                                 TRPCLM3A.382    
      ENDIF                                                                TRPCLM3A.383    
!                                                                          TRPCLM3A.384    
!        SET THE PARTITIONED SOURCE FUNCTIONS AT THE GROUND.               TRPCLM3A.385    
         IF (ISOLIR.EQ.IP_SOLAR) THEN                                      TRPCLM3A.386    
            DO L=1, N_PROFILE                                              TRPCLM3A.387    
               SOURCE_FLUX_GROUND(L, IP_REGION_CLEAR)                      TRPCLM3A.388    
     &            =(ALBEDO_SURFACE_DIR(L)-ALBEDO_SURFACE_DIFF(L))          TRPCLM3A.389    
     &            *FLUX_DIRECT_GROUND(L, IP_REGION_CLEAR)                  TRPCLM3A.390    
               SOURCE_FLUX_GROUND(L, IP_REGION_STRAT)                      TRPCLM3A.391    
     &            =(ALBEDO_SURFACE_DIR(L)-ALBEDO_SURFACE_DIFF(L))          TRPCLM3A.392    
     &            *FLUX_DIRECT_GROUND(L, IP_REGION_STRAT)                  TRPCLM3A.393    
               SOURCE_FLUX_GROUND(L, IP_REGION_CONV)                       TRPCLM3A.394    
     &            =(ALBEDO_SURFACE_DIR(L)-ALBEDO_SURFACE_DIFF(L))          TRPCLM3A.395    
     &            *FLUX_DIRECT_GROUND(L, IP_REGION_CONV)                   TRPCLM3A.396    
            ENDDO                                                          TRPCLM3A.397    
         ELSE                                                              TRPCLM3A.398    
            DO L=1, N_PROFILE                                              TRPCLM3A.399    
               SOURCE_FLUX_GROUND(L, IP_REGION_CLEAR)                      TRPCLM3A.400    
     &            =CLOUD_OVERLAP(L, N_LAYER, IP_CLOVLP_U11)                TRPCLM3A.401    
     &            *SOURCE_GROUND(L)                                        TRPCLM3A.402    
               SOURCE_FLUX_GROUND(L, IP_REGION_STRAT)                      TRPCLM3A.403    
     &            =CLOUD_OVERLAP(L, N_LAYER, IP_CLOVLP_U21)                TRPCLM3A.404    
     &            *SOURCE_GROUND(L)                                        TRPCLM3A.405    
               SOURCE_FLUX_GROUND(L, IP_REGION_CONV)                       TRPCLM3A.406    
     &            =CLOUD_OVERLAP(L, N_LAYER, IP_CLOVLP_U31)                TRPCLM3A.407    
     &            *SOURCE_GROUND(L)                                        TRPCLM3A.408    
            ENDDO                                                          TRPCLM3A.409    
         ENDIF                                                             TRPCLM3A.410    
!                                                                          TRPCLM3A.411    
!                                                                          TRPCLM3A.412    
!                                                                          TRPCLM3A.413    
      IF (I_SOLVER.EQ.IP_SOLVER_TRIPLE) THEN                               TRPCLM3A.414    
!                                                                          TRPCLM3A.415    
         CALL SOLVER_TRIPLE(N_PROFILE, N_LAYER, N_CLOUD_TOP                TRPCLM3A.416    
     &      , TRANS(1, 1, IP_REGION_CLEAR)                                 TRPCLM3A.417    
     &      , REFLECT(1, 1, IP_REGION_CLEAR)                               TRPCLM3A.418    
     &      , S_DOWN(1, 1, IP_REGION_CLEAR)                                TRPCLM3A.419    
     &      , S_UP(1, 1, IP_REGION_CLEAR)                                  TRPCLM3A.420    
     &      , TRANS(1, 1, IP_REGION_STRAT)                                 TRPCLM3A.421    
     &      , REFLECT(1, 1, IP_REGION_STRAT)                               TRPCLM3A.422    
     &      , S_DOWN(1, 1, IP_REGION_STRAT)                                TRPCLM3A.423    
     &      , S_UP(1, 1, IP_REGION_STRAT)                                  TRPCLM3A.424    
     &      , TRANS(1, 1, IP_REGION_CONV)                                  TRPCLM3A.425    
     &      , REFLECT(1, 1, IP_REGION_CONV)                                TRPCLM3A.426    
     &      , S_DOWN(1, 1, IP_REGION_CONV)                                 TRPCLM3A.427    
     &      , S_UP(1, 1, IP_REGION_CONV)                                   TRPCLM3A.428    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V11)                           TRPCLM3A.429    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V12)                           TRPCLM3A.430    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V13)                           TRPCLM3A.431    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V21)                           TRPCLM3A.432    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V22)                           TRPCLM3A.433    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V23)                           TRPCLM3A.434    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V31)                           TRPCLM3A.435    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V32)                           TRPCLM3A.436    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V33)                           TRPCLM3A.437    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U11)                           TRPCLM3A.438    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U12)                           TRPCLM3A.439    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U13)                           TRPCLM3A.440    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U21)                           TRPCLM3A.441    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U22)                           TRPCLM3A.442    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U23)                           TRPCLM3A.443    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U31)                           TRPCLM3A.444    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U32)                           TRPCLM3A.445    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U33)                           TRPCLM3A.446    
     &      , L_NET                                                        TRPCLM3A.447    
     &      , FLUX_INC_DOWN                                                TRPCLM3A.448    
     &      , SOURCE_FLUX_GROUND(1, IP_REGION_CLEAR)                       TRPCLM3A.449    
     &      , SOURCE_FLUX_GROUND(1, IP_REGION_STRAT)                       TRPCLM3A.450    
     &      , SOURCE_FLUX_GROUND(1, IP_REGION_CONV)                        TRPCLM3A.451    
     &      , ALBEDO_SURFACE_DIFF                                          TRPCLM3A.452    
     &      , FLUX_TOTAL                                                   TRPCLM3A.453    
     &      , NPD_PROFILE, NPD_LAYER                                       TRPCLM3A.454    
     &      )                                                              TRPCLM3A.455    
!                                                                          TRPCLM3A.456    
      ELSE IF (I_SOLVER.EQ.IP_SOLVER_TRIPLE_APP_SCAT) THEN                 TRPCLM3A.457    
!                                                                          TRPCLM3A.458    
         CALL SOLVER_TRIPLE_APP_SCAT(N_PROFILE, N_LAYER, N_CLOUD_TOP       TRPCLM3A.459    
     &      , TRANS(1, 1, IP_REGION_CLEAR)                                 TRPCLM3A.460    
     &      , REFLECT(1, 1, IP_REGION_CLEAR)                               TRPCLM3A.461    
     &      , S_DOWN(1, 1, IP_REGION_CLEAR)                                TRPCLM3A.462    
     &      , S_UP(1, 1, IP_REGION_CLEAR)                                  TRPCLM3A.463    
     &      , TRANS(1, 1, IP_REGION_STRAT)                                 TRPCLM3A.464    
     &      , REFLECT(1, 1, IP_REGION_STRAT)                               TRPCLM3A.465    
     &      , S_DOWN(1, 1, IP_REGION_STRAT)                                TRPCLM3A.466    
     &      , S_UP(1, 1, IP_REGION_STRAT)                                  TRPCLM3A.467    
     &      , TRANS(1, 1, IP_REGION_CONV)                                  TRPCLM3A.468    
     &      , REFLECT(1, 1, IP_REGION_CONV)                                TRPCLM3A.469    
     &      , S_DOWN(1, 1, IP_REGION_CONV)                                 TRPCLM3A.470    
     &      , S_UP(1, 1, IP_REGION_CONV)                                   TRPCLM3A.471    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V11)                           TRPCLM3A.472    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V12)                           TRPCLM3A.473    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V13)                           TRPCLM3A.474    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V21)                           TRPCLM3A.475    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V22)                           TRPCLM3A.476    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V23)                           TRPCLM3A.477    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V31)                           TRPCLM3A.478    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V32)                           TRPCLM3A.479    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_V33)                           TRPCLM3A.480    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U11)                           TRPCLM3A.481    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U12)                           TRPCLM3A.482    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U13)                           TRPCLM3A.483    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U21)                           TRPCLM3A.484    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U22)                           TRPCLM3A.485    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U23)                           TRPCLM3A.486    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U31)                           TRPCLM3A.487    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U32)                           TRPCLM3A.488    
     &      , CLOUD_OVERLAP(1, 0, IP_CLOVLP_U33)                           TRPCLM3A.489    
     &      , L_NET                                                        TRPCLM3A.490    
     &      , FLUX_INC_DOWN                                                TRPCLM3A.491    
     &      , SOURCE_FLUX_GROUND(1, IP_REGION_CLEAR)                       TRPCLM3A.492    
     &      , SOURCE_FLUX_GROUND(1, IP_REGION_STRAT)                       TRPCLM3A.493    
     &      , SOURCE_FLUX_GROUND(1, IP_REGION_CONV)                        TRPCLM3A.494    
     &      , ALBEDO_SURFACE_DIFF                                          TRPCLM3A.495    
     &      , FLUX_TOTAL                                                   TRPCLM3A.496    
     &      , NPD_PROFILE, NPD_LAYER                                       TRPCLM3A.497    
     &      )                                                              TRPCLM3A.498    
!                                                                          TRPCLM3A.499    
      ELSE                                                                 TRPCLM3A.500    
!                                                                          TRPCLM3A.501    
         WRITE(IU_ERR, '(/A)')                                             TRPCLM3A.502    
     &      '***ERROR: THE SOLVER SPECIFIED IS NOT VALID HERE.'            TRPCLM3A.503    
         IERR=I_ERR_FATAL                                                  TRPCLM3A.504    
         RETURN                                                            TRPCLM3A.505    
!                                                                          TRPCLM3A.506    
      ENDIF                                                                TRPCLM3A.507    
!                                                                          TRPCLM3A.508    
!                                                                          TRPCLM3A.509    
!                                                                          TRPCLM3A.510    
      IF (L_CLEAR) THEN                                                    TRPCLM3A.511    
!                                                                          TRPCLM3A.512    
         CALL CLEAR_SUPPLEMENT(IERR, N_PROFILE, N_LAYER, I_SOLVER_CLEAR    TRPCLM3A.513    
     &      , TRANS(1, 1, IP_REGION_CLEAR)                                 TRPCLM3A.514    
     &      , REFLECT(1, 1, IP_REGION_CLEAR)                               TRPCLM3A.515    
     &      , TRANS_0(1, 1, IP_REGION_CLEAR)                               TRPCLM3A.516    
     &      , SOURCE_COEFF(1, 1, 1, IP_REGION_CLEAR)                       TRPCLM3A.517    
     &      , ISOLIR, FLUX_INC_DIRECT, FLUX_INC_DOWN                       TRPCLM3A.518    
     &      , S_DOWN_CLEAR, S_UP_CLEAR                                     TRPCLM3A.519    
     &      , ALBEDO_SURFACE_DIFF, ALBEDO_SURFACE_DIR                      TRPCLM3A.520    
     &      , SOURCE_GROUND                                                TRPCLM3A.521    
     &      , L_SCALE_SOLAR, ADJUST_SOLAR_KE                               TRPCLM3A.522    
     &      , FLUX_DIRECT_CLEAR, FLUX_TOTAL_CLEAR                          TRPCLM3A.523    
     &      , NPD_PROFILE, NPD_LAYER                                       TRPCLM3A.524    
     &      )                                                              TRPCLM3A.525    
      ENDIF                                                                TRPCLM3A.526    
!                                                                          TRPCLM3A.527    
!                                                                          TRPCLM3A.528    
!                                                                          TRPCLM3A.529    
      RETURN                                                               TRPCLM3A.530    
      END                                                                  TRPCLM3A.531    
*ENDIF DEF,A01_3A,OR,DEF,A02_3A                                            TRPCLM3A.532    
*ENDIF DEF,A70_1A,OR,DEF,A70_1B                                            APB4F405.126