*IF DEF,A15_1A                                                             CAT1A.2      
C ******************************COPYRIGHT******************************    GTS2F400.775    
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.776    
C                                                                          GTS2F400.777    
C Use, duplication or disclosure of this code is subject to the            GTS2F400.778    
C restrictions as set forth in the contract.                               GTS2F400.779    
C                                                                          GTS2F400.780    
C                Meteorological Office                                     GTS2F400.781    
C                London Road                                               GTS2F400.782    
C                BRACKNELL                                                 GTS2F400.783    
C                Berkshire UK                                              GTS2F400.784    
C                RG12 2SZ                                                  GTS2F400.785    
C                                                                          GTS2F400.786    
C If no contract has been raised with this copy of the code, the use,      GTS2F400.787    
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.788    
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.789    
C Modelling at the above address.                                          GTS2F400.790    
C ******************************COPYRIGHT******************************    GTS2F400.791    
C                                                                          GTS2F400.792    
CLL  SUBROUTINE CAT-----------------------------------------------------   CAT1A.3      
CLL                                                                        CAT1A.4      
CLL  PURPOSE:   Calculates clear air turbulence                            CAT1A.5      
CLL  Tested under compiler CFT77                                           CAT1A.6      
CLL  Tested under OS version 5.1                                           CAT1A.7      
CLL                                                                        CAT1A.8      
CLL  Author J.T.Heming            Date: 22/02/91                           CAT1A.9      
CLL D.Forrester <- programmer of some or all of previous code or changes   CAT1A.10     
CLL                                                                        CAT1A.11     
CLL  Model            Modification history from model version 3.0:         CAT1A.12     
CLL version  Date                                                          CAT1A.13     
CLL   4.2    Oct. 96  T3E migration: *DEF CRAY removed                     GSS4F402.40     
CLL                                   S.J.Swarbrick                        GSS4F402.41     
!LL   4.5    Apr. 98  Add start-end arguments to V_INT calls.              GSM1F405.569    
!LL                   Removed unnecessary SWAPBOUNDS calls.                GSM1F405.570    
!LL                   WARNING: CAT does not initialise NS MPP halos of     GSM1F405.571    
!LL                   CAT_PROB. S.D.Mullerworth                            GSM1F405.572    
CLL   4.5   05/02/98  Alter CAT probability calculation.                   GDR8F405.58     
CLL                    Clare Bysouth and Tim Westmacott.                   GDR8F405.59     
CLL                                                                        CAT1A.14     
CLL  Logical component number: D413                                        CAT1A.15     
CLL                                                                        CAT1A.16     
CLL  Project task:                                                         CAT1A.17     
CLL                                                                        CAT1A.18     
CLL  Programming standard: U M DOC  Paper NO. 4,                           CAT1A.19     
CLL                                                                        CAT1A.20     
CLL  External documentation:                                               CAT1A.21     
CLL                                                                        CAT1A.22     
CLLEND------------------------------------------------------------------   CAT1A.23     
C                                                                          CAT1A.24     
C*L  ARGUMENTS:---------------------------------------------------------   CAT1A.25     

      SUBROUTINE CAT(                                                       3,13CAT1A.26     
*CALL ARGFLDPT                                                             GSM3F403.333    
*IF DEF,MPP                                                                GSM3F403.334    
! MPP For relating local array to global array                             GSM1F405.573    
     &      GLSIZE,                                                        GSM3F403.336    
*ENDIF                                                                     GSM3F403.337    
C data in                                                                  CAT1A.27     
     & U,V,PUV,PSTAR,PRESS_REQD,MAX_WIND_P,                                CAT1A.28     
C data out                                                                 CAT1A.29     
     & CAT_PROB,                                                           CAT1A.30     
C constants in                                                             CAT1A.31     
     & P_FIELD,U_FIELD,P_LEVELS,ROW_LENGTH,P_ROWS,SEC_U_LATITUDE,          CAT1A.32     
     & AK,BK,EW_SPACE,NS_SPACE)                                            CAT1A.33     
C*L                                                                        CAT1A.34     
C-----------------------------------------------------------------------   CAT1A.35     
      IMPLICIT NONE                                                        CAT1A.36     
C-----------------------------------------------------------------------   CAT1A.37     
      EXTERNAL  V_INT,P_TO_UV,H_GRAD,SPLINE,EVAL_SP                        CAT1A.39     
C*----------------------------------------------------------------------   CAT1A.40     
      INTEGER                                                              CAT1A.41     
     * P_FIELD                       ! IN  NO OF POINTS ON P/T GRID        CAT1A.42     
     *,U_FIELD                       ! IN  NO OF POINTS ON U/V GRID        CAT1A.43     
     *,P_LEVELS                      ! IN  NO OF MODEL LEVELS              CAT1A.44     
     *,P_ROWS                        ! IN  NO OF ROWS ON P/T GRID          CAT1A.45     
     *,ROW_LENGTH                    ! IN  NO OF COLUMNS                   CAT1A.46     
     &,GLSIZE                        ! IN  GLOBAL NO OF ROWS               GSM3F403.338    
                                                                           GSM3F403.339    
C-----------------------------------------------------------------------   CAT1A.47     
      REAL                                                                 CAT1A.48     
     * U(U_FIELD,P_LEVELS)           ! IN  U FIELD   AT FULL LEVELS        CAT1A.49     
     *,V(U_FIELD,P_LEVELS)           ! IN  V FIELD   AT FULL LEVELS        CAT1A.50     
     *,PRESS_REQD(U_FIELD)           ! IN/OUT  PRESSURE AT WHICH TO        GSM1F405.574    
     &                               ! CALCULATE CAT (modified by          GSM1F405.575    
     &                               ! routine)                            GSM1F405.576    
     *,MAX_WIND_P(U_FIELD)           ! IN PRESSURE OF MAXIMUM WIND         CAT1A.53     
     *,CAT_PROB(U_FIELD)             ! OUT CAT PROBABILITY                 CAT1A.54     
     *                               !                                     CAT1A.55     
     *,PUV(U_FIELD,P_LEVELS)         ! IN  PRESS FIELD AT U/V POINTS       CAT1A.56     
     *,PSTAR(P_FIELD)                ! IN  SURFACE PRESSURE FIELD          CAT1A.57     
     *,SEC_U_LATITUDE(U_FIELD)       ! IN  1/COS(LAT) AT U/V POINTS        CAT1A.58     
     *,AK(P_LEVELS)                  ! IN  A ARRAY AT FULL LEVELS          CAT1A.59     
     *,BK(P_LEVELS)                  ! IN  B ARRAY AT FULL LEVELS          CAT1A.60     
     *,EW_SPACE                      ! IN  LONGITUDE GRID SPACING          CAT1A.61     
     *,NS_SPACE                      ! IN  LATITUDE GRID SPACING           CAT1A.62     
     *                               !     BOTH THE ABOVE IN DEGREES       CAT1A.63     
C*                                                                         CAT1A.64     
C*L                                                                        CAT1A.65     
C-----------------------------------------------------------------------   CAT1A.66     
C Local Variables                                                          CAT1A.67     
C-----------------------------------------------------------------------   CAT1A.68     
      INTEGER                                                              CAT1A.69     
     * I,K                        ! LOOP COUNTERS                          CAT1A.70     
     & ,GLOBAL_ROW_NO             ! To store global no of local row        GSM3F403.340    
     & ,S_HEM_TOP                 ! Global row no of first s.hem row       GSM3F403.341    
C-----------------------------------------------------------------------   CAT1A.71     
      REAL                                                                 CAT1A.72     
     * HORIZ_SHEAR(U_FIELD)       ! HORIZONTAL WIND SHEAR                  CAT1A.73     
     *,VERT_SHEAR(U_FIELD)        ! VERTICAL WIND SHEAR                    CAT1A.74     
     *,ETA(P_LEVELS)              ! ETA VALUES                             CAT1A.75     
     *,TEMP_REQD                  ! ICAO TEMPERATURE OF PRESS_REQD         CAT1A.76     
     *,WORK1(U_FIELD,P_LEVELS)    ! 3-DIMENSIONAL WORKSPACE                CAT1A.77     
     *,WORK2(U_FIELD,P_LEVELS)    ! 3-DIMENSIONAL WORKSPACE                CAT1A.78     
     *,WORK3(U_FIELD,P_LEVELS)    ! 3-DIMENSIONAL WORKSPACE                CAT1A.79     
     *,WORK4(U_FIELD)             ! 2-DIMENSIONAL WORKSPACE                CAT1A.80     
     *,WORK5(U_FIELD)             ! 2-DIMENSIONAL WORKSPACE                CAT1A.81     
     *,ALPHA                      ! WORK VARIABLE                          CAT1A.82     
     *,PLEV(17)                   ! ARRAY OF STANDARD PRESSURES            CAT1A.84     
     *,TEMP(17)                   ! ARRAY OF ICAO TEMPERATURES             CAT1A.85     
     *,EVAL(8)                    ! ARRAY OF CAT PREDICTION INDEX VALUES   CAT1A.86     
     *,CATVAL(8)                  ! ARRAY OF CAT PROBABILITY VALUES        CAT1A.87     
C-----------------------------------------------------------------------   CAT1A.88     
      LOGICAL                                                              CAT1A.89     
     * FOUND(U_FIELD)             ! USED IN INTERPOLATIONS                 CAT1A.90     
                                                                           GSM3F403.342    
*CALL TYPFLDPT                                                             GSM3F403.343    
C-----------------------------------------------------------------------   CAT1A.91     
CL    Constants required     G=acceleration due to gravity                 CAT1A.92     
CL                           R=gas constant                                CAT1A.93     
CL                           PREF=reference pressure                       CAT1A.94     
C-----------------------------------------------------------------------   CAT1A.95     
*CALL C_G                                                                  CAT1A.96     
*CALL C_R_CP                                                               CAT1A.97     
C-----------------------------------------------------------------------   CAT1A.98     
C*L   DATA FOR LOCAL ARRAYS                                                CAT1A.99     
C-----------------------------------------------------------------------   CAT1A.100    
      DATA PLEV/100000.,95000.,85000.,70000.,50000.,40000.,30000.,         CAT1A.101    
     + 25000.,20000.,15000.,10000.,7000.,5000.,3000.,2000.,1000.,999./     CAT1A.102    
      DATA TEMP/287.,285.,279.,269.,252.,241.,229.,                        CAT1A.103    
     + 221.,217.,217.,217.,217.,217.,220.,223.,228.,230./                  CAT1A.104    
      DATA EVAL/5.0,7.5,10.0,15.0,20.0,25.0,65.0,99.0/                     GDR8F405.60     
      DATA CATVAL/0.0,1.75,2.0,2.5,3.0,3.5,7.5,7.5/                        GDR8F405.61     
C*----------------------------------------------------------------------   CAT1A.107    
CL    Interpolate the U field onto the required level                      CAT1A.108    
C     Stored in WORK5. WORK1 and WORK3 are dummy arguments                 CAT1A.109    
C-----------------------------------------------------------------------   CAT1A.110    
      CALL V_INT(PUV,PRESS_REQD,U,WORK5,                                   CAT1A.111    
     &  U_FIELD,P_LEVELS,WORK1,WORK3,.FALSE.                               GSM1F405.577    
     &  ,FIRST_VALID_PT,LAST_U_VALID_PT)                                   GSM1F405.578    
C-----------------------------------------------------------------------   CAT1A.113    
CL    Interpolate the V field onto the required level                      CAT1A.114    
C     Stored in WORK4. WORK1 and WORK3 are dummy arguments                 CAT1A.115    
C-----------------------------------------------------------------------   CAT1A.116    
      CALL V_INT(PUV,PRESS_REQD,V,WORK4,                                   CAT1A.117    
     &  U_FIELD,P_LEVELS,WORK1,WORK3,.FALSE.                               GSM1F405.579    
     &  ,FIRST_VALID_PT,LAST_U_VALID_PT)                                   GSM1F405.580    
C-----------------------------------------------------------------------   CAT1A.119    
CL    For calculation of vertical shear - if PRESS_REQD < 30mb above or    CAT1A.120    
CL    below MAX_WIND_P set PRESS_REQD to 30mb below or above its present   CAT1A.121    
CL    value where the vertical shear has a more representative value.      CAT1A.122    
C-----------------------------------------------------------------------   CAT1A.123    
      DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                      GSM1F405.581    
        IF((MAX_WIND_P(I)-PRESS_REQD(I)).LT.3000.0.AND.                    CAT1A.125    
     &     (MAX_WIND_P(I)-PRESS_REQD(I)).GE.0.0)THEN                       CAT1A.126    
          PRESS_REQD(I)=PRESS_REQD(I)-3000.0                               CAT1A.127    
        ELSEIF((PRESS_REQD(I)-MAX_WIND_P(I)).LT.3000.0.AND.                CAT1A.128    
     &         (PRESS_REQD(I)-MAX_WIND_P(I)).GT.0.0)THEN                   CAT1A.129    
          PRESS_REQD(I)=PRESS_REQD(I)+3000.0                               CAT1A.130    
        ENDIF                                                              CAT1A.131    
      ENDDO                                                                CAT1A.132    
C=======================================================================   CAT1A.133    
C                                                                          CAT1A.134    
C=======================================================================   CAT1A.135    
CL 1. CALCULATION OF HORIZONTAL WIND SHEAR AT REQUIRED P-LEVEL             CAT1A.136    
C-----------------------------------------------------------------------   CAT1A.137    
C                                                                          CAT1A.138    
C               (    dU       dU       dV       dV)                        CAT1A.139    
C  Horizontal = (U*V*-- - U*U*-- + V*V*-- - U*V*--) / (U*U+V*V)            CAT1A.140    
C  wind shear   (    dX       dY       dX       dY)                        CAT1A.141    
C                                                                          CAT1A.142    
C-----------------------------------------------------------------------   CAT1A.143    
CL    Calculation of dU/dX,dU/dY,dV/dX & dV/dY                             CAT1A.144    
C-----------------------------------------------------------------------   CAT1A.145    
C     WORK1(I,1) holds dU/dX         WORK2(I,1) holds dU/dY                CAT1A.146    
C     WORK1(I,2) holds dV/dX         WORK2(I,2) holds dV/dY                CAT1A.147    
C-----------------------------------------------------------------------   CAT1A.148    
      CALL H_GRAD(                                                         CAT1A.149    
*CALL ARGFLDPT                                                             GSM3F403.344    
     &     WORK5,U_FIELD,SEC_U_LATITUDE,ROW_LENGTH,EW_SPACE,NS_SPACE,      CAT1A.150    
     &     WORK1(1,1),WORK2(1,1))                                          CAT1A.151    
C                                                                          CAT1A.152    
      CALL H_GRAD(                                                         CAT1A.153    
*CALL ARGFLDPT                                                             GSM3F403.345    
     &     WORK4,U_FIELD,SEC_U_LATITUDE,ROW_LENGTH,EW_SPACE,NS_SPACE,      CAT1A.154    
     &     WORK1(1,2),WORK2(1,2))                                          CAT1A.155    
                                                                           GSM1F405.582    
C-----------------------------------------------------------------------   CAT1A.156    
CL    Calculation of HORIZ_SHEAR in m/s per 100km (i.e. per s x10E-5)      CAT1A.157    
C-----------------------------------------------------------------------   CAT1A.158    
                                                                           CAT1A.159    
      DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                      GSM3F403.361    
        HORIZ_SHEAR(I)=((WORK5(I)*WORK4(I))*WORK1(I,1)-                    GSM3F403.362    
     &    (WORK5(I)*WORK5(I))*WORK2(I,1))+                                 GSM3F403.363    
     &    ((WORK4(I)*WORK4(I))*WORK1(I,2)-(WORK5(I)*WORK4(I))              GSM3F403.364    
     &    *WORK2(I,2))                                                     GSM3F403.365    
        HORIZ_SHEAR(I)=(HORIZ_SHEAR(I)/(WORK5(I)*WORK5(I)                  GSM3F403.366    
     &    +WORK4(I)*WORK4(I)))*100000.0                                    GSM3F403.367    
      ENDDO                                                                CAT1A.166    
C                                                                          CAT1A.167    
CL    Change sign of horizontal shear in s.hem of global model             CAT1A.168    
C                                                                          CAT1A.169    
*IF DEF,GLOBAL                                                             CAT1A.170    
*IF DEF,MPP                                                                GSM3F403.368    
C First row of southern hemisphere relative to global grid                 GSM3F403.369    
      S_HEM_TOP=(GLSIZE-1)/2+1                                             GSM3F403.370    
C Loop over all local rows, convert to global grid and check if            GSM3F403.371    
C in Southern hemisphere                                                   GSM3F403.372    
      DO I=FIRST_ROW,U_LAST_ROW+1                                          GSM3F403.373    
        GLOBAL_ROW_NO=I+FIRST_GLOBAL_ROW_NUMBER-1-NS_Halo                  GSM3F403.374    
        IF (GLOBAL_ROW_NO.GE.S_HEM_TOP) THEN                               GSM3F403.375    
          DO K=(I-1)*ROW_LENGTH+1,I*ROW_LENGTH                             GSM3F403.376    
            HORIZ_SHEAR(K)=-HORIZ_SHEAR(K)                                 GSM3F403.377    
          ENDDO                                                            GSM3F403.378    
        ENDIF                                                              GSM3F403.379    
      ENDDO                                                                GSM3F403.380    
*ELSE                                                                      GSM3F403.381    
      DO I=1+U_FIELD/2,U_FIELD                                             CAT1A.171    
        HORIZ_SHEAR(I)=-HORIZ_SHEAR(I)                                     CAT1A.172    
      ENDDO                                                                CAT1A.173    
*ENDIF                                                                     GSM3F403.382    
*ENDIF                                                                     CAT1A.174    
C=======================================================================   CAT1A.175    
C                                                                          CAT1A.176    
C=======================================================================   CAT1A.177    
CL 2. CALCULATION OF VERTICAL WIND SHEAR AT REQUIRED P-LEVEL               CAT1A.178    
C-----------------------------------------------------------------------   CAT1A.179    
C                                                                          CAT1A.180    
C               (dU   dU   dV   dV)       dP                               CAT1A.181    
C  Vertical   = (-- * -- + -- * --)**0.5 *--                               CAT1A.182    
C  wind shear   (dP   dP   dP   dP)       dH                               CAT1A.183    
C                                                                          CAT1A.184    
C-----------------------------------------------------------------------   CAT1A.185    
CL    Calculate true A value (AK/PREF)- stored in WORK3                    CAT1A.186    
C-----------------------------------------------------------------------   CAT1A.187    
      DO K=1,P_LEVELS                                                      CAT1A.188    
        ALPHA=AK(K)/PREF                                                   GSM3F403.383    
        DO I=1,U_FIELD                                                     CAT1A.189    
          WORK3(I,K)=ALPHA                                                 GSM3F403.384    
        ENDDO                                                              CAT1A.191    
      ENDDO                                                                CAT1A.192    
C-----------------------------------------------------------------------   CAT1A.193    
CL    Calculate ETA values                                                 CAT1A.194    
C-----------------------------------------------------------------------   CAT1A.195    
      DO K=1,P_LEVELS                                                      CAT1A.196    
        ETA(K)=WORK3(1,K)+BK(K)                                            CAT1A.197    
      ENDDO                                                                CAT1A.198    
C-----------------------------------------------------------------------   CAT1A.199    
CL    Calculation of dAK/dETA at ETA levels using cubic spline             CAT1A.200    
C-----------------------------------------------------------------------   CAT1A.201    
C     WORK3 holds AK values,WORK1 holds dAK/dETA values                    CAT1A.202    
C     WORK4 & 5 are dummy arguments                                        CAT1A.203    
C-----------------------------------------------------------------------   CAT1A.204    
      CALL SPLINE(ETA,WORK3,U_FIELD,P_LEVELS,WORK2)                        CAT1A.205    
      DO K=1,P_LEVELS                                                      CAT1A.206    
        CALL EVAL_SP(ETA,WORK3,WORK2,U_FIELD,P_LEVELS,ETA(K),WORK4,        CAT1A.207    
     *       WORK1(1,K),WORK5)                                             CAT1A.208    
      ENDDO                                                                CAT1A.209    
C-----------------------------------------------------------------------   CAT1A.210    
CL    Calculation of dP/dETA at ETA levels                                 CAT1A.211    
C-----------------------------------------------------------------------   CAT1A.212    
C     P=(AK*PREF)+(BK*PSTAR)        ETA=AK+BK                              CAT1A.213    
C =>  dP/dETA = (PREF*dAK/dETA) + PSTAR *(1-dAK/dETA)                      CAT1A.214    
C                                                                          CAT1A.215    
C-----------------------------------------------------------------------   CAT1A.216    
CL    Interpolate PSTAR onto U/V points - held in WORK5                    CAT1A.217    
C-----------------------------------------------------------------------   CAT1A.218    
      CALL P_TO_UV(PSTAR,WORK5,P_FIELD,U_FIELD,ROW_LENGTH,P_ROWS)          CAT1A.219    
C-----------------------------------------------------------------------   CAT1A.220    
CL    dP/dETA held in WORK1                                                CAT1A.221    
C-----*********************---------------------------------------------   CAT1A.222    
      DO K=1,P_LEVELS                                                      CAT1A.223    
        DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                    GSM3F403.388    
          WORK1(I,K)=PREF*WORK1(I,K)+WORK5(I)*(1.0-WORK1(I,K))             CAT1A.225    
        ENDDO                                                              CAT1A.226    
      ENDDO                                                                CAT1A.227    
C=======================================================================   CAT1A.228    
C                                                                          CAT1A.229    
C=======================================================================   CAT1A.230    
CL    Calculation of dU/dETA at ETA levels using a cubic spline            CAT1A.231    
C-----------------------------------------------------------------------   CAT1A.232    
C     WORK2 holds dU/dETA values. WORK4 & 5 are dummy arguments.           CAT1A.233    
C-----------------------------------------------------------------------   CAT1A.234    
      CALL SPLINE(ETA,U,U_FIELD,P_LEVELS,WORK3)                            CAT1A.235    
      DO K=1,P_LEVELS                                                      CAT1A.236    
        CALL EVAL_SP(ETA,U,WORK3,U_FIELD,P_LEVELS,ETA(K),WORK4,            CAT1A.237    
     *       WORK2(1,K),WORK5)                                             CAT1A.238    
      ENDDO                                                                CAT1A.239    
C-----------------------------------------------------------------------   CAT1A.240    
CL    Calculation of dU/dP at ETA levels                                   CAT1A.241    
C-----------------------------------------------------------------------   CAT1A.242    
C     dU/dP = (dU/dETA) / (dP/dETA)                                        CAT1A.243    
C-----------------------------------------------------------------------   CAT1A.244    
CL    dU/dP at ETA levels held in WORK2                                    CAT1A.245    
C-----*********************************---------------------------------   CAT1A.246    
      DO K=1,P_LEVELS                                                      CAT1A.247    
        DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                    GSM3F403.389    
          WORK2(I,K)=WORK2(I,K)/WORK1(I,K)                                 CAT1A.249    
        ENDDO                                                              CAT1A.250    
      ENDDO                                                                CAT1A.251    
C-----------------------------------------------------------------------   CAT1A.252    
CL    Calculation of dU/dP at required P-level - held in WORK5             CAT1A.253    
C--------------------*****************************************----------   CAT1A.254    
      CALL V_INT(PUV,PRESS_REQD,WORK2,WORK5,                               CAT1A.255    
     & U_FIELD,P_LEVELS,WORK1,WORK4,.FALSE.,FIRST_FLD_PT,LAST_U_FLD_PT)    GSM1F405.583    
C=======================================================================   CAT1A.257    
C                                                                          CAT1A.258    
C=======================================================================   CAT1A.259    
CL    Calculation of dV/dETA at ETA levels using a cubic spline            CAT1A.260    
C-----------------------------------------------------------------------   CAT1A.261    
C     WORK2 holds dV/dETA values. WORK4 & VERT_SHEAR are dummy arguments   CAT1A.262    
C-----------------------------------------------------------------------   CAT1A.263    
      CALL SPLINE(ETA,V,U_FIELD,P_LEVELS,WORK3)                            CAT1A.264    
      DO K=1,P_LEVELS                                                      CAT1A.265    
        CALL EVAL_SP(ETA,V,WORK3,U_FIELD,P_LEVELS,ETA(K),WORK4,            CAT1A.266    
     *       WORK2(1,K),VERT_SHEAR)                                        CAT1A.267    
      ENDDO                                                                CAT1A.268    
C-----------------------------------------------------------------------   CAT1A.269    
CL    Calculation of dV/dP at ETA levels                                   CAT1A.270    
C-----------------------------------------------------------------------   CAT1A.271    
C     dV/dP = (dV/dETA) / (dP/dETA)                                        CAT1A.272    
C-----------------------------------------------------------------------   CAT1A.273    
CL    dV/dP at ETA levels held in WORK2                                    CAT1A.274    
C-----*********************************---------------------------------   CAT1A.275    
      DO K=1,P_LEVELS                                                      CAT1A.276    
        DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                    GSM3F403.390    
          WORK2(I,K)=WORK2(I,K)/WORK1(I,K)                                 CAT1A.278    
        ENDDO                                                              CAT1A.279    
      ENDDO                                                                CAT1A.280    
C-----------------------------------------------------------------------   CAT1A.281    
CL    Calculation of dV/dP at required p-level - held in WORK4             CAT1A.282    
C--------------------*****************************************----------   CAT1A.283    
      CALL V_INT(PUV,PRESS_REQD,WORK2,WORK4,                               CAT1A.284    
     & U_FIELD,P_LEVELS,WORK1,WORK3,.FALSE.,FIRST_FLD_PT,LAST_U_FLD_PT)    GSM1F405.584    
C=======================================================================   CAT1A.286    
C                                                                          CAT1A.287    
C=======================================================================   CAT1A.288    
CL    Calculation of dP/dH at required P level using ICAO standard atmos   CAT1A.289    
C-----------------------------------------------------------------------   CAT1A.290    
CL    Reset pressures greater than 1000mb or less than 10mb                CAT1A.291    
C-----------------------------------------------------------------------   CAT1A.292    
      DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                      GSM3F403.391    
        IF(PRESS_REQD(I).GT.100000.) PRESS_REQD(I)=100000.                 CAT1A.294    
        IF(PRESS_REQD(I).LT.1000.) PRESS_REQD(I)=1000.                     CAT1A.295    
        FOUND(I)=.FALSE.                                                   CAT1A.296    
      ENDDO                                                                CAT1A.297    
C-----------------------------------------------------------------------   CAT1A.298    
CL    Find the first value of PLEV which is less than PRESS_REQD           CAT1A.299    
C-----------------------------------------------------------------------   CAT1A.300    
CL *** Following loop labelled to workaround fmp mistranslation            CAT1A.301    
C-----------------------------------------------------------------------   CAT1A.302    
      DO 50 K=1,16                                                         CAT1A.303    
        DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                    GSM3F403.392    
          IF((PLEV(K+1).LT.PRESS_REQD(I)).AND.(.NOT.FOUND(I))) THEN        CAT1A.305    
            FOUND(I)=.TRUE.                                                CAT1A.306    
C-----------------------------------------------------------------------   CAT1A.307    
CL    Calculate the ICAO temperature by interpolation                      CAT1A.308    
CL    ALPHA=Interpolation weight                                           CAT1A.309    
C-----------------------------------------------------------------------   CAT1A.310    
            ALPHA=ALOG(PRESS_REQD(I)/PLEV(K))                              CAT1A.315    
     *       /ALOG(PLEV(K+1)/PLEV(K))                                      CAT1A.316    
            TEMP_REQD=ALPHA*TEMP(K+1)+(1.-ALPHA)*TEMP(K)                   CAT1A.318    
C-----------------------------------------------------------------------   CAT1A.319    
CL    Calculation of  dP/dH                                                CAT1A.320    
C     P=Rho*R*T             dP/dH=-Rho*g                                   CAT1A.321    
C     => dP/dH=-g*P/(R*T)                                                  CAT1A.322    
CL    dP/dH - held in ALPHA                                                CAT1A.323    
C-----*********************---------------------------------------------   CAT1A.324    
CL  Sign of ALPHA changed                                                  CAT1A.325    
            ALPHA=+G*PRESS_REQD(I)/(R*TEMP_REQD)                           CAT1A.326    
C=======================================================================   CAT1A.327    
C                                                                          CAT1A.328    
C=======================================================================   CAT1A.329    
CL    Calculation of VERT_SHEAR in m/s per km (i.e. per s x10E-3)          CAT1A.330    
C-----------------------------------------------------------------------   CAT1A.331    
            VERT_SHEAR(I)=((WORK5(I)*WORK5(I)+WORK4(I)*WORK4(I))**0.5)     CAT1A.332    
     &      *ALPHA*1000.0                                                  CAT1A.333    
CL    Modify VERT_SHEAR if too large                                       CAT1A.334    
              IF(VERT_SHEAR(I).GT.6.0) THEN                                CAT1A.335    
                VERT_SHEAR(I)=0.67*VERT_SHEAR(I)+1.0                       CAT1A.336    
              ELSEIF(VERT_SHEAR(I).GT.1.0) THEN                            CAT1A.337    
                VERT_SHEAR(I)=0.80*VERT_SHEAR(I)+0.2                       CAT1A.338    
              ENDIF                                                        CAT1A.339    
          ENDIF                                                            CAT1A.340    
        ENDDO                                                              CAT1A.341    
 50   CONTINUE                                                             CAT1A.342    
C=======================================================================   CAT1A.343    
C                                                                          CAT1A.344    
C=======================================================================   CAT1A.345    
CL 3. CALCULATE CAT PREDICTOR INDEX E - held in WORK1                      CAT1A.346    
C-----------------------------------------------------------------------   CAT1A.347    
      DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                      GSM3F403.393    
        WORK1(I,1)=1.25*HORIZ_SHEAR(I)+0.25*VERT_SHEAR(I)*VERT_SHEAR(I)    CAT1A.349    
     &      +10.5                                                          CAT1A.350    
        FOUND(I)=.FALSE.                                                   CAT1A.351    
      ENDDO                                                                CAT1A.352    
C-----------------------------------------------------------------------   CAT1A.353    
CL    If E is less than 5.0 CAT_PROB is set to 0.0                         CAT1A.354    
CL    If E is greater than 65.0 CAT_PROB is set to 7.5                     GDR8F405.62     
C-----------------------------------------------------------------------   CAT1A.356    
      DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                      GSM3F403.394    
        IF(WORK1(I,1).LE.5.0) THEN                                         CAT1A.358    
          CAT_PROB(I)=0.0                                                  CAT1A.359    
          FOUND(I)=.TRUE.                                                  CAT1A.360    
        ELSEIF(WORK1(I,1).GE.65.0)THEN                                     GDR8F405.63     
          CAT_PROB(I)=7.5                                                  CAT1A.362    
          FOUND(I)=.TRUE.                                                  CAT1A.363    
        ENDIF                                                              CAT1A.364    
      ENDDO                                                                CAT1A.365    
C-----------------------------------------------------------------------   CAT1A.366    
CL    Find the first value of EVAL which is greater than E                 CAT1A.367    
C-----------------------------------------------------------------------   CAT1A.368    
CL *** Following loop labelled to workaround fmp mistranslation            CAT1A.369    
C-----------------------------------------------------------------------   CAT1A.370    
      DO 100 K=1,7                                                         CAT1A.371    
        DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                    GSM3F403.395    
          IF((EVAL(K+1).GT.WORK1(I,1)).AND.(.NOT.FOUND(I))) THEN           CAT1A.373    
            FOUND(I)=.TRUE.                                                CAT1A.374    
C-----------------------------------------------------------------------   CAT1A.375    
CL    Calculate the CAT probability by interpolation                       CAT1A.376    
CL    ALPHA=Interpolation weight                                           CAT1A.377    
C-----------------------------------------------------------------------   CAT1A.378    
            ALPHA=(WORK1(I,1)-EVAL(K))/(EVAL(K+1)-EVAL(K))                 CAT1A.379    
            CAT_PROB(I)=ALPHA*CATVAL(K+1)+(1.-ALPHA)*CATVAL(K)             CAT1A.380    
          ENDIF                                                            CAT1A.381    
        ENDDO                                                              CAT1A.382    
 100  CONTINUE                                                             CAT1A.383    
C=======================================================================   CAT1A.384    
C     END OF SUBROUTINE CAT                                                CAT1A.385    
C=======================================================================   CAT1A.386    
      RETURN                                                               CAT1A.387    
      END                                                                  CAT1A.388    
C=======================================================================   CAT1A.389    
*ENDIF                                                                     CAT1A.390