*IF DEF,CONTROL,AND,DEF,ATMOS                                              SETCONA1.2      
C ******************************COPYRIGHT******************************    GTS2F400.8461   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.8462   
C                                                                          GTS2F400.8463   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.8464   
C restrictions as set forth in the contract.                               GTS2F400.8465   
C                                                                          GTS2F400.8466   
C                Meteorological Office                                     GTS2F400.8467   
C                London Road                                               GTS2F400.8468   
C                BRACKNELL                                                 GTS2F400.8469   
C                Berkshire UK                                              GTS2F400.8470   
C                RG12 2SZ                                                  GTS2F400.8471   
C                                                                          GTS2F400.8472   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.8473   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.8474   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.8475   
C Modelling at the above address.                                          GTS2F400.8476   
C ******************************COPYRIGHT******************************    GTS2F400.8477   
C                                                                          GTS2F400.8478   
CLL Subroutine SETCONA ------------------------------------------------    SETCONA1.3      
CLL                                                                        SETCONA1.4      
CLL Purpose : to calculate additional constants derived from               SETCONA1.5      
CLL           information in the dump and store them in the common         SETCONA1.6      
CLL           block /CDERIVED/ defined in the deck CCONSTS.                SETCONA1.7      
CLL        Not suitable for single column use                              SETCONA1.8      
CLL                                                                        SETCONA1.9      
CLL version for Cray YMP                                                   SETCONA1.10     
CLL                                                                        SETCONA1.11     
CLL CW, PA      <- programmer of some or all of previous code or changes   SETCONA1.12     
CLL                                                                        SETCONA1.13     
CLL  Model            Modification history from model version 3.0:         SETCONA1.14     
CLL version  Date                                                          SETCONA1.15     
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.171    
CLL                   portability.  Author Tracey Smith.                   TS150793.172    
CLL  4.0   1/02/95  Polar values of cos and sec latitude given             ACH1F400.1      
CLL                 geometrically correct values. C.D.Hall                 ACH1F400.2      
CLL  3.5  29/03/95  MPP code: Lat. and Long. to take account of local      GPB0F305.334    
CLL                 position in global data.      P.Burton                 GPB0F305.335    
CLL                                                                        SETCONA1.16     
CLL   3.4    18/05/94 Add extra field sin_u_latitude for use by sea        AJS1F401.144    
CLL                   ice dynamics in slab model. J Thomson                AJS1F401.145    
CLL                                                                        AJS1F401.146    
CLL   4.0    22/11/94 Extra arguments in GLUE_CLD to pass Qc and bs out    AJS1F401.147    
CLL                   for use in LS_PPN. Author A.C. Bushell.              AJS1F401.148    
CLL                                                                        AJS1F401.149    
CLL   4.1    22/12/95 SOILB only calculated for ice-free land              AJS1F401.150    
CLL                   points J.Smith                                       AJS1F401.151    
CLL                                                                        AJS1F401.152    
!LL   4.1    19/03/96 Call to SETFILT includes P_ROWS arg.                 GPB0F401.553    
!LL                   Sets up land point list before calculation using     GPB0F401.554    
!LL                   Eaglstone's constant.       P.Burton                 GPB0F401.555    
CLL                                                                        GDS1F402.396    
CLL  4.1  4/09/96:  Port to CRAY T3E  Deborah Salmond                      GDS1F402.397    
!LL   4.2    Nov. 96  T3E MIGRATION: CALL WHENIMD replaced by              GSS9F402.153    
!LL                   portable fortran code.       S.J.Swarbrick           GSS9F402.154    
!LL   4.3    14/04/97 Alternative code (HADCM2-related) optionally to      ATJ0F403.8      
!LL                   set polar area weights to old, inconsistent          ATJ0F403.9      
!LL                   values, under new switch L_OLD_PWTS.  T Johns        ATJ0F403.10     
CLL   4.3    15/05/97 Initialise LAND_LIST indices to MDIs. R.Rawlins.     ARR0F403.33     
CLL   4.4  Sept 97  Remove negative qt values if mixed phase precip        ADM2F404.233    
CLL                 scheme is used. Damian Wilson.                         ADM2F404.234    
!LL   4.4    09/09/97 Determine model level for PMSL reduction             GDR3F404.11     
!LL                   calculation from ETA_PMSL. D. Robinson.              GDR3F404.12     
!LL   4.5    27/08/98 Apply SWAPBOUNDS to LONGITUDE. S.D.Mullerworth       GSM5F405.1      
!LL   4.5    07/04/98 Prints out useful decomposition information          GPB6F405.1      
!LL                                                      P.Burton          GPB6F405.2      
!LL   4.5    13/05/98 Modified to suit new RHcrit parametrization.         ASK1F405.42     
!LL                   Call to GLUE_CLD suitably modified.  S.Cusack        ASK1F405.43     
!LL   4.5    22/10/98   Deletion of code added by Damian Wilson at 4.4,    ASK2F405.1      
!LL                     to ensure bit-comparison for all dumps. S.Cusack   ASK2F405.2      
CLL Programming standard; Unified Model Documentation Paper No. 4          SETCONA1.17     
CLL draft version no. 7, dated 12/7/89                                     SETCONA1.18     
CLL                                                                        SETCONA1.19     
CLL Logical components covered : C26                                       SETCONA1.20     
CLL                                                                        SETCONA1.21     
CLL System task : P0                                                       SETCONA1.22     
CLL                                                                        SETCONA1.23     
CLL Documentation : Unified Model Documentation Paper No P0                SETCONA1.24     
CLL                                                                        SETCONA1.25     
CLLEND----------------------------------------------------------------     SETCONA1.26     
C                                                                          SETCONA1.27     
C*L arguments                                                              SETCONA1.28     
                                                                           SETCONA1.29     

      SUBROUTINE SETCONA                                                    1,8SETCONA1.30     
C Input data                                                               SETCONA1.31     
     &      (AK,BK,DELTA_AK,DELTA_BK,PSTAR,                                SETCONA1.32     
     &       THETA,Q,RHCRIT,                                               SETCONA1.33     
     &       SATCON,SMVCSAT,SMVCWT,                                        SETCONA1.34     
!    &       C_EAG,LAND,                                                   ADM2F404.235    
     &       C_EAG,LAND,L_LSPICE,                                          ADM2F404.236    
     &       RHCPT, ICE_FRAC, BL_LEVELS, L_RHCPT,                          ASK1F405.44     
C size and control variables                                               SETCONA1.36     
     &       P_FIELD,P_LEVELS,P_ROWS,U_ROWS,U_FIELD,ROW_LENGTH,            SETCONA1.37     
     &       LAND_FIELD,Q_LEVELS,                                          SETCONA1.38     
C other constants                                                          SETCONA1.39     
     &       EW_SPACE,NS_SPACE,FIRST_LAT,FIRST_LONG,                       SETCONA1.40     
     &       PHI0,LAMBDA0,                                                 SETCONA1.41     
C logical control switches                                                 ATJ0F403.11     
     &       L_OLD_PWTS,                                                   ATJ0F403.12     
C output data                                                              SETCONA1.42     
     &       AKH,BKH,AK_TO_THE_KAPPA,BK_TO_THE_KAPPA,AKH_TO_THE_KAPPA,     SETCONA1.43     
     &       BKH_TO_THE_KAPPA,COS_U_LATITUDE,SEC_U_LATITUDE,               SETCONA1.44     
     &       SIN_U_LATITUDE,                                               GJT1F304.19     
     &       TAN_U_LATITUDE,COS_P_LATITUDE,SEC_P_LATITUDE,                 SETCONA1.45     
     &       SIN_LONGITUDE,COS_LONGITUDE,TRUE_LONGITUDE,                   SETCONA1.46     
     &       F1,F2,F3,F3_P,TRIGS,IFAX,P_EXNER,TWO_D_GRID_CORRECTION,       SETCONA1.47     
     &       QCL,QCF,SOILB,LAND_LIST,CLOUD_LEVELS,                         SETCONA1.48     
     &       ETA_SPLIT,NUM_CLOUD_TYPES,LOW_BOT_LEVEL,LOW_TOP_LEVEL,        SETCONA1.49     
     &       MED_BOT_LEVEL,MED_TOP_LEVEL,HIGH_BOT_LEVEL,HIGH_TOP_LEVEL,    SETCONA1.50     
     &       ETA_MATRIX_INV,MATRIX_POLY_ORDER,ICODE,CMESSAGE)              SETCONA1.51     
                                                                           SETCONA1.52     
      IMPLICIT NONE                                                        SETCONA1.53     
                                                                           SETCONA1.54     
      INTEGER                                                              SETCONA1.55     
     &       P_FIELD,P_LEVELS,P_ROWS,U_ROWS,U_FIELD,ROW_LENGTH,ICODE,      SETCONA1.56     
     &       LAND_FIELD,Q_LEVELS,BL_LEVELS,                                ASK1F405.45     
     &       LAND_LIST(LAND_FIELD),! List of land points                   SETCONA1.58     
     &       IFAX(10),             ! factors for FFT                       SETCONA1.59     
     &       NUM_CLOUD_TYPES,      ! No of cld types for diag cloud lyr    SETCONA1.60     
     &       CLOUD_LEVELS,         ! No of cloudy levels in the model      SETCONA1.61     
     &       LOW_BOT_LEVEL,        ! Bottom level of lowest cloud type     SETCONA1.62     
     &       LOW_TOP_LEVEL,        ! Top      "    "   "       "    "      SETCONA1.63     
     &       MED_BOT_LEVEL,        ! Bottom   "    "  med      "    "      SETCONA1.64     
     &       MED_TOP_LEVEL,        ! Top      "    "   "       "    "      SETCONA1.65     
     &       HIGH_BOT_LEVEL,       ! Bottom   "    "  top      "    "      SETCONA1.66     
     &       HIGH_TOP_LEVEL,       ! Top      "    "   "       "    "      SETCONA1.67     
     &       MATRIX_POLY_ORDER     ! Order of polynomial used to           SETCONA1.68     
     &                             ! calculate ETA_HALF inverse matrix     SETCONA1.69     
                                                                           SETCONA1.70     
                                                                           SETCONA1.71     
      CHARACTER*(80)                                                       TS150793.173    
     &       CMESSAGE              ! Error message if ICODE >0             SETCONA1.73     
                                                                           SETCONA1.74     
      REAL                                                                 SETCONA1.75     
     &       AK(P_LEVELS), ! mid-layer A values for hybrid coordinates     SETCONA1.76     
     &       BK(P_LEVELS), ! mid-layer B values for hybrid coordinates     SETCONA1.77     
     &       DELTA_AK(P_LEVELS), ! layer thickness A & B values -          SETCONA1.78     
     &       DELTA_BK(P_LEVELS), ! for hybrid coordinates                  SETCONA1.79     
     &       PSTAR(P_FIELD),     !                                         SETCONA1.80     
     &       THETA(P_FIELD,P_LEVELS),                                      SETCONA1.81     
     &       Q(P_FIELD,Q_LEVELS),                                          SETCONA1.82     
     &       RHCRIT(Q_LEVELS),                                             SETCONA1.83     
     &       RHCPT(P_FIELD,Q_LEVELS),  ! OUT                               ASK1F405.46     
     &       ICE_FRAC(P_FIELD),        ! IN                                ASK1F405.47     
     &       ETA_SPLIT(NUM_CLOUD_TYPES+1),                                 SETCONA1.84     
     &      ETA_MATRIX_INV(MATRIX_POLY_ORDER,MATRIX_POLY_ORDER,P_LEVELS)   SETCONA1.85     
                                                                           SETCONA1.86     
      REAL                                                                 SETCONA1.87     
     &       EW_SPACE,    ! EW (x) grid spacing in degrees                 SETCONA1.88     
     &       NS_SPACE,    ! NS (y) grid spacing in degrees                 SETCONA1.89     
     &       FIRST_LAT,   ! Latitude of first PTR row in degrees           SETCONA1.90     
C                         ! (latitude 90>-90)                              SETCONA1.91     
     &       FIRST_LONG,  ! Longitude of 1st PTR pt on row in degree       SETCONA1.92     
C                         ! Longitude 0>360)                               SETCONA1.93     
     &       PHI0,        ! Real latitude of 'pseudo' N pole in degrees    SETCONA1.94     
     &       LAMBDA0     ! Real longitude of 'pseudo' N pole in degrees    SETCONA1.95     
                                                                           SETCONA1.96     
      REAL                                                                 SETCONA1.97     
     &       AKH(P_LEVELS+1),              ! layer boudary A & B values    SETCONA1.98     
     &       BKH(P_LEVELS+1),              ! coordinates for hybrid        SETCONA1.99     
     &       AK_TO_THE_KAPPA(P_LEVELS),    ! (AK/PREF)**KAPPA              SETCONA1.100    
     &       BK_TO_THE_KAPPA(P_LEVELS),    ! (BK/PREF)**KAPPA              SETCONA1.101    
     &       AKH_TO_THE_KAPPA(P_LEVELS+1), ! (AKH/PREF)**KAPPA             SETCONA1.102    
     &       BKH_TO_THE_KAPPA(P_LEVELS+1), ! (BKH/PREF)**KAPPA             SETCONA1.103    
     &       COS_U_LATITUDE(U_FIELD),      !                               SETCONA1.104    
     &       SEC_U_LATITUDE(U_FIELD),      !                               SETCONA1.105    
     &       SIN_U_LATITUDE(U_FIELD),      !                               GJT1F304.20     
     &       TAN_U_LATITUDE(U_FIELD),      !                               SETCONA1.106    
     &       COS_P_LATITUDE(P_FIELD),      !                               SETCONA1.107    
     &       SEC_P_LATITUDE(P_FIELD),      !                               SETCONA1.108    
     &       SIN_LONGITUDE(ROW_LENGTH),    ! sin & cos of longitude        SETCONA1.109    
     &       COS_LONGITUDE(ROW_LENGTH),  ! relative to coordinate pole.    SETCONA1.110    
C                                        ! 1st pt long = 0                 SETCONA1.111    
     &       TRUE_LONGITUDE(P_FIELD), ! longitude relative to Greenwich    SETCONA1.112    
     &       F1(U_FIELD),             ! Coriolis terms at u points as      SETCONA1.113    
     &       F2(U_FIELD),             ! defined in documentation           SETCONA1.114    
     &       F3(U_FIELD),             ! paper 10 equation 4                SETCONA1.115    
     &       F3_P(P_FIELD),           ! Coriolis parameter at P points     SETCONA1.116    
     &       SATCON(LAND_FIELD),      !                                    SETCONA1.117    
     &       SMVCSAT(LAND_FIELD),     !                                    SETCONA1.118    
     &       SMVCWT(LAND_FIELD),      !                                    SETCONA1.119    
     &       C_EAG(LAND_FIELD)        !                                    SETCONA1.120    
                                                                           SETCONA1.121    
      REAL                                                                 SETCONA1.122    
     &       P_EXNER(P_FIELD,P_LEVELS+1),                                  SETCONA1.123    
     &       TRIGS(ROW_LENGTH),! coefficients for FFT                      SETCONA1.124    
     &       TWO_D_GRID_CORRECTION(P_FIELD/ROW_LENGTH),! Correction        SETCONA1.125    
C                                     ! used in filtering to represent     SETCONA1.126    
C                                     ! 2D nature of grid.                 SETCONA1.127    
     &       SOILB(LAND_FIELD),                                            SETCONA1.128    
     &       QCL(P_FIELD,Q_LEVELS),QCF(P_FIELD,Q_LEVELS),                  SETCONA1.129    
     &       CLOUD_BOUND(NUM_CLOUD_TYPES+1)                                SETCONA1.130    
                                                                           SETCONA1.131    
      LOGICAL                                                              SETCONA1.132    
     &       LAND(P_FIELD)                                                 SETCONA1.133    
     &      ,L_LSPICE                                                      ADM2F404.237    
     &      ,L_RHCPT                                                       ASK1F405.48     
     &,      L_OLD_PWTS               ! Switch for HADCM2 polar weights    ATJ0F403.13     
                                                                           SETCONA1.134    
C* ---------------------------------------------------------------------   SETCONA1.135    
                                                                           SETCONA1.136    
*CALL CPHYSCON                                                             SETCONA1.137    
*CALL C_ETA_PMSL                                                           GDR3F404.13     
*IF DEF,MPP                                                                GPB0F305.336    
*CALL PARVARS                                                              GPB0F305.337    
*IF DEF,MPP                                                                GDS1F402.398    
*CALL ACPARM                                                               GDS1F402.399    
*CALL MPPAC                                                                GDS1F402.400    
*ENDIF                                                                     GDS1F402.401    
*ENDIF                                                                     GPB0F305.338    
*CALL TYPFLDPT                                                             ASK1F405.49     
                                                                           SETCONA1.138    
C Local variables                                                          SETCONA1.139    
      REAL                                                                 SETCONA1.140    
     &       CLOUD_FRACTION(P_FIELD,Q_LEVELS),                             SETCONA1.141    
     &       LS_GRID_QC(P_FIELD,Q_LEVELS),     ! LOCAL Qc from LS_CLD      AYY2F400.47     
     &       LS_BS(P_FIELD,Q_LEVELS),          ! LOCAL bs from LS_CLD      AYY2F400.48     
     &       LATITUDE(P_FIELD),                                            SETCONA1.142    
     &       LONGITUDE(P_FIELD),                                           SETCONA1.143    
     &       POLE_LAT,                                                     SETCONA1.144    
     &       ETA_LEV,                          ! ETA at model level        GDR3F404.14     
     &       ETA(P_LEVELS),                                                SETCONA1.145    
     &       POLE_LONG,                                                    SETCONA1.146    
     &       ETA_HALF(P_LEVELS+1),                                         SETCONA1.147    
     &       ETA_MATRIX(MATRIX_POLY_ORDER,MATRIX_POLY_ORDER,P_LEVELS)      SETCONA1.148    
                                                                           SETCONA1.149    
      REAL QPOS,QNEG                                                       ADM2F404.238    
      INTEGER IQNEG(P_FIELD)                                               ADM2F404.239    
                                                                           SETCONA1.150    
*IF -DEF,GLOBAL                                                            SETCONA1.151    
                                                                           SETCONA1.152    
     &      ,TRUE_LATITUDE(P_FIELD)                                        SETCONA1.153    
                                                                           SETCONA1.154    
*ENDIF                                                                     SETCONA1.155    
                                                                           SETCONA1.156    
      INTEGER                                                              SETCONA1.157    
     &       I,KK,II,                                                      SETCONA1.158    
     &       LEVEL,                                                        SETCONA1.159    
     &       ROW,                                                          SETCONA1.160    
     &       POINT,                                                        SETCONA1.161    
     &       FIRST_POINT,                                                  ASK1F405.50     
     &       LAST_POINT,                                                   ASK1F405.51     
     &       POINTS,                                                       ASK1F405.52     
     &       JS,                                                           ASK1F405.53     
     &       N21                                                           SETCONA1.162    
                                                                           SETCONA1.163    
                                                                           SETCONA1.164    
C  External subroutines called :                                           SETCONA1.165    
      EXTERNAL                                                             SETCONA1.166    
     &       EQTOLL,                                                       SETCONA1.167    
     &       GLUE_CLD,                                                     AYY2F400.49     
     &       RHCRIT_CALC,                                                  ASK1F405.54     
     &       SETFILT,                                                      SETCONA1.169    
     &       MATINV                                                        SETCONA1.170    
                                                                           SETCONA1.171    
      REAL   PU, PL                                                        SETCONA1.172    
*CALL P_EXNERC                                                             SETCONA1.173    
*CALL SETFLDPT                                                             ASK1F405.55     
                                                                           SETCONA1.174    
                                                                           SETCONA1.175    
CL Internal structure :                                                    SETCONA1.176    
CL   1. Calculate extra functions of AK,BK from dump information           SETCONA1.177    
C     calculate layer boundary values of AK, BK                            SETCONA1.178    
      AKH(1) = 0.0                                                         SETCONA1.179    
                                                                           SETCONA1.180    
*IF -DEF,STRAT                                                             SETCONA1.181    
      BKH(1) = 1.0                                                         SETCONA1.182    
                                                                           SETCONA1.183    
*ELSE                                                                      SETCONA1.184    
      BKH(1) = 0.0                                                         SETCONA1.185    
                                                                           SETCONA1.186    
*ENDIF                                                                     SETCONA1.187    
                                                                           SETCONA1.188    
      DO LEVEL = 2, P_LEVELS + 1                                           SETCONA1.189    
        AKH(LEVEL) = AKH(LEVEL-1) + DELTA_AK(LEVEL-1)                      SETCONA1.190    
        BKH(LEVEL) = BKH(LEVEL-1) + DELTA_BK(LEVEL-1)                      SETCONA1.191    
                                                                           SETCONA1.192    
        IF(BK(LEVEL-1).EQ.0.0) THEN                                        SETCONA1.193    
          BKH(LEVEL- 1) = 0.0                                              SETCONA1.194    
          BKH(LEVEL)    = 0.0                                              SETCONA1.195    
                                                                           SETCONA1.196    
        END IF                                                             SETCONA1.197    
      END DO                                                               SETCONA1.198    
                                                                           SETCONA1.199    
C calculate (A/PREF)**KAPPA, (B/PREF)**KAPPA for layer mid-points          SETCONA1.200    
      DO LEVEL = 1, P_LEVELS                                               SETCONA1.201    
        IF (AK(LEVEL) .GT. 0.0) THEN                                       SETCONA1.202    
          AK_TO_THE_KAPPA(LEVEL) = (AK(LEVEL) / PREF)**KAPPA               SETCONA1.203    
                                                                           SETCONA1.204    
        ELSE                                                               SETCONA1.205    
          AK_TO_THE_KAPPA(LEVEL) = 0.0                                     SETCONA1.206    
                                                                           SETCONA1.207    
        END IF                                                             SETCONA1.208    
                                                                           SETCONA1.209    
        IF (BK(LEVEL) .GT. 0.0) THEN                                       SETCONA1.210    
          BK_TO_THE_KAPPA(LEVEL) = (BK(LEVEL) / PREF)**KAPPA               SETCONA1.211    
                                                                           SETCONA1.212    
        ELSE                                                               SETCONA1.213    
          BK_TO_THE_KAPPA(LEVEL) = 0.0                                     SETCONA1.214    
                                                                           SETCONA1.215    
        END IF                                                             SETCONA1.216    
      END DO                                                               SETCONA1.217    
                                                                           SETCONA1.218    
C calculate (A/PREF)**KAPPA, (B/PREF)**KAPPA, for layer boundaries         SETCONA1.219    
      DO LEVEL = 1, P_LEVELS + 1                                           SETCONA1.220    
        IF (AKH(LEVEL) .GT. 0.0) THEN                                      SETCONA1.221    
          AKH_TO_THE_KAPPA(LEVEL) = (AKH(LEVEL) / PREF)**KAPPA             SETCONA1.222    
                                                                           SETCONA1.223    
        ELSE                                                               SETCONA1.224    
          AKH_TO_THE_KAPPA(LEVEL) = 0.0                                    SETCONA1.225    
                                                                           SETCONA1.226    
        END IF                                                             SETCONA1.227    
                                                                           SETCONA1.228    
        IF (BKH(LEVEL) .GT. 0.0) THEN                                      SETCONA1.229    
          BKH_TO_THE_KAPPA(LEVEL) = (BKH(LEVEL)/PREF)**KAPPA               SETCONA1.230    
                                                                           SETCONA1.231    
        ELSE                                                               SETCONA1.232    
          BKH_TO_THE_KAPPA(LEVEL) = 0.0                                    SETCONA1.233    
                                                                           SETCONA1.234    
        END IF                                                             SETCONA1.235    
      END DO                                                               SETCONA1.236    
                                                                           SETCONA1.237    
C Calculate P_EXNER                                                        SETCONA1.238    
      DO LEVEL = 1, P_LEVELS + 1                                           SETCONA1.239    
        DO I = 1, P_FIELD                                                  SETCONA1.240    
          P_EXNER(I,LEVEL) = ((AKH(LEVEL) + BKH(LEVEL) * PSTAR(I))         SETCONA1.241    
     &                       / PREF)**KAPPA                                SETCONA1.242    
                                                                           SETCONA1.243    
        END DO                                                             SETCONA1.244    
      END DO                                                               SETCONA1.245    
                                                                           SETCONA1.246    
CL 2. Calculate constants at u grid points                                 SETCONA1.247    
CL    cos, sec, tan (u_latitude). Coriolis terms for GLOBAL model          SETCONA1.248    
      POLE_LAT  = PHI0    * PI_OVER_180                                    SETCONA1.249    
      POLE_LONG = LAMBDA0 * PI_OVER_180                                    SETCONA1.250    
                                                                           SETCONA1.251    
*IF DEF,MPP                                                                GPB6F405.3      
      WRITE(6,*) 'Decomposition information for PE ',mype                  GPB6F405.4      
*IF DEF,GLOBAL                                                             GPB6F405.5      
      WRITE(6,*) 'Running in GLOBAL configuration'                         GPB6F405.6      
*ELSE                                                                      GPB6F405.7      
      WRITE(6,*) 'Running in LAM configuration'                            GPB6F405.8      
*ENDIF                                                                     GPB6F405.9      
      WRITE(6,*) 'Overall decomposition shape is (EW x NS) ',              GPB6F405.10     
     &           nproc_x, ' x ',nproc_y                                    GPB6F405.11     
      WRITE(6,*) 'Domain size (inc. halos) (Columns x Rows) ',             GPB6F405.12     
     &           ROW_LENGTH,' x ',P_ROWS                                   GPB6F405.13     
      WRITE(6,*) 'Halo size (EW Halos , NS Halos) ',Offx, ' , ', Offy      GPB6F405.14     
      WRITE(6,*) 'Position in the Logical Processor Grid is (x,y) ',       GPB6F405.15     
     &           gridpos(1), ',', gridpos(2)                               GPB6F405.16     
      WRITE(6,*) '(NB LPG co-ordinates start at zero)'                     GPB6F405.17     
      WRITE(6,*) 'Grid Co-ords of top-left corner are (x,y) ',             GPB6F405.18     
     &           datastart(1), ',', datastart(2)                           GPB6F405.19     
      WRITE(6,*) 'Location of top-left corner of T grid ',                 GPB6F405.20     
     &           '(longitude,latitude) ',                                  GPB6F405.21     
     &           (FIRST_LONG + EW_SPACE * (datastart(1) -1.0)),',',        GPB6F405.22     
     &           (FIRST_LAT - NS_SPACE * (datastart(2) -1.0))              GPB6F405.23     
*IF -DEF,GLOBAL                                                            GPB6F405.24     
      WRITE(6,*) '(NB Co-ordinates are for model-grid which is rotated '   GPB6F405.25     
      WRITE(6,*) ' for LAM models. See UMDP S1.)'                          GPB6F405.26     
*ENDIF                                                                     GPB6F405.27     
*ENDIF                                                                     GPB6F405.28     
      DO ROW = 1, U_ROWS                                                   SETCONA1.252    
        DO POINT = 1, ROW_LENGTH                                           SETCONA1.253    
          I = POINT + (ROW - 1) * ROW_LENGTH                               SETCONA1.254    
*IF -DEF,MPP                                                               GPB0F305.339    
          LATITUDE(I)  = (FIRST_LAT  - NS_SPACE * (ROW   - 0.5))           SETCONA1.255    
          LONGITUDE(I) = (FIRST_LONG + EW_SPACE * (POINT - 0.5))           SETCONA1.256    
*ELSE                                                                      GPB0F305.340    
!         take account of our offset in the global data                    GPB0F305.341    
          LATITUDE(I)  = (FIRST_LAT  - NS_SPACE *                          GPB0F305.342    
     &                   ((ROW + datastart(2) - Offy - 1) - 0.5))          GPB0F305.343    
          LONGITUDE(I) = (FIRST_LONG + EW_SPACE *                          GPB0F305.344    
     &                   ((POINT + datastart(1)- Offx - 1) - 0.5))         GPB0F305.345    
*ENDIF                                                                     GPB0F305.346    
                                                                           SETCONA1.257    
                                                                           SETCONA1.258    
          LATITUDE(I)       = LATITUDE(I)  * PI_OVER_180                   SETCONA1.259    
          LONGITUDE(I)      = LONGITUDE(I) * PI_OVER_180                   SETCONA1.260    
          COS_U_LATITUDE(I) = COS(LATITUDE(I))                             SETCONA1.261    
          SEC_U_LATITUDE(I) = 1.0 / COS_U_LATITUDE(I)                      SETCONA1.262    
      SIN_U_LATITUDE(I)= SIN(LATITUDE(I))                                  GJT1F304.21     
          TAN_U_LATITUDE(I) = TAN(LATITUDE(I))                             SETCONA1.263    
                                                                           SETCONA1.264    
*IF DEF,GLOBAL                                                             SETCONA1.265    
                                                                           SETCONA1.266    
        F1(I)=0.0                                                          SETCONA1.267    
           F2(I) = 2.0 * OMEGA * COS_U_LATITUDE(I)                         SETCONA1.268    
           F3(I) = 2.0 * OMEGA * SIN(LATITUDE(I))                          SETCONA1.269    
*ELSE                                                                      SETCONA1.270    
                                                                           SETCONA1.271    
           F1(I) = -2.0 * OMEGA * SIN(LATITUDE(I))  * COS(POLE_LAT)        SETCONA1.272    
           F2(I) =  2.0 * OMEGA * (COS(LATITUDE(I)) * SIN(POLE_LAT) -      SETCONA1.273    
     &            SIN(LATITUDE(I)) * COS(LONGITUDE(I)) * COS(POLE_LAT))    SETCONA1.274    
           F3(I) =  2.0 * OMEGA * (SIN(LATITUDE(I)) * SIN(POLE_LAT) +      SETCONA1.275    
     &            COS(LATITUDE(I)) * COS(LONGITUDE(I)) * COS(POLE_LAT))    SETCONA1.276    
                                                                           SETCONA1.277    
*ENDIF                                                                     SETCONA1.278    
                                                                           SETCONA1.279    
        END DO                                                             SETCONA1.280    
      END DO                                                               SETCONA1.281    
                                                                           SETCONA1.282    
                                                                           SETCONA1.283    
CL                                                                         SETCONA1.284    
CL 3. Calculate constants on p grid points                                 SETCONA1.285    
CL                                                                         SETCONA1.286    
C calculate cos, sec (p_latitude) longitudes for global model              SETCONA1.287    
      DO ROW = 1, P_ROWS                                                   SETCONA1.288    
        DO POINT = 1, ROW_LENGTH                                           SETCONA1.289    
          I = POINT + (ROW - 1) * ROW_LENGTH                               SETCONA1.290    
*IF -DEF,MPP                                                               GPB0F305.347    
          LATITUDE(I)  = (FIRST_LAT  - NS_SPACE * (ROW   - 1.0))           SETCONA1.291    
          LONGITUDE(I) = (FIRST_LONG + EW_SPACE * (POINT - 1.0))           SETCONA1.292    
*ELSE                                                                      GPB0F305.348    
!         take account of our offset in the global data                    GPB0F305.349    
          LATITUDE(I)  = (FIRST_LAT  - NS_SPACE *                          GPB0F305.350    
     &                   ((ROW + datastart(2) - Offy - 1) - 1.0))          GPB0F305.351    
          LONGITUDE(I) = (FIRST_LONG + EW_SPACE *                          GPB0F305.352    
     &                   ((POINT + datastart(1)- Offx - 1) - 1.0))         GPB0F305.353    
*ENDIF                                                                     GPB0F305.354    
                                                                           SETCONA1.293    
        END DO                                                             SETCONA1.294    
      END DO                                                               SETCONA1.295    
*IF DEF,MPP                                                                GDS1F402.402    
      lat_n=LATITUDE(1)                                                    GDS1F402.403    
      lat_s=LATITUDE(P_ROWS*ROW_LENGTH)                                    GDS1F402.404    
                                                                           GDS1F402.405    
      long_w=LONGITUDE(1)                                                  GDS1F402.406    
      long_w_model=long_w                                                  GDS1F402.407    
      long_e=LONGITUDE(P_ROWS*ROW_LENGTH)                                  GDS1F402.408    
      long_e_model=long_e                                                  GDS1F402.409    
                                                                           GDS1F402.410    
      if(long_w.gt.180.0)long_w=long_w-360.0                               GDS1F402.411    
      if(long_e.gt.180.0)long_e=long_e-360.0                               GDS1F402.412    
*IF -DEF,GLOBAL                                                            GDS1F402.413    
      if(long_w_model.ge.360.0)long_w_model=long_w_model-360.              GDS1F402.414    
      if(long_e_model.ge.360.0)long_e_model=long_e_model-360.              GDS1F402.415    
*ENDIF                                                                     GDS1F402.416    
*IF DEF,GLOBAL                                                             GSM5F405.2      
! Without SWAPBOUNDS, west-most halo pt. is -ve equivalent of east-most    GSM5F405.3      
! non-halo pt. (eg -3 deg and +357 deg) causing differences in calcs       GSM5F405.4      
! of halo points.                                                          GSM5F405.5      
      CALL SWAPBOUNDS(LONGITUDE,ROW_LENGTH,P_ROWS,1,0,1)                   GSM5F405.6      
*ENDIF                                                                     GSM5F405.7      
                                                                           GSM5F405.8      
*ENDIF                                                                     GDS1F402.417    
                                                                           SETCONA1.296    
*IF -DEF,GLOBAL                                                            SETCONA1.297    
                                                                           SETCONA1.298    
CL calculate true longitude for limited area model using sub'tine EQTOLL   SETCONA1.299    
      CALL EQTOLL(LATITUDE, LONGITUDE, TRUE_LATITUDE, TRUE_LONGITUDE,      SETCONA1.300    
     &                                          PHI0, LAMBDA0, P_FIELD)    SETCONA1.301    
                                                                           SETCONA1.302    
*ENDIF                                                                     SETCONA1.303    
                                                                           SETCONA1.304    
      DO I = 1, P_FIELD                                                    SETCONA1.305    
        LATITUDE(I)       = LATITUDE(I)  * PI_OVER_180                     SETCONA1.306    
        LONGITUDE(I)      = LONGITUDE(I) * PI_OVER_180                     SETCONA1.307    
        COS_P_LATITUDE(I) = COS(LATITUDE(I))                               SETCONA1.308    
        SEC_P_LATITUDE(I) = 1.0 / COS_P_LATITUDE(I)                        SETCONA1.309    
                                                                           SETCONA1.310    
*IF DEF,GLOBAL                                                             SETCONA1.311    
        TRUE_LONGITUDE(I) = LONGITUDE(I)                                   SETCONA1.312    
                                                                           SETCONA1.313    
        F3_P(I) = 2.0 * OMEGA * SIN(LATITUDE(I))                           SETCONA1.314    
                                                                           SETCONA1.315    
*ELSE                                                                      SETCONA1.316    
        TRUE_LONGITUDE(I) = TRUE_LONGITUDE(I) * PI_OVER_180                SETCONA1.317    
                                                                           SETCONA1.318    
        F3_P(I) = 2.0 * OMEGA *                                            SETCONA1.319    
     &           ( SIN(LATITUDE(I)) * SIN(POLE_LAT)                        SETCONA1.320    
     &           + COS(LATITUDE(I)) * COS(LONGITUDE(I)) * COS(POLE_LAT)    SETCONA1.321    
     &           )                                                         SETCONA1.322    
                                                                           SETCONA1.323    
*ENDIF                                                                     SETCONA1.324    
                                                                           SETCONA1.325    
      END DO                                                               SETCONA1.326    
                                                                           SETCONA1.327    
*IF DEF,GLOBAL                                                             SETCONA1.328    
C Values of COS_P_LATITUDE and SEC_P_LATITUDE at the polar points          ACH1F400.3      
C are used for area weighting and should reflect area of polar point.      ACH1F400.4      
C Geometrically this is 0.125 area of equatorward-lying neighbours.        ACH1F400.5      
C (But note that HADCM2 assumes 0.25 for consistency with old code).       ATJ0F403.14     
*IF -DEF,MPP                                                               GPB0F305.355    
      DO I = 1, ROW_LENGTH                                                 SETCONA1.330    
                                                                           ATJ0F403.15     
        IF (L_OLD_PWTS) THEN                                               ATJ0F403.16     
          COS_P_LATITUDE(I) = 0.25 * COS_P_LATITUDE(I + ROW_LENGTH)        ATJ0F403.17     
          SEC_P_LATITUDE(I) = 4.0  * SEC_P_LATITUDE(I + ROW_LENGTH)        ATJ0F403.18     
          COS_P_LATITUDE(P_FIELD + I - ROW_LENGTH) =                       ATJ0F403.19     
     &             0.25 * COS_P_LATITUDE(P_FIELD + I - 2 * ROW_LENGTH)     ATJ0F403.20     
          SEC_P_LATITUDE(P_FIELD + I - ROW_LENGTH) =                       ATJ0F403.21     
     &              4.0 * SEC_P_LATITUDE(P_FIELD + I - 2 * ROW_LENGTH)     ATJ0F403.22     
        ELSE                                                               ATJ0F403.23     
                                                                           ATJ0F403.24     
        COS_P_LATITUDE(I) = 0.125 * COS_P_LATITUDE(I + ROW_LENGTH)         ACH1F400.6      
        SEC_P_LATITUDE(I) = 8.0  * SEC_P_LATITUDE(I + ROW_LENGTH)          ACH1F400.7      
        COS_P_LATITUDE(P_FIELD + I - ROW_LENGTH) =                         SETCONA1.333    
     &             0.125 * COS_P_LATITUDE(P_FIELD + I - 2 * ROW_LENGTH)    ACH1F400.8      
        SEC_P_LATITUDE(P_FIELD + I - ROW_LENGTH) =                         SETCONA1.335    
     &               8.0 * SEC_P_LATITUDE(P_FIELD + I - 2 * ROW_LENGTH)    ACH1F400.9      
                                                                           ATJ0F403.25     
        ENDIF                                                              ATJ0F403.26     
                                                                           SETCONA1.337    
      END DO                                                               SETCONA1.338    
                                                                           SETCONA1.339    
CL set up Fourier filtering array using subroutine SETFILT                 SETCONA1.340    
      CALL SETFILT(TRIGS,IFAX,ROW_LENGTH,P_ROWS,TWO_D_GRID_CORRECTION,     GPB0F401.556    
     &             P_FIELD,COS_P_LATITUDE)                                 GPB0F401.557    
*ELSE                                                                      GPB0F305.356    
      IF (attop) THEN                                                      GPB0F305.357    
        DO I = 1+Offy*ROW_LENGTH, (Offy+1)*ROW_LENGTH                      GPB0F305.358    
                                                                           ATJ0F403.27     
          IF (L_OLD_PWTS) THEN                                             ATJ0F403.28     
            COS_P_LATITUDE(I) = 0.25 * COS_P_LATITUDE(I + ROW_LENGTH)      ATJ0F403.29     
            SEC_P_LATITUDE(I) = 4.0  * SEC_P_LATITUDE(I + ROW_LENGTH)      ATJ0F403.30     
          ELSE                                                             ATJ0F403.31     
                                                                           ATJ0F403.32     
          COS_P_LATITUDE(I) = 0.125 * COS_P_LATITUDE(I + ROW_LENGTH)       GPB0F401.558    
          SEC_P_LATITUDE(I) = 8.0  * SEC_P_LATITUDE(I + ROW_LENGTH)        GPB0F401.559    
                                                                           ATJ0F403.33     
          ENDIF                                                            ATJ0F403.34     
                                                                           ATJ0F403.35     
        ENDDO                                                              GPB0F305.361    
      ENDIF                                                                GPB0F305.362    
      IF (atbase) THEN                                                     GPB0F305.363    
        DO I = P_FIELD-((Offy+1)*ROW_LENGTH)+1,                            GPB0F305.364    
     &           P_FIELD-(Offy*ROW_LENGTH)+1                               GPB0F305.365    
                                                                           ATJ0F403.36     
          IF (L_OLD_PWTS) THEN                                             ATJ0F403.37     
            COS_P_LATITUDE(I) = 0.25 * COS_P_LATITUDE(I - ROW_LENGTH)      ATJ0F403.38     
            SEC_P_LATITUDE(I) = 4.0  * SEC_P_LATITUDE(I - ROW_LENGTH)      ATJ0F403.39     
          ELSE                                                             ATJ0F403.40     
                                                                           ATJ0F403.41     
          COS_P_LATITUDE(I) = 0.125 * COS_P_LATITUDE(I - ROW_LENGTH)       GPB0F401.560    
          SEC_P_LATITUDE(I) = 8.0  * SEC_P_LATITUDE(I - ROW_LENGTH)        GPB0F401.561    
                                                                           ATJ0F403.42     
          ENDIF                                                            ATJ0F403.43     
                                                                           ATJ0F403.44     
        ENDDO                                                              GPB0F305.368    
      ENDIF                                                                GPB0F305.369    
                                                                           GPB0F305.370    
! set up Fourier filtering array using subroutine SETFILT                  GPB0F401.562    
      CALL SETFILT(TRIGS,IFAX,glsize(1),P_ROWS,TWO_D_GRID_CORRECTION,      GPB0F401.563    
     &             P_FIELD,COS_P_LATITUDE)                                 GPB0F401.564    
*ENDIF                                                                     GPB0F305.375    
                                                                           SETCONA1.343    
*ENDIF                                                                     SETCONA1.344    
                                                                           SETCONA1.345    
CL                                                                         SETCONA1.346    
CL 4. Calculate constants depending on longitude only                      SETCONA1.347    
CL                                                                         SETCONA1.348    
      DO I = 1, ROW_LENGTH                                                 SETCONA1.349    
        SIN_LONGITUDE(I) = SIN(LONGITUDE(I))                               SETCONA1.350    
        COS_LONGITUDE(I) = COS(LONGITUDE(I))                               SETCONA1.351    
                                                                           SETCONA1.352    
      END DO                                                               SETCONA1.353    
                                                                           SETCONA1.354    
CL Set list of land points for indexing. Initialise indices to MDIs.       ARR0F403.34     
C                                                                          ARR0F403.35     
       DO I=1,LAND_FIELD                                                   ARR0F403.36     
          LAND_LIST(I) = IMDI                                              ARR0F403.37     
       ENDDO                                                               ARR0F403.38     
                                                                           ARR0F403.39     
       I=0                                                                 GSS9F402.157    
       DO II=1,P_FIELD                                                     GSS9F402.158    
         IF(LAND(II))THEN                                                  GSS9F402.159    
           I = I + 1                                                       GSS9F402.160    
           LAND_LIST(I) = II                                               GSS9F402.161    
         END IF                                                            GSS9F402.162    
       END DO                                                              GSS9F402.163    
C                                                                          GSS9F402.164    
       IF (I .NE. LAND_FIELD) THEN                                         GPB0F401.6      
         ICODE    = 3                                                      GPB0F401.7      
         CMESSAGE = 'SETCONA: Wrong number of land points'                 GPB0F401.8      
         WRITE(6,*) 'I=',I,'LAND_FIELD=',LAND_FIELD                        GIE0F403.619    
         GOTO 999                                                          GPB0F401.10     
       ENDIF                                                               GPB0F401.11     
                                                                           SETCONA1.355    
CL 5 Set additional soil and vegitation fields from those held in dummy    SETCONA1.356    
C SOILB parameter                                                          SETCONA1.357    
       DO I = 1, LAND_FIELD                                                SETCONA1.358    
         IF (C_EAG(I) .LT. 0.0) THEN                                       SETCONA1.359    
           ICODE    = 1                                                    SETCONA1.360    
           CMESSAGE = 'SETCONA: -ve numberas exponential in SOILB'         SETCONA1.361    
                                                                           SETCONA1.362    
           IF (C_EAG(I) .EQ. RMDI) THEN                                    SETCONA1.363    
             ICODE    = 2                                                  SETCONA1.364    
             CMESSAGE = 'SETCONA: missing data as exponential in SOILB'    SETCONA1.365    
             GOTO 999                                                      SETCONA1.366    
                                                                           SETCONA1.367    
           END IF                                                          SETCONA1.368    
           GOTO 999                                                        SETCONA1.369    
                                                                           SETCONA1.370    
         END IF                                                            SETCONA1.371    
         IF (SATCON(I).GT.0.0) THEN                                        AJS1F401.153    
           SOILB(I) = SATCON(I) / ((SMVCSAT(I) - SMVCWT(I))**C_EAG(I))     AJS1F401.154    
         ELSE                                                              AJS1F401.155    
           SOILB(I) = 0.0                                                  AJS1F401.156    
         END IF                                                            AJS1F401.157    
                                                                           SETCONA1.373    
       END DO                                                              SETCONA1.374    
                                                                           SETCONA1.375    
                                                                           SETCONA1.386    
CL Convert from conserved thermodynamic variables to potential             SETCONA1.387    
CL temperature,specific humidity, cloud water,and cloud ice.               SETCONA1.388    
      DO LEVEL = 1, Q_LEVELS                                               SETCONA1.389    
        DO I = 1, P_FIELD                                                  SETCONA1.390    
          PU = PSTAR(I) * BKH(LEVEL+1) + AKH(LEVEL+1)                      SETCONA1.391    
          PL = PSTAR(I) * BKH(LEVEL)   + AKH(LEVEL)                        SETCONA1.392    
          THETA(I,LEVEL) = THETA(I,LEVEL) *                                SETCONA1.393    
     &       P_EXNER_C(P_EXNER(I,LEVEL+1),P_EXNER(I,LEVEL),PU,PL,KAPPA)    SETCONA1.394    
                                                                           SETCONA1.395    
        END DO                                                             SETCONA1.396    
      END DO                                                               SETCONA1.397    
                                                                           SETCONA1.398    
!                                                                          ADM2F404.240    
!                                                                          ASK1F405.56     
      IF (L_RHCPT) THEN                                                    ASK1F405.57     
!  Set data field with care - do not wish to use first row of P_FIELD at   ASK1F405.58     
!  N.Pole, nor last row at S.Pole.                                         ASK1F405.59     
        FIRST_POINT = FIRST_VALID_PT                                       ASK1F405.60     
        LAST_POINT  = LAST_P_VALID_PT                                      ASK1F405.61     
        POINTS      = LAST_POINT-FIRST_POINT+1                             ASK1F405.62     
        JS          = FIRST_POINT-1                                        ASK1F405.63     
!                                                                          ASK1F405.64     
!  Calculate critical relative humidity for all grid points                ASK1F405.65     
        CALL RHCRIT_CALC(AK,BK,AKH,BKH,PSTAR(FIRST_POINT),                 ASK1F405.66     
     &             RHCPT(FIRST_POINT,1),Q_LEVELS,POINTS,P_FIELD,           ASK1F405.67     
     &             THETA(FIRST_POINT,1),Q(FIRST_POINT,1),                  ASK1F405.68     
     &             QCF(FIRST_POINT,1),ROW_LENGTH,LAND(FIRST_POINT),        ASK1F405.69     
     &             ICE_FRAC(FIRST_POINT),BL_LEVELS)                        ASK1F405.70     
!                                                                          ASK1F405.71     
*IF DEF,MPP                                                                ASK1F405.72     
        CALL SWAPBOUNDS(RHCPT,ROW_LENGTH,P_ROWS,EW_Halo,NS_Halo,           ASK1F405.73     
     &                  Q_LEVELS)                                          ASK1F405.74     
*ENDIF                                                                     ASK1F405.75     
!                                                                          ASK1F405.76     
      ENDIF ! L_RHCPT                                                      ASK1F405.77     
!                                                                          ASK1F405.78     
      CALL GLUE_CLD(AK, BK, PSTAR, RHCRIT, Q_LEVELS, RHCPT,                ASK1F405.79     
     &     P_FIELD, P_FIELD, THETA, CLOUD_FRACTION, Q, QCF, QCL,           AYY2F400.51     
     &     LS_GRID_QC, LS_BS, ICODE)                                       AYY2F400.52     
                                                                           SETCONA1.401    
      IF (ICODE .GT. 0)THEN                                                SETCONA1.402    
        CMESSAGE = 'SETCONA : Error in LS_CLD'                             SETCONA1.403    
        GOTO 999                                                           SETCONA1.404    
                                                                           SETCONA1.405    
      END IF                                                               SETCONA1.406    
                                                                           SETCONA1.407    
      DO LEVEL = 1, Q_LEVELS                                               SETCONA1.408    
        DO I = 1, P_FIELD                                                  SETCONA1.409    
          PU = PSTAR(I) * BKH(LEVEL+1) + AKH(LEVEL+1)                      SETCONA1.410    
          PL = PSTAR(I) * BKH(LEVEL)   + AKH(LEVEL)                        SETCONA1.411    
          THETA(I,LEVEL) = THETA(I,LEVEL) /                                SETCONA1.412    
     &       P_EXNER_C(P_EXNER(I,LEVEL+1),P_EXNER(I,LEVEL),PU,PL,KAPPA)    SETCONA1.413    
                                                                           SETCONA1.414    
        END DO                                                             SETCONA1.415    
      END DO                                                               SETCONA1.416    
CL                                                                         SETCONA1.417    
CL 6  Set up cloud type boundaries for low/medium/high                     SETCONA1.418    
CL                                                                         SETCONA1.419    
       IF (NUM_CLOUD_TYPES .GT. 3) THEN                                    SETCONA1.420    
         ICODE    = 1                                                      SETCONA1.421    
         CMESSAGE = 'SETCONA: Parameter NUM_CLOUD_TYPES exceeds 3'         SETCONA1.422    
         WRITE(6,*) 'NUM_CLOUD_TYPES=',NUM_CLOUD_TYPES                     GIE0F403.620    
         GOTO 999                                                          SETCONA1.424    
                                                                           SETCONA1.425    
       END IF                                                              SETCONA1.426    
                                                                           SETCONA1.427    
C First calculate ETA                                                      SETCONA1.428    
      DO II = 1, P_LEVELS                                                  SETCONA1.429    
        ETA(II) = AK(II) / PREF + BK(II)                                   SETCONA1.430    
                                                                           SETCONA1.431    
      END DO                                                               SETCONA1.432    
                                                                           SETCONA1.433    
C  The cloud amount is found by finding the max cloud cover over           SETCONA1.434    
C  a set of levels. The boundaries of these types are defined by           SETCONA1.435    
C  their ETA values as specified in ETA_SPLIT.The next piece of code       SETCONA1.436    
C  finds the levels (layer mid points) which fall between the              SETCONA1.437    
C  specfied ETA values.Thus the layers contributing to the low cloud       SETCONA1.438    
C  have ETA values between ETA_SPLIT(1) and ETA_SPLIT(2)                   SETCONA1.439    
                                                                           SETCONA1.440    
      DO KK = 1, NUM_CLOUD_TYPES + 1                                       SETCONA1.441    
        LEVEL = 1                                                          SETCONA1.442    
                                                                           SETCONA1.443    
        DO WHILE ((ETA(LEVEL) .GE. ETA_SPLIT(KK)) .AND.                    SETCONA1.444    
     &                                           (LEVEL .LE. P_LEVELS))    SETCONA1.445    
          LEVEL = LEVEL + 1                                                SETCONA1.446    
                                                                           SETCONA1.447    
        END DO                                                             SETCONA1.448    
                                                                           SETCONA1.449    
        IF (LEVEL .GT. P_LEVELS) THEN                                      SETCONA1.450    
          ICODE    = 1                                                     SETCONA1.451    
          CMESSAGE ='SETCONA:Error in locating levels for cloud lyrs'      SETCONA1.452    
          GOTO 999                                                         SETCONA1.453    
                                                                           SETCONA1.454    
        END IF                                                             SETCONA1.455    
        CLOUD_BOUND(KK) = LEVEL                                            SETCONA1.456    
                                                                           SETCONA1.457    
      END DO                                                               SETCONA1.458    
                                                                           SETCONA1.459    
      LOW_BOT_LEVEL  = CLOUD_BOUND(1)                                      SETCONA1.460    
      LOW_TOP_LEVEL  = CLOUD_BOUND(2) - 1                                  SETCONA1.461    
      MED_BOT_LEVEL  = CLOUD_BOUND(2)                                      SETCONA1.462    
      MED_TOP_LEVEL  = CLOUD_BOUND(3) - 1                                  SETCONA1.463    
      HIGH_BOT_LEVEL = CLOUD_BOUND(3)                                      SETCONA1.464    
      HIGH_TOP_LEVEL = CLOUD_BOUND(4) - 1                                  SETCONA1.465    
                                                                           SETCONA1.466    
      IF (LOW_TOP_LEVEL .GT. CLOUD_LEVELS) THEN                            SETCONA1.467    
        ICODE    = 1                                                       SETCONA1.468    
        CMESSAGE = 'SETCONA: No of cloud levels less than Top of Low'      SETCONA1.469    
        GOTO 999                                                           SETCONA1.470    
                                                                           SETCONA1.471    
      END IF                                                               SETCONA1.472    
                                                                           SETCONA1.473    
      IF (MED_TOP_LEVEL.GT.CLOUD_LEVELS) THEN                              SETCONA1.474    
        ICODE    = 1                                                       SETCONA1.475    
        CMESSAGE = 'SETCONA:  No of cloud levels less than Top of Med'     SETCONA1.476    
        GOTO 999                                                           SETCONA1.477    
                                                                           SETCONA1.478    
      END IF                                                               SETCONA1.479    
                                                                           SETCONA1.480    
      IF (HIGH_TOP_LEVEL .GT. CLOUD_LEVELS) THEN                           SETCONA1.481    
        ICODE    = 1                                                       SETCONA1.482    
        CMESSAGE = 'SETCONA: No of cloud levels less than Top of High'     SETCONA1.483    
        GOTO 999                                                           SETCONA1.484    
                                                                           SETCONA1.485    
      END IF                                                               SETCONA1.486    
                                                                           SETCONA1.487    
CL 7. Calculate ETA_HALF inverse matrix                                    SETCONA1.488    
      DO LEVEL = 1, P_LEVELS + 1                                           SETCONA1.489    
        ETA_HALF(LEVEL) = AKH(LEVEL) / PREF + BKH(LEVEL)                   SETCONA1.490    
                                                                           SETCONA1.491    
      END DO                                                               SETCONA1.492    
      N21 = (MATRIX_POLY_ORDER + 1) / 2                                    SETCONA1.493    
                                                                           SETCONA1.494    
      DO LEVEL = N21, P_LEVELS - N21 + 1                                   SETCONA1.495    
        DO POINT = 1, MATRIX_POLY_ORDER                                    SETCONA1.496    
         ! NB ROW used as a work variable                                  SETCONA1.497    
          ROW = LE VEL - N21 + POINT                                       SETCONA1.498    
          DO I = 1, MATRIX_POLY_ORDER                                      SETCONA1.499    
            ETA_MATRIX(I,POINT,LEVEL)=(ETA_HALF(ROW)**I-ETA_HALF(ROW+1)    SETCONA1.500    
     &                         **I)/((ETA_HALF(ROW)-ETA_HALF(ROW+1))*I)    SETCONA1.501    
                                                                           SETCONA1.502    
          END DO                                                           SETCONA1.503    
        END DO                                                             SETCONA1.504    
        CALL MATINV(ETA_MATRIX(1,1,LEVEL), ETA_MATRIX_INV(1,1,LEVEL),      SETCONA1.505    
     &                                               MATRIX_POLY_ORDER)    SETCONA1.506    
                                                                           SETCONA1.507    
      END DO                                                               SETCONA1.508    
                                                                           SETCONA1.509    
CL 8. Calculate LEVNO_PMSL_CALC for PMSL reduction calculations.           GDR3F404.15     
                                                                           GDR3F404.16     
      DO LEVEL=1,P_LEVELS                                                  GDR3F404.17     
        ETA_LEV=AK(LEVEL)/PREF + BK(LEVEL)                                 GDR3F404.18     
        IF (ETA_LEV.LT.ETA_PMSL) THEN                                      GDR3F404.19     
          LEVNO_PMSL_CALC=LEVEL                                            GDR3F404.20     
          WRITE (6,*)                                                      GDR3F404.21     
     &    ' SETCONA : LEVEL FOR PMSL REDUCTION CALCULATION = ',            GDR3F404.22     
     &    LEVNO_PMSL_CALC                                                  GDR3F404.23     
          GO TO 555                                                        GDR3F404.24     
        ENDIF                                                              GDR3F404.25     
      ENDDO                                                                GDR3F404.26     
 555  CONTINUE                                                             GDR3F404.27     
                                                                           GDR3F404.28     
 999  RETURN                                                               SETCONA1.510    
      END                                                                  SETCONA1.511    
                                                                           SETCONA1.512    
*ENDIF                                                                     SETCONA1.513