*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