*IF DEF,A70_1A,OR,DEF,A70_1B                                               APB4F405.107    
*IF DEF,A01_3A,OR,DEF,A02_3A                                               SPLMX3A.2      
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.14011  
C                                                                          GTS2F400.14012  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.14013  
C restrictions as set forth in the contract.                               GTS2F400.14014  
C                                                                          GTS2F400.14015  
C                Meteorological Office                                     GTS2F400.14016  
C                London Road                                               GTS2F400.14017  
C                BRACKNELL                                                 GTS2F400.14018  
C                Berkshire UK                                              GTS2F400.14019  
C                RG12 2SZ                                                  GTS2F400.14020  
C                                                                          GTS2F400.14021  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.14022  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.14023  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.14024  
C Modelling at the above address.                                          GTS2F400.14025  
C ******************************COPYRIGHT******************************    GTS2F400.14026  
C                                                                          GTS2F400.14027  
!+ Subroutine to split the atmosphere into maximally overlapped columns.   SPLMX3A.3      
!                                                                          SPLMX3A.4      
! Method:                                                                  SPLMX3A.5      
!       The layers are first ranked in order of increasing cloudiness.     SPLMX3A.6      
!       This operation cannot be vectorized and is done for one profile    SPLMX3A.7      
!       at a time. The areal extent of each column and the logical         SPLMX3A.8      
!       cloud mask are then set.                                           SPLMX3A.9      
!                                                                          SPLMX3A.10     
! Current Owner of Code: J. M. Edwards                                     SPLMX3A.11     
!                                                                          SPLMX3A.12     
! History:                                                                 SPLMX3A.13     
!       Version         Date                    Comment                    SPLMX3A.14     
!       4.0             27-07-95                Original Code              SPLMX3A.15     
!                                               (J. M. Edwards)            SPLMX3A.16     
!                                                                          SPLMX3A.17     
! Description of Code:                                                     SPLMX3A.18     
!   FORTRAN 77  with extensions listed in documentation.                   SPLMX3A.19     
!                                                                          SPLMX3A.20     
!- ---------------------------------------------------------------------   SPLMX3A.21     

      SUBROUTINE SPLIT_MAXIMUM(N_PROFILE, N_LAYER                           1,1SPLMX3A.22     
     &   , W_CLOUD                                                         SPLMX3A.23     
     &   , N_COLUMN, AREA_COLUMN, L_COLUMN                                 SPLMX3A.24     
     &   , NPD_PROFILE, NPD_LAYER, NPD_COLUMN                              SPLMX3A.25     
     &   )                                                                 SPLMX3A.26     
!                                                                          SPLMX3A.27     
!                                                                          SPLMX3A.28     
!                                                                          SPLMX3A.29     
      IMPLICIT NONE                                                        SPLMX3A.30     
!                                                                          SPLMX3A.31     
!                                                                          SPLMX3A.32     
!     SIZES OF DUMMY ARRAYS.                                               SPLMX3A.33     
      INTEGER   !, INTENT(IN)                                              SPLMX3A.34     
     &     NPD_PROFILE                                                     SPLMX3A.35     
!             MAXIMUM NUMBER OF PROFILES                                   SPLMX3A.36     
     &   , NPD_LAYER                                                       SPLMX3A.37     
!             MAXIMUM NUMBER OF LAYERS                                     SPLMX3A.38     
     &   , NPD_COLUMN                                                      SPLMX3A.39     
!             NUMBER OF COLUMNS PER POINT                                  SPLMX3A.40     
!                                                                          SPLMX3A.41     
!     INCLUDE COMDECKS                                                     SPLMX3A.42     
*CALL PRMCH3A                                                              SPLMX3A.43     
*CALL PRECSN3A                                                             SPLMX3A.44     
!                                                                          SPLMX3A.45     
!     DUMMY ARGUMENTS                                                      SPLMX3A.46     
      INTEGER   !, INTENT(IN)                                              SPLMX3A.47     
     &     N_PROFILE                                                       SPLMX3A.48     
!             NUMBER OF PROFILES                                           SPLMX3A.49     
     &   , N_LAYER                                                         SPLMX3A.50     
!             NUMBER OF LAYERS                                             SPLMX3A.51     
      INTEGER   !, INTENT(INOUT)                                           SPLMX3A.52     
     &     N_COLUMN(NPD_PROFILE)                                           SPLMX3A.53     
!             NUMBER OF COLUMNS                                            SPLMX3A.54     
      LOGICAL   !, INTENT(IN)                                              SPLMX3A.55     
     &     L_COLUMN(NPD_PROFILE, NPD_LAYER, NPD_COLUMN)                    SPLMX3A.56     
!             ARRAY OF TYPES                                               SPLMX3A.57     
      REAL      !, INTENT(IN)                                              SPLMX3A.58     
     &     AREA_COLUMN(NPD_PROFILE, NPD_COLUMN)                            SPLMX3A.59     
!             AREA OF EACH COLUMN                                          SPLMX3A.60     
     &   , W_CLOUD(NPD_PROFILE, NPD_LAYER)                                 SPLMX3A.61     
!             CLOUD AMOUNTS                                                SPLMX3A.62     
!                                                                          SPLMX3A.63     
!     LOCAL ARGUMENTS                                                      SPLMX3A.64     
      INTEGER                                                              SPLMX3A.65     
     &     IRANK(NPD_LAYER)                                                SPLMX3A.66     
!             ARRAY TO RANK COLUMNS BY W                                   SPLMX3A.67     
     &   , I                                                               SPLMX3A.68     
!             LOOP VARIABLE                                                SPLMX3A.69     
     &   , K                                                               SPLMX3A.70     
!             LOOP VARIBLE                                                 SPLMX3A.71     
     &   , L                                                               SPLMX3A.72     
!             LOOP VARIBLE                                                 SPLMX3A.73     
      REAL                                                                 SPLMX3A.74     
     &     W_CLOUD_SINGLE(NPD_LAYER)                                       SPLMX3A.75     
!             CLOUD AMOUNTS FOR SINGLE PROFILE                             SPLMX3A.76     
     &   , W                                                               SPLMX3A.77     
!             SINGLE CLOUD AMOUNT                                          SPLMX3A.78     
!                                                                          SPLMX3A.79     
!     SUBROUTINES CALLED:                                                  SPLMX3A.80     
      EXTERNAL                                                             SPLMX3A.81     
     &     RANK                                                            SPLMX3A.82     
!                                                                          SPLMX3A.83     
!                                                                          SPLMX3A.84     
!                                                                          SPLMX3A.85     
      DO L=1, N_PROFILE                                                    SPLMX3A.86     
!        GATHER THE CLOUD AMOUNTS FOR ONE PROFILE                          SPLMX3A.87     
         DO I=1, N_LAYER                                                   SPLMX3A.88     
            W_CLOUD_SINGLE(I)=W_CLOUD(L, I)                                SPLMX3A.89     
         ENDDO                                                             SPLMX3A.90     
!                                                                          SPLMX3A.91     
!        FIRST FORM THE VECTOR IRANK, RANKING THE LAYERS IN ORDER OF       SPLMX3A.92     
!        INCREASING CLOUD CONTENT.                                         SPLMX3A.93     
         CALL RANK(N_LAYER                                                 SPLMX3A.94     
     &      , W_CLOUD_SINGLE, IRANK                                        SPLMX3A.95     
     &      )                                                              SPLMX3A.96     
!                                                                          SPLMX3A.97     
!        PASS THROUGH ALL THE COLUMNS SETTING L_COLUMN EQUAL TO .FALSE.    SPLMX3A.98     
!        IF THE COLUMN IS ACTUALLY CLEAR ON THAT LEVEL. THE ASSUMPTION     SPLMX3A.99     
!        OF MAXIMUM OVERLAP IS USED HERE.                                  SPLMX3A.100    
         N_COLUMN(L)=1                                                     SPLMX3A.101    
         W=0.0E+00                                                         SPLMX3A.102    
         I=1                                                               SPLMX3A.103    
30       IF (I.LE.N_LAYER) THEN                                            SPLMX3A.104    
            IF ( W_CLOUD_SINGLE(IRANK(I)).LT.(W+TOL_TEST) ) THEN           SPLMX3A.105    
               I=I+1                                                       SPLMX3A.106    
               GOTO 30                                                     SPLMX3A.107    
            ELSE                                                           SPLMX3A.108    
               DO K=1, I-1                                                 SPLMX3A.109    
                  L_COLUMN(L, IRANK(K), N_COLUMN(L))=.FALSE.               SPLMX3A.110    
               ENDDO                                                       SPLMX3A.111    
               DO K=I, N_LAYER                                             SPLMX3A.112    
                  L_COLUMN(L, IRANK(K), N_COLUMN(L))=.TRUE.                SPLMX3A.113    
               ENDDO                                                       SPLMX3A.114    
               AREA_COLUMN(L, N_COLUMN(L))                                 SPLMX3A.115    
     &            =W_CLOUD_SINGLE(IRANK(I))-W                              SPLMX3A.116    
               W=W_CLOUD_SINGLE(IRANK(I))                                  SPLMX3A.117    
            ENDIF                                                          SPLMX3A.118    
            IF (W.LT.W_CLOUD_SINGLE(IRANK(N_LAYER))-TOL_TEST) THEN         SPLMX3A.119    
               N_COLUMN(L)=N_COLUMN(L)+1                                   SPLMX3A.120    
               GOTO 30                                                     SPLMX3A.121    
            ENDIF                                                          SPLMX3A.122    
         ENDIF                                                             SPLMX3A.123    
!                                                                          SPLMX3A.124    
!        THERE IS A TOTALLY CLEAR COLUMN UNLESS AT LEAST ONE LAYER IS      SPLMX3A.125    
!        TOTALLY CLOUDY.                                                   SPLMX3A.126    
         IF ((1.0E+00-W).GT.TOL_TEST) THEN                                 SPLMX3A.127    
!           INCREMENT THE NUMBER OF COLUMNS IF THE FIRST IS NOT BLANK.     SPLMX3A.128    
            IF (W.GE.TOL_TEST) THEN                                        SPLMX3A.129    
               N_COLUMN(L)=N_COLUMN(L)+1                                   SPLMX3A.130    
            ENDIF                                                          SPLMX3A.131    
            DO K=1, N_LAYER                                                SPLMX3A.132    
               L_COLUMN(L, IRANK(K), N_COLUMN(L))=.FALSE.                  SPLMX3A.133    
            ENDDO                                                          SPLMX3A.134    
            AREA_COLUMN(L, N_COLUMN(L))=1.0E+00-W                          SPLMX3A.135    
         ENDIF                                                             SPLMX3A.136    
!                                                                          SPLMX3A.137    
      ENDDO                                                                SPLMX3A.138    
!                                                                          SPLMX3A.139    
!                                                                          SPLMX3A.140    
      RETURN                                                               SPLMX3A.141    
      END                                                                  SPLMX3A.142    
*ENDIF DEF,A01_3A,OR,DEF,A02_3A                                            SPLMX3A.143    
*ENDIF DEF,A70_1A,OR,DEF,A70_1B                                            APB4F405.108