*IF DEF,A70_1B                                                             SLVTPA3B.2      
*IF DEF,A01_3A,OR,DEF,A02_3A                                               SLVTPA3B.3      
C *****************************COPYRIGHT******************************     SLVTPA3B.4      
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved.    SLVTPA3B.5      
C                                                                          SLVTPA3B.6      
C Use, duplication or disclosure of this code is subject to the            SLVTPA3B.7      
C restrictions as set forth in the contract.                               SLVTPA3B.8      
C                                                                          SLVTPA3B.9      
C                Meteorological Office                                     SLVTPA3B.10     
C                London Road                                               SLVTPA3B.11     
C                BRACKNELL                                                 SLVTPA3B.12     
C                Berkshire UK                                              SLVTPA3B.13     
C                RG12 2SZ                                                  SLVTPA3B.14     
C                                                                          SLVTPA3B.15     
C If no contract has been raised with this copy of the code, the use,      SLVTPA3B.16     
C duplication or disclosure of it is strictly prohibited.  Permission      SLVTPA3B.17     
C to do so must first be obtained in writing from the Head of Numerical    SLVTPA3B.18     
C Modelling at the above address.                                          SLVTPA3B.19     
C ******************************COPYRIGHT******************************    SLVTPA3B.20     
C                                                                          SLVTPA3B.21     
!+ Subroutine to solve for triple overlaps with approximate scattering.    SLVTPA3B.22     
!                                                                          SLVTPA3B.23     
! Method:                                                                  SLVTPA3B.24     
!       The flux is propagated downwards, ignoring reflection terms.       SLVTPA3B.25     
!       Since the routine uses differential fluxes, this effectively       SLVTPA3B.26     
!       treats the upward flux as Planckian at this point. Upward          SLVTPA3B.27     
!       fluxes are calculated using the newly available approximate        SLVTPA3B.28     
!       downward fluxes in the reflected terms.                            SLVTPA3B.29     
!                                                                          SLVTPA3B.30     
! Current Owner of Code: J. M. Edwards                                     SLVTPA3B.31     
!                                                                          SLVTPA3B.32     
! History:                                                                 SLVTPA3B.33     
!       Version         Date                    Comment                    SLVTPA3B.34     
!       4.5             11-06-98                Optimised version          SLVTPA3B.35     
!                                               (P. Burton)                SLVTPA3B.36     
!                                                                          SLVTPA3B.37     
! Description of Code:                                                     SLVTPA3B.38     
!   FORTRAN 77  with extensions listed in documentation.                   SLVTPA3B.39     
!                                                                          SLVTPA3B.40     
!- ---------------------------------------------------------------------   SLVTPA3B.41     

      SUBROUTINE SOLVER_TRIPLE_APP_SCAT(N_PROFILE, N_LAYER, N_CLOUD_TOP     1SLVTPA3B.42     
     &   , T, R, S_DOWN, S_UP                                              SLVTPA3B.43     
     &   , T_STRAT, R_STRAT, S_DOWN_STRAT, S_UP_STRAT                      SLVTPA3B.44     
     &   , T_CONV, R_CONV, S_DOWN_CONV, S_UP_CONV                          SLVTPA3B.45     
     &   , V11, V12, V13, V21, V22, V23, V31, V32, V33                     SLVTPA3B.46     
     &   , U11, U12, U13, U21, U22, U23, U31, U32, U33                     SLVTPA3B.47     
     &   , L_NET                                                           SLVTPA3B.48     
     &   , FLUX_INC_DOWN                                                   SLVTPA3B.49     
     &   , SOURCE_GROUND_FREE, SOURCE_GROUND_STRAT                         SLVTPA3B.50     
     &   , SOURCE_GROUND_CONV, ALBEDO_SURFACE_DIFF                         SLVTPA3B.51     
     &   , FLUX_TOTAL                                                      SLVTPA3B.52     
     &   , NPD_PROFILE, NPD_LAYER                                          SLVTPA3B.53     
     &   )                                                                 SLVTPA3B.54     
!                                                                          SLVTPA3B.55     
!                                                                          SLVTPA3B.56     
      IMPLICIT NONE                                                        SLVTPA3B.57     
!                                                                          SLVTPA3B.58     
!                                                                          SLVTPA3B.59     
!     SIZES OF DUMMY ARRAYS.                                               SLVTPA3B.60     
      INTEGER   !, INTENT(IN)                                              SLVTPA3B.61     
     &     NPD_PROFILE                                                     SLVTPA3B.62     
!             MAXIMUM NUMBER OF PROFILES                                   SLVTPA3B.63     
     &   , NPD_LAYER                                                       SLVTPA3B.64     
!             MAXIMUM NUMBER OF LAYERS                                     SLVTPA3B.65     
!                                                                          SLVTPA3B.66     
!                                                                          SLVTPA3B.67     
!     DUMMY ARGUMENTS.                                                     SLVTPA3B.68     
      INTEGER   !, INTENT(IN)                                              SLVTPA3B.69     
     &     N_PROFILE                                                       SLVTPA3B.70     
!             NUMBER OF PROFILES                                           SLVTPA3B.71     
     &   , N_LAYER                                                         SLVTPA3B.72     
!             NUMBER OF LAYERS                                             SLVTPA3B.73     
     &   , N_CLOUD_TOP                                                     SLVTPA3B.74     
!             TOPMOST CLOUDY LAYER                                         SLVTPA3B.75     
      LOGICAL   !, INTENT(IN)                                              SLVTPA3B.76     
     &     L_NET                                                           SLVTPA3B.77     
!             FLAG FOR CALCULATION OF NET FLUXES                           SLVTPA3B.78     
      REAL      !, INTENT(IN)                                              SLVTPA3B.79     
     &     T(NPD_PROFILE, NPD_LAYER)                                       SLVTPA3B.80     
!             CLEAR-SKY TRANSMISSION                                       SLVTPA3B.81     
     &   , R(NPD_PROFILE, NPD_LAYER)                                       SLVTPA3B.82     
!             CLEAR-SKY REFLECTION                                         SLVTPA3B.83     
     &   , S_DOWN(NPD_PROFILE, NPD_LAYER)                                  SLVTPA3B.84     
!             CLEAR-SKY DOWNWARD SOURCE FUNCTION                           SLVTPA3B.85     
     &   , S_UP(NPD_PROFILE, NPD_LAYER)                                    SLVTPA3B.86     
!             CLEAR-SKY UPWARD SOURCE FUNCTION                             SLVTPA3B.87     
     &   , T_STRAT(NPD_PROFILE, NPD_LAYER)                                 SLVTPA3B.88     
!             STRATFIFORM TRANSMISSION                                     SLVTPA3B.89     
     &   , R_STRAT(NPD_PROFILE, NPD_LAYER)                                 SLVTPA3B.90     
!             STRATFIFORM REFLECTION                                       SLVTPA3B.91     
     &   , S_DOWN_STRAT(NPD_PROFILE, NPD_LAYER)                            SLVTPA3B.92     
!             DOWNWARD STRATFIFORM SOURCE FUNCTION                         SLVTPA3B.93     
     &   , S_UP_STRAT(NPD_PROFILE, NPD_LAYER)                              SLVTPA3B.94     
!             UPWARD STRATFIFORM SOURCE FUNCTION                           SLVTPA3B.95     
     &   , T_CONV(NPD_PROFILE, NPD_LAYER)                                  SLVTPA3B.96     
!             CONVECTIVE TRANSMISSION                                      SLVTPA3B.97     
     &   , R_CONV(NPD_PROFILE, NPD_LAYER)                                  SLVTPA3B.98     
!             CONVECTIVE REFLECTION                                        SLVTPA3B.99     
     &   , S_DOWN_CONV(NPD_PROFILE, NPD_LAYER)                             SLVTPA3B.100    
!             DOWNWARD CONVECTIVE SOURCE FUNCTION                          SLVTPA3B.101    
     &   , S_UP_CONV(NPD_PROFILE, NPD_LAYER)                               SLVTPA3B.102    
!             UPWARD CONVECTIVE SOURCE FUNCTION                            SLVTPA3B.103    
      REAL      !, INTENT(IN)                                              SLVTPA3B.104    
     &     V11(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.105    
!             ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION           SLVTPA3B.106    
     &   , V12(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.107    
!             ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION           SLVTPA3B.108    
     &   , V13(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.109    
!             ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION           SLVTPA3B.110    
     &   , V21(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.111    
!             ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION           SLVTPA3B.112    
     &   , V22(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.113    
!             ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION           SLVTPA3B.114    
     &   , V23(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.115    
!             ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION           SLVTPA3B.116    
     &   , V31(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.117    
!             ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION           SLVTPA3B.118    
     &   , V32(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.119    
!             ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION           SLVTPA3B.120    
     &   , V33(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.121    
!             ENERGY TRANSFER COEFFICIENT FOR DOWNWARD RADIATION           SLVTPA3B.122    
      REAL                                                                 SLVTPA3B.123    
     &     U11(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.124    
!             ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION             SLVTPA3B.125    
     &   , U12(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.126    
!             ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION             SLVTPA3B.127    
     &   , U13(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.128    
!             ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION             SLVTPA3B.129    
     &   , U21(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.130    
!             ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION             SLVTPA3B.131    
     &   , U22(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.132    
!             ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION             SLVTPA3B.133    
     &   , U23(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.134    
!             ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION             SLVTPA3B.135    
     &   , U31(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.136    
!             ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION             SLVTPA3B.137    
     &   , U32(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.138    
!             ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION             SLVTPA3B.139    
     &   , U33(NPD_PROFILE, 0: NPD_LAYER)                                  SLVTPA3B.140    
!             ENERGY TRANSFER COEFFICIENT FOR UPWARD RADIATION             SLVTPA3B.141    
      REAL      !, INTENT(IN)                                              SLVTPA3B.142    
     &     FLUX_INC_DOWN(NPD_PROFILE)                                      SLVTPA3B.143    
!             INCIDENT FLUX                                                SLVTPA3B.144    
     &   , SOURCE_GROUND_FREE(NPD_PROFILE)                                 SLVTPA3B.145    
!             SOURCE FROM GROUND (CLEAR SKY)                               SLVTPA3B.146    
     &   , SOURCE_GROUND_STRAT(NPD_PROFILE)                                SLVTPA3B.147    
!             SOURCE FROM GROUND (CLOUDY REGION)                           SLVTPA3B.148    
     &   , SOURCE_GROUND_CONV(NPD_PROFILE)                                 SLVTPA3B.149    
!             SOURCE FROM GROUND (CLOUDY REGION)                           SLVTPA3B.150    
     &   , ALBEDO_SURFACE_DIFF(NPD_PROFILE)                                SLVTPA3B.151    
!             DIFFUSE ALBEDO                                               SLVTPA3B.152    
      REAL      !, INTENT(OUT)                                             SLVTPA3B.153    
     &     FLUX_TOTAL(NPD_PROFILE, 2*NPD_LAYER+2)                          SLVTPA3B.154    
!             TOTAL FLUX                                                   SLVTPA3B.155    
!                                                                          SLVTPA3B.156    
!     LOCAL VARIABLES.                                                     SLVTPA3B.157    
      INTEGER                                                              SLVTPA3B.158    
     &     I                                                               SLVTPA3B.159    
!             LOOP VARIABLE                                                SLVTPA3B.160    
     &   , L                                                               SLVTPA3B.161    
!             LOOP VARIABLE                                                SLVTPA3B.162    
!                                                                          SLVTPA3B.163    
!                                                                          SLVTPA3B.164    
!     TEMPORARY FLUXES                                                     SLVTPA3B.165    
      REAL                                                                 SLVTPA3B.166    
     &     FLUX_UP(3,NPD_PROFILE,0:NPD_LAYER)                              SLVTPA3B.167    
     &   , FLUX_DOWN(3,NPD_PROFILE,0:NPD_LAYER)                            SLVTPA3B.168    
     &   , FLUX_PROPAG_1(NPD_PROFILE)                                      SLVTPA3B.169    
!             TEMPORARY FLUXES FOR PROPAGATION ACROSS LAYERS               SLVTPA3B.170    
     &   , FLUX_PROPAG_2(NPD_PROFILE)                                      SLVTPA3B.171    
!             TEMPORARY FLUXES FOR PROPAGATION ACROSS LAYERS               SLVTPA3B.172    
     &   , FLUX_PROPAG_3(NPD_PROFILE)                                      SLVTPA3B.173    
!             TEMPORARY FLUXES FOR PROPAGATION ACROSS LAYERS               SLVTPA3B.174    
!                                                                          SLVTPA3B.175    
!                                                                          SLVTPA3B.176    
!                                                                          SLVTPA3B.177    
!                                                                          SLVTPA3B.178    
!     THE ARRAYS FLUX_DOWN AND FLUX_UP WILL EVENTUALLY CONTAIN THE TOTAL   SLVTPA3B.179    
!     FLUXES, BUT INITIALLY THEY ARE USED FOR THE CLEAR FLUXES.            SLVTPA3B.180    
!     NOTE THAT DOWNWARD FLUXES REFER TO VALUES JUST BELOW THE INTERFACE   SLVTPA3B.181    
!     AND UPWARD FLUXES TO VALUES JUST ABOVE IT.                           SLVTPA3B.182    
!                                                                          SLVTPA3B.183    
!                                                                          SLVTPA3B.184    
!     DOWNWARD FLUX:                                                       SLVTPA3B.185    
!                                                                          SLVTPA3B.186    
!     REGION ABOVE CLOUDS:                                                 SLVTPA3B.187    
      DO L=1, N_PROFILE                                                    SLVTPA3B.188    
         FLUX_TOTAL(L, 2)=FLUX_INC_DOWN(L)                                 SLVTPA3B.189    
      ENDDO                                                                SLVTPA3B.190    
      DO I=1, N_CLOUD_TOP-1                                                SLVTPA3B.191    
         DO L=1, N_PROFILE                                                 SLVTPA3B.192    
            FLUX_TOTAL(L, 2*I+2)=T(L, I)*FLUX_TOTAL(L, 2*I)                SLVTPA3B.193    
     &         +S_DOWN(L, I)                                               SLVTPA3B.194    
         ENDDO                                                             SLVTPA3B.195    
      ENDDO                                                                SLVTPA3B.196    
!                                                                          SLVTPA3B.197    
!     PASS INTO THE CLOUDY REGION. HERE, DOWNWARD FLUXES HOLD VALUES       SLVTPA3B.198    
!     JUST BELOW THE LEVEL AND UPWARD FLUXES THE VALUES JUST ABOVE IT.     SLVTPA3B.199    
!     THUS THE FLUXES IMPINGING ON THE LAYER ARE HELD.                     SLVTPA3B.200    
      I=N_CLOUD_TOP-1                                                      SLVTPA3B.201    
      DO L=1, N_PROFILE                                                    SLVTPA3B.202    
         FLUX_DOWN(1,L, I)=V11(L, I)*FLUX_TOTAL(L, 2*I+2)                  SLVTPA3B.203    
         FLUX_DOWN(2,L, I)=V21(L, I)*FLUX_TOTAL(L, 2*I+2)                  SLVTPA3B.204    
         FLUX_DOWN(3,L, I)=V31(L, I)*FLUX_TOTAL(L, 2*I+2)                  SLVTPA3B.205    
      ENDDO                                                                SLVTPA3B.206    
!                                                                          SLVTPA3B.207    
      DO I=N_CLOUD_TOP, N_LAYER-1                                          SLVTPA3B.208    
!                                                                          SLVTPA3B.209    
!           PROPAGTE THE FLUX ACROSS THE LAYER.                            SLVTPA3B.210    
                                                                           SLVTPA3B.211    
         DO L=1, N_PROFILE                                                 SLVTPA3B.212    
            FLUX_PROPAG_1(L)=T(L, I)*FLUX_DOWN(1,L, I-1)                   SLVTPA3B.213    
            FLUX_PROPAG_2(L)=T_STRAT(L, I)*FLUX_DOWN(2,L, I-1)             SLVTPA3B.214    
            FLUX_PROPAG_3(L)=T_CONV(L, I)*FLUX_DOWN(3,L, I-1)              SLVTPA3B.215    
         END DO                                                            SLVTPA3B.216    
                                                                           SLVTPA3B.217    
         DO L=1, N_PROFILE                                                 SLVTPA3B.218    
            FLUX_PROPAG_1(L) =  FLUX_PROPAG_1(L)                           SLVTPA3B.219    
     &         +S_DOWN(L, I)                                               SLVTPA3B.220    
            FLUX_PROPAG_2(L) =  FLUX_PROPAG_2(L)                           SLVTPA3B.221    
     &         +S_DOWN_STRAT(L, I)                                         SLVTPA3B.222    
         END DO                                                            SLVTPA3B.223    
         DO L=1, N_PROFILE                                                 SLVTPA3B.224    
            FLUX_PROPAG_3(L) =  FLUX_PROPAG_3(L)                           SLVTPA3B.225    
     &         +S_DOWN_CONV(L, I)                                          SLVTPA3B.226    
         END DO                                                            SLVTPA3B.227    
!                                                                          SLVTPA3B.228    
!           TRANSFER ACROSS THE INTERFACE.                                 SLVTPA3B.229    
                                                                           SLVTPA3B.230    
         DO L=1,N_PROFILE                                                  SLVTPA3B.231    
            FLUX_DOWN(1,L, I)=V11(L, I)*FLUX_PROPAG_1(L)                   SLVTPA3B.232    
            FLUX_DOWN(2,L, I)=V21(L, I)*FLUX_PROPAG_1(L)                   SLVTPA3B.233    
            FLUX_DOWN(3,L, I)=V31(L, I)*FLUX_PROPAG_1(L)                   SLVTPA3B.234    
         END DO                                                            SLVTPA3B.235    
                                                                           SLVTPA3B.236    
         DO L=1,N_PROFILE                                                  SLVTPA3B.237    
            FLUX_DOWN(1,L,I) =  FLUX_DOWN(1,L,I)                           SLVTPA3B.238    
     &           +V12(L, I)*FLUX_PROPAG_2(L)                               SLVTPA3B.239    
            FLUX_DOWN(2,L,I) =  FLUX_DOWN(2,L,I)                           SLVTPA3B.240    
     &           +V22(L, I)*FLUX_PROPAG_2(L)                               SLVTPA3B.241    
            FLUX_DOWN(3,L,I) =  FLUX_DOWN(3,L,I)                           SLVTPA3B.242    
     &           +V32(L, I)*FLUX_PROPAG_2(L)                               SLVTPA3B.243    
         END DO                                                            SLVTPA3B.244    
                                                                           SLVTPA3B.245    
         DO L=1,N_PROFILE                                                  SLVTPA3B.246    
            FLUX_DOWN(1,L,I) =  FLUX_DOWN(1,L,I)                           SLVTPA3B.247    
     &           +V13(L, I)*FLUX_PROPAG_3(L)                               SLVTPA3B.248    
            FLUX_DOWN(2,L,I) =  FLUX_DOWN(2,L,I)                           SLVTPA3B.249    
     &           +V23(L, I)*FLUX_PROPAG_3(L)                               SLVTPA3B.250    
            FLUX_DOWN(3,L,I) =  FLUX_DOWN(3,L,I)                           SLVTPA3B.251    
     &           +V33(L, I)*FLUX_PROPAG_3(L)                               SLVTPA3B.252    
!                                                                          SLVTPA3B.253    
         ENDDO                                                             SLVTPA3B.254    
      ENDDO                                                                SLVTPA3B.255    
!                                                                          SLVTPA3B.256    
!     PROPAGATE ACROSS THE BOTTOM LAYER AND FORM THE REFLECTED BEAM.       SLVTPA3B.257    
!     WE DO NOT TRANSFER FLUXES ACROSS THE BOTTOM INTERFACE, SO AS         SLVTPA3B.258    
!     TO MAKE THE REFLECTION CONSISTENT BETWEEN REGIONS.                   SLVTPA3B.259    
      DO L=1, N_PROFILE                                                    SLVTPA3B.260    
!                                                                          SLVTPA3B.261    
!        PROPAGTE THE FLUX THROUGH THE LAYER.                              SLVTPA3B.262    
         FLUX_DOWN(1,L, N_LAYER)                                           SLVTPA3B.263    
     &      =T(L, N_LAYER)*FLUX_DOWN(1,L, N_LAYER-1)                       SLVTPA3B.264    
         FLUX_DOWN(2,L, N_LAYER)                                           SLVTPA3B.265    
     &      =T_STRAT(L, N_LAYER)*FLUX_DOWN(2,L, N_LAYER-1)                 SLVTPA3B.266    
         FLUX_DOWN(3,L, N_LAYER)                                           SLVTPA3B.267    
     &      =T_CONV(L, N_LAYER)*FLUX_DOWN(3,L, N_LAYER-1)                  SLVTPA3B.268    
      END DO                                                               SLVTPA3B.269    
      DO L=1,N_PROFILE                                                     SLVTPA3B.270    
         FLUX_DOWN(1,L, N_LAYER)=FLUX_DOWN(1,L, N_LAYER)                   SLVTPA3B.271    
     &      +S_DOWN(L, N_LAYER)                                            SLVTPA3B.272    
         FLUX_DOWN(2,L, N_LAYER)=FLUX_DOWN(2,L, N_LAYER)                   SLVTPA3B.273    
     &      +S_DOWN_STRAT(L, N_LAYER)                                      SLVTPA3B.274    
         FLUX_DOWN(3,L, N_LAYER)=FLUX_DOWN(3,L, N_LAYER)                   SLVTPA3B.275    
     &      +S_DOWN_CONV(L, N_LAYER)                                       SLVTPA3B.276    
      END DO                                                               SLVTPA3B.277    
                                                                           SLVTPA3B.278    
      DO L=1,N_PROFILE                                                     SLVTPA3B.279    
!                                                                          SLVTPA3B.280    
!        REFLECT FROM THE SURFACE.                                         SLVTPA3B.281    
         FLUX_UP(1,L, N_LAYER)                                             SLVTPA3B.282    
     &      =ALBEDO_SURFACE_DIFF(L)*FLUX_DOWN(1,L, N_LAYER)                SLVTPA3B.283    
         FLUX_UP(2,L, N_LAYER)                                             SLVTPA3B.284    
     &      =ALBEDO_SURFACE_DIFF(L)*FLUX_DOWN(2,L, N_LAYER)                SLVTPA3B.285    
         FLUX_UP(3,L, N_LAYER)                                             SLVTPA3B.286    
     &      =ALBEDO_SURFACE_DIFF(L)*FLUX_DOWN(3,L, N_LAYER)                SLVTPA3B.287    
      END DO                                                               SLVTPA3B.288    
                                                                           SLVTPA3B.289    
      DO L=1,N_PROFILE                                                     SLVTPA3B.290    
         FLUX_UP(1,L, N_LAYER)= FLUX_UP(1,L, N_LAYER)                      SLVTPA3B.291    
     &      +SOURCE_GROUND_FREE(L)                                         SLVTPA3B.292    
         FLUX_UP(2,L, N_LAYER)= FLUX_UP(2,L, N_LAYER)                      SLVTPA3B.293    
     &      +SOURCE_GROUND_STRAT(L)                                        SLVTPA3B.294    
         FLUX_UP(3,L, N_LAYER)= FLUX_UP(3,L, N_LAYER)                      SLVTPA3B.295    
     &      +SOURCE_GROUND_CONV(L)                                         SLVTPA3B.296    
      END DO                                                               SLVTPA3B.297    
                                                                           SLVTPA3B.298    
      DO L=1,N_PROFILE                                                     SLVTPA3B.299    
!        PROPAGATE ACROSS THE BOTTOM LAYER.                                SLVTPA3B.300    
         FLUX_PROPAG_1(L)                                                  SLVTPA3B.301    
     &      =T(L, N_LAYER)*FLUX_UP(1,L, N_LAYER)                           SLVTPA3B.302    
         FLUX_PROPAG_2(L)                                                  SLVTPA3B.303    
     &      =T_STRAT(L, N_LAYER)*FLUX_UP(2,L, N_LAYER)                     SLVTPA3B.304    
         FLUX_PROPAG_3(L)                                                  SLVTPA3B.305    
     &      =T_CONV(L, N_LAYER)*FLUX_UP(3,L, N_LAYER)                      SLVTPA3B.306    
      END DO                                                               SLVTPA3B.307    
                                                                           SLVTPA3B.308    
      DO L=1,N_PROFILE                                                     SLVTPA3B.309    
                                                                           SLVTPA3B.310    
         FLUX_PROPAG_1(L)=FLUX_PROPAG_1(L)                                 SLVTPA3B.311    
     &      +S_UP(L, N_LAYER)                                              SLVTPA3B.312    
         FLUX_PROPAG_2(L)=FLUX_PROPAG_2(L)                                 SLVTPA3B.313    
     &      +S_UP_STRAT(L, N_LAYER)                                        SLVTPA3B.314    
      END DO                                                               SLVTPA3B.315    
                                                                           SLVTPA3B.316    
      DO L=1,N_PROFILE                                                     SLVTPA3B.317    
         FLUX_PROPAG_1(L)=FLUX_PROPAG_1(L)                                 SLVTPA3B.318    
     &        +R(L, N_LAYER)*FLUX_DOWN(1,L, N_LAYER-1)                     SLVTPA3B.319    
         FLUX_PROPAG_2(L)=FLUX_PROPAG_2(L)                                 SLVTPA3B.320    
     &        +R_STRAT(L, N_LAYER)*FLUX_DOWN(2,L, N_LAYER-1)               SLVTPA3B.321    
         FLUX_PROPAG_3(L)=FLUX_PROPAG_3(L)                                 SLVTPA3B.322    
     &        +R_CONV(L, N_LAYER)*FLUX_DOWN(3,L, N_LAYER-1)                SLVTPA3B.323    
      END DO                                                               SLVTPA3B.324    
                                                                           SLVTPA3B.325    
      DO L=1,N_PROFILE                                                     SLVTPA3B.326    
         FLUX_PROPAG_3(L)=FLUX_PROPAG_3(L)                                 SLVTPA3B.327    
     &        +S_UP_CONV(L, N_LAYER)                                       SLVTPA3B.328    
      ENDDO                                                                SLVTPA3B.329    
!                                                                          SLVTPA3B.330    
!                                                                          SLVTPA3B.331    
!                                                                          SLVTPA3B.332    
!     WORK BACK UP THROUGH THE COLUMN ASSIGNING THE UPWARD FLUXES.         SLVTPA3B.333    
      DO I=N_LAYER-1, N_CLOUD_TOP, -1                                      SLVTPA3B.334    
                                                                           SLVTPA3B.335    
!                                                                          SLVTPA3B.336    
         DO L=1, N_PROFILE                                                 SLVTPA3B.337    
            FLUX_UP(1,L, I)=U11(L, I)*FLUX_PROPAG_1(L)                     SLVTPA3B.338    
            FLUX_UP(2,L, I)=U21(L, I)*FLUX_PROPAG_1(L)                     SLVTPA3B.339    
            FLUX_UP(3,L, I)=U31(L, I)*FLUX_PROPAG_1(L)                     SLVTPA3B.340    
         END DO                                                            SLVTPA3B.341    
                                                                           SLVTPA3B.342    
         DO L=1, N_PROFILE                                                 SLVTPA3B.343    
            FLUX_UP(1,L,I)= FLUX_UP(1,L,I)                                 SLVTPA3B.344    
     &         +U12(L, I)*FLUX_PROPAG_2(L)                                 SLVTPA3B.345    
            FLUX_UP(2,L,I)= FLUX_UP(2,L,I)                                 SLVTPA3B.346    
     &         +U22(L, I)*FLUX_PROPAG_2(L)                                 SLVTPA3B.347    
            FLUX_UP(3,L,I)= FLUX_UP(3,L,I)                                 SLVTPA3B.348    
     &         +U32(L, I)*FLUX_PROPAG_2(L)                                 SLVTPA3B.349    
         END DO                                                            SLVTPA3B.350    
         DO L=1, N_PROFILE                                                 SLVTPA3B.351    
            FLUX_UP(1,L,I)= FLUX_UP(1,L,I)                                 SLVTPA3B.352    
     &         +U13(L, I)*FLUX_PROPAG_3(L)                                 SLVTPA3B.353    
            FLUX_UP(2,L,I)= FLUX_UP(2,L,I)                                 SLVTPA3B.354    
     &         +U23(L, I)*FLUX_PROPAG_3(L)                                 SLVTPA3B.355    
            FLUX_UP(3,L,I)= FLUX_UP(3,L,I)                                 SLVTPA3B.356    
     &         +U33(L, I)*FLUX_PROPAG_3(L)                                 SLVTPA3B.357    
!                                                                          SLVTPA3B.358    
         END DO                                                            SLVTPA3B.359    
         DO L=1,N_PROFILE                                                  SLVTPA3B.360    
            FLUX_PROPAG_1(L)=T(L, I)*FLUX_UP(1,L, I)                       SLVTPA3B.361    
            FLUX_PROPAG_2(L)=T_STRAT(L, I)*FLUX_UP(2,L, I)                 SLVTPA3B.362    
            FLUX_PROPAG_3(L)=T_CONV(L, I)*FLUX_UP(3,L, I)                  SLVTPA3B.363    
         END DO                                                            SLVTPA3B.364    
                                                                           SLVTPA3B.365    
         DO L=1,N_PROFILE                                                  SLVTPA3B.366    
            FLUX_PROPAG_1(L) = FLUX_PROPAG_1(L)                            SLVTPA3B.367    
     &         +S_UP(L, I)                                                 SLVTPA3B.368    
            FLUX_PROPAG_2(L) = FLUX_PROPAG_2(L)                            SLVTPA3B.369    
     &         +S_UP_STRAT(L, I)                                           SLVTPA3B.370    
         END DO                                                            SLVTPA3B.371    
                                                                           SLVTPA3B.372    
         DO L=1,N_PROFILE                                                  SLVTPA3B.373    
            FLUX_PROPAG_3(L) = FLUX_PROPAG_3(L)                            SLVTPA3B.374    
     &           +S_UP_CONV(L, I)                                          SLVTPA3B.375    
         END DO                                                            SLVTPA3B.376    
         DO L=1,N_PROFILE                                                  SLVTPA3B.377    
            FLUX_PROPAG_1(L) = FLUX_PROPAG_1(L)                            SLVTPA3B.378    
     &         +R(L, I)*FLUX_DOWN(1,L, I-1)                                SLVTPA3B.379    
            FLUX_PROPAG_2(L) = FLUX_PROPAG_2(L)                            SLVTPA3B.380    
     &           +R_STRAT(L, I)*FLUX_DOWN(2,L, I-1)                        SLVTPA3B.381    
            FLUX_PROPAG_3(L) = FLUX_PROPAG_3(L)                            SLVTPA3B.382    
     &           +R_CONV(L, I)*FLUX_DOWN(3,L, I-1)                         SLVTPA3B.383    
!                                                                          SLVTPA3B.384    
         ENDDO                                                             SLVTPA3B.385    
      ENDDO                                                                SLVTPA3B.386    
!                                                                          SLVTPA3B.387    
!     PROPAGATE INTO THE CLOUD-FREE REGION.                                SLVTPA3B.388    
      I=N_CLOUD_TOP-1                                                      SLVTPA3B.389    
      DO L=1, N_PROFILE                                                    SLVTPA3B.390    
         FLUX_TOTAL(L, 2*I+1)=FLUX_PROPAG_1(L)+FLUX_PROPAG_2(L)            SLVTPA3B.391    
     &      +FLUX_PROPAG_3(L)                                              SLVTPA3B.392    
      ENDDO                                                                SLVTPA3B.393    
!                                                                          SLVTPA3B.394    
!     CONTINUE THROUGH THE LAYERS ABOVE CLOUDS.                            SLVTPA3B.395    
      DO I=N_CLOUD_TOP-1, 1, -1                                            SLVTPA3B.396    
         DO L=1, N_PROFILE                                                 SLVTPA3B.397    
            FLUX_TOTAL(L, 2*I-1)=T(L, I)*FLUX_TOTAL(L, 2*I+1)              SLVTPA3B.398    
     &         +R(L, I)*FLUX_TOTAL(L, 2*I)+S_UP(L, I)                      SLVTPA3B.399    
         ENDDO                                                             SLVTPA3B.400    
      ENDDO                                                                SLVTPA3B.401    
!                                                                          SLVTPA3B.402    
!     ASSIGN THE TOTAL FLUXES ON THE INTERMEDIATE CLOUDY LAYERS.           SLVTPA3B.403    
      DO I=N_CLOUD_TOP, N_LAYER                                            SLVTPA3B.404    
         DO L=1, N_PROFILE                                                 SLVTPA3B.405    
            FLUX_TOTAL(L, 2*I+1)=FLUX_UP(1,L, I)+FLUX_UP(2,L, I)           SLVTPA3B.406    
     &         +FLUX_UP(3,L, I)                                            SLVTPA3B.407    
            FLUX_TOTAL(L, 2*I+2)=FLUX_DOWN(1,L, I)+FLUX_DOWN(2,L, I)       SLVTPA3B.408    
     &         +FLUX_DOWN(3,L, I)                                          SLVTPA3B.409    
         ENDDO                                                             SLVTPA3B.410    
      ENDDO                                                                SLVTPA3B.411    
!                                                                          SLVTPA3B.412    
!     REDUCE TO NET FLUXES IF REQUIRED.                                    SLVTPA3B.413    
      IF (L_NET) THEN                                                      SLVTPA3B.414    
         DO I=0, N_LAYER                                                   SLVTPA3B.415    
            DO L=1, N_PROFILE                                              SLVTPA3B.416    
               FLUX_TOTAL(L, I+1)=FLUX_TOTAL(L, 2*I+2)                     SLVTPA3B.417    
     &            -FLUX_TOTAL(L, 2*I-1)                                    SLVTPA3B.418    
            ENDDO                                                          SLVTPA3B.419    
         ENDDO                                                             SLVTPA3B.420    
      ENDIF                                                                SLVTPA3B.421    
                                                                           SLVTPA3B.422    
      RETURN                                                               SLVTPA3B.423    
      END                                                                  SLVTPA3B.424    
*ENDIF DEF,A01_3A,OR,DEF,A02_3A                                            SLVTPA3B.425    
*ENDIF DEF,A70_1B                                                          SLVTPA3B.426