*IF DEF,A16_1A                                                             QCTROP1A.2      
C ******************************COPYRIGHT******************************    GTS2F400.7867   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.7868   
C                                                                          GTS2F400.7869   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.7870   
C restrictions as set forth in the contract.                               GTS2F400.7871   
C                                                                          GTS2F400.7872   
C                Meteorological Office                                     GTS2F400.7873   
C                London Road                                               GTS2F400.7874   
C                BRACKNELL                                                 GTS2F400.7875   
C                Berkshire UK                                              GTS2F400.7876   
C                RG12 2SZ                                                  GTS2F400.7877   
C                                                                          GTS2F400.7878   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.7879   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.7880   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.7881   
C Modelling at the above address.                                          GTS2F400.7882   
C ******************************COPYRIGHT******************************    GTS2F400.7883   
C                                                                          GTS2F400.7884   
CLL  SUBROUTINE QCTROP--------------------------------------------------   QCTROP1A.3      
CLL                                                                        QCTROP1A.4      
CLL   Purpose: Calculates tropopause temperature and pressure.             QCTROP1A.5      
CLL            (This version uses approximation that z is linear with      QCTROP1A.6      
CLL            Exner function within a layer)                              QCTROP1A.7      
CLL            Quality control checks output and substitutes new           QCTROP1A.8      
CLL            values where necessary                                      QCTROP1A.9      
CLL                                                                        QCTROP1A.10     
CLL  Model            Modification history from model version 3.0:         QCTROP1A.11     
CLL version  Date                                                          QCTROP1A.12     
CLL   3.2  19/04/93  Code for new real missing data indicator (TCJ).       TJ050593.115    
CLL   4.2    Oct. 96  T3E migration: *DEF CRAY code removed - was used     GSS4F402.42     
CLL                    to switch on HF functions.                          GSS4F402.43     
CLL                                   S.J.Swarbrick                        GSS4F402.44     
CLL   4.4  13/08/97  Limit thickness value to prevent LOG of               GDR2F404.18     
CLL                  negative numbers. D. Robinson.                        GDR2F404.19     
!LL   4.5  20/04/98  Implement START,END args so that duplicate            GSM1F405.514    
!LL                  calculations in the NS halos can be avoided.          GSM1F405.515    
!LL                  S.D.Mullerworth                                       GSM1F405.516    
CLL                                                                        QCTROP1A.13     
CLL Programming standard :                                                 QCTROP1A.14     
CLL                                                                        QCTROP1A.15     
CLL Logical components covered : D442                                      QCTROP1A.16     
CLL                                                                        QCTROP1A.17     
CLL Project task :                                                         QCTROP1A.18     
CLL                                                                        QCTROP1A.19     
CLL  Documentation: The interpolation formulae are described in            QCTROP1A.20     
CLL                 unified model on-line documentation paper S1.          QCTROP1A.21     
CLL                 Quality control documentation not yet published        QCTROP1A.22     
CLL                                                                        QCTROP1A.23     
CLLEND----------------------------------------------------------------     QCTROP1A.24     
C                                                                          QCTROP1A.25     
C*L  Arguments:-------------------------------------------------------     QCTROP1A.26     

      SUBROUTINE QCTROP                                                     1,2QCTROP1A.27     
     &  (THETA,P_HALF,P_EXNER_HALF,ZH,TT,PT,ZT,POINTS,P_LEVELS             GSM1F405.517    
     &  ,P_Z,P_T,PSTAR,Q,Q_LEVELS,Z_REF,T_REF                              GSM1F405.518    
     &  ,MIN_TROP_LEVEL,BOTTOM_QC_LEVEL,TOP_QC_LEVEL,AKH,BKH               GSM1F405.519    
     &  ,START,END)                                                        GSM1F405.520    
                                                                           QCTROP1A.31     
      IMPLICIT NONE                                                        QCTROP1A.32     
                                                                           QCTROP1A.33     
      INTEGER                                                              QCTROP1A.34     
     * POINTS    !IN Number of points to be processed                      QCTROP1A.35     
     *,P_LEVELS  !IN Number of model levels                                QCTROP1A.36     
     *,Q_LEVELS  !IN Number of wet levels                                  QCTROP1A.37     
     *,Z_REF     !IN Reference level for height interpolation              QCTROP1A.38     
     *,T_REF     !IN Reference level for temperature interpolation         QCTROP1A.39     
     *,MIN_TROP_LEVEL  !IN Level no. for lowest possible tropopause.       QCTROP1A.40     
     *                 !   Set to first level above boundary layer         QCTROP1A.41     
     *,BOTTOM_QC_LEVEL  !IN Lower level no. for quality control scheme     QCTROP1A.42     
     *,TOP_QC_LEVEL   !IN Upper level no. for quality control scheme       QCTROP1A.43     
     &,START,END !IN Range of points to calculate                          GSM1F405.521    
                                                                           QCTROP1A.44     
      REAL                                                                 QCTROP1A.45     
     * THETA(POINTS,P_LEVELS) !IN Potential temperature at full levels     QCTROP1A.46     
     *,P_HALF(POINTS,P_LEVELS+1) !IN                                       QCTROP1A.47     
     *,P_EXNER_HALF(POINTS,P_LEVELS+1) !IN Exner pressure at model         QCTROP1A.48     
     *                                 !   half levels                     QCTROP1A.49     
     *,ZH(POINTS,P_LEVELS+1)  !IN Height of model half levels              QCTROP1A.50     
     *,P_Z(POINTS)      !IN Pressure at reference level Z_REF              QCTROP1A.51     
     *,P_T(POINTS)      !IN Pressure at reference level T_REF              QCTROP1A.52     
     *,PSTAR(POINTS)   !IN Surface pressure                                QCTROP1A.53     
     *,Q(POINTS,Q_LEVELS)     !IN Specific humidity at full levels         QCTROP1A.54     
     *,AKH(P_LEVELS+1)        !IN Hybrid Coords. A values on half levels   QCTROP1A.55     
     *,BKH(P_LEVELS+1)        !IN Hybrid Coords. B values on half levels   QCTROP1A.56     
     *,TT(POINTS)             !OUT Temperature of tropopause               QCTROP1A.57     
     *,PT(POINTS)             !OUT Pressure of tropopause                  QCTROP1A.58     
     *,ZT(POINTS)             !OUT Height of tropopause                    QCTROP1A.59     
                                                                           QCTROP1A.60     
C Workspace usage:-----------------------------------------------------    QCTROP1A.61     
       REAL LAPSE_RATE(POINTS,MIN_TROP_LEVEL:P_LEVELS)                     QCTROP1A.62     
       LOGICAL LTROP(POINTS)                                               QCTROP1A.63     
C Workspace used for quality control:----------------------------------    QCTROP1A.64     
      INTEGER INDEX(1:TOP_QC_LEVEL-BOTTOM_QC_LEVEL+1)                      QCTROP1A.65     
      REAL WEIGHT_REF(POINTS),PT_QC(POINTS),WEIGHT_LR(POINTS,2)            QCTROP1A.66     
     *,WEIGHT_LR_INT(POINTS),PT_TT(POINTS),WEIGHT_TT_INT(POINTS)           QCTROP1A.67     
     *,WEIGHT_TOT_INT(POINTS),P_UPPER(POINTS),P_LOWER(POINTS),SD(POINTS)   QCTROP1A.68     
     *,PZ(POINTS,2),THICK(POINTS),ZZ(POINTS,2),TT_QC(POINTS),PZS(2)        QCTROP1A.69     
     *,TH_REF(8),A_REF(8),G_REF(8),SD_REF(8)                               QCTROP1A.70     
C External subroutines called:-----------------------------------------    QCTROP1A.71     
      EXTERNAL V_INT_Z, V_INT_T                                            QCTROP1A.73     
C*---------------------------------------------------------------------    QCTROP1A.74     
C Define local variables:----------------------------------------------    QCTROP1A.75     
      INTEGER I,J,K,JP1                                                    QCTROP1A.76     
      REAL PJP1,PJ,PJM1  !  Pressures at half levels J+1/J/J-1             QCTROP1A.77     
      REAL P_EXNER_FULL_J,P_EXNER_FULL_JM1                                 QCTROP1A.78     
     *,DEL_EXNER_J,DEL_EXNER_JM1,TERM1,TERM2                               QCTROP1A.79     
     *,ZDT,P_EXNER_T                                                       QCTROP1A.80     
     *,ZDJM1,ZDJ                                                           GSS4F402.45     
                                                                           GSS4F402.46     
C*---------------------------------------------------------------------    QCTROP1A.82     
C Define local variables for quality control:--------------------------    QCTROP1A.83     
      INTEGER LOOP,JINT,LOOP_INDEX                                         QCTROP1A.84     
      REAL FUNC_LR,RIP,P_FACTOR,PSIGWT,TUNER_LR,TUNER_TT                   QCTROP1A.85     
     *,SILLY,SDLIM,TRP_MAX,REAL_INCR                                       QCTROP1A.86     
     *,LO_WT                                                               QCTROP1A.87     
C*---------------------------------------------------------------------    QCTROP1A.88     
C Define data for quality control:-------------------------------------    QCTROP1A.89     
      DATA PZS/100000.,50000./                                             QCTROP1A.90     
      DATA TH_REF/4380.,4740.,4920.,5100.,5280.,5460.,5640.,5820./         QCTROP1A.91     
      DATA A_REF/1852.7,1483.7,1457.7,821.62                               QCTROP1A.92     
     &          ,1995.7,2758.5,568.56,1852.7/                              QCTROP1A.93     
      DATA G_REF/-3.0325,-2.4334,-2.2868,-1.0497                           QCTROP1A.94     
     &          ,-3.2610,-4.6646,-0.7939,-3.0325/                          QCTROP1A.95     
      DATA SD_REF/74.728,46.730,38.964,33.777                              QCTROP1A.96     
     &           ,33.252,39.477,8.0700,74.728/                             QCTROP1A.97     
C----------------------------------------------------------------------    QCTROP1A.98     
C Constants from comdecks:---------------------------------------------    QCTROP1A.99     
*CALL C_MDI                                                                TJ050593.116    
*CALL C_G                                                                  QCTROP1A.100    
*CALL C_R_CP                                                               QCTROP1A.101    
*CALL C_LAPSE                                                              QCTROP1A.102    
C----------------------------------------------------------------------    QCTROP1A.103    
      REAL CP_OVER_G,ONE_OVER_KAPPA,P_EXNER_500,P_EXNER_50                 QCTROP1A.104    
      PARAMETER(CP_OVER_G=CP/G)                                            QCTROP1A.105    
      PARAMETER(ONE_OVER_KAPPA=1./KAPPA)                                   QCTROP1A.106    
                                                                           QCTROP1A.107    
*CALL P_EXNERC                                                             QCTROP1A.108    
                                                                           QCTROP1A.109    
CL 1. Set up local constants and initialise arrays                         QCTROP1A.110    
                                                                           QCTROP1A.111    
      P_EXNER_500=(500./1000.)**KAPPA                                      QCTROP1A.112    
      P_EXNER_50=(50./1000.)**KAPPA                                        QCTROP1A.113    
                                                                           QCTROP1A.114    
      DO I=START,END                                                       GSM1F405.522    
                                                                           QCTROP1A.116    
C Initialise logical string which indicates whether tropopause found       QCTROP1A.117    
C at a lower level: LTROP=T is not found; LTROP=F is found.                QCTROP1A.118    
                                                                           QCTROP1A.119    
      LTROP(I)=.TRUE.                                                      QCTROP1A.120    
                                                                           QCTROP1A.121    
C Initialise tropopause height and pressure to missing data                QCTROP1A.122    
                                                                           QCTROP1A.123    
      PT(I)=RMDI                                                           TJ050593.117    
      TT(I)=RMDI                                                           TJ050593.118    
      ZT(I)=RMDI                                                           TJ050593.119    
                                                                           QCTROP1A.127    
      ENDDO ! DO I=START,END                                               GSM1F405.523    
                                                                           QCTROP1A.129    
CL 2. Compute lapse rate between full levels: equation (3.16)              QCTROP1A.130    
                                                                           QCTROP1A.131    
                                                                           QCTROP1A.132    
      DO 200 J=MIN_TROP_LEVEL,P_LEVELS                                     QCTROP1A.133    
      DO 210 I=START,END                                                   GSM1F405.524    
                                                                           QCTROP1A.135    
C Exner pressure at full levels                                            QCTROP1A.136    
      PJP1 = AKH(J+1) + BKH(J+1)*PSTAR(I)                                  QCTROP1A.137    
      PJ   = AKH(J)   + BKH(J)  *PSTAR(I)                                  QCTROP1A.138    
      PJM1 = AKH(J-1) + BKH(J-1)*PSTAR(I)                                  QCTROP1A.139    
      P_EXNER_FULL_J = P_EXNER_C                                           QCTROP1A.140    
     +(P_EXNER_HALF(I,J+1),P_EXNER_HALF(I,J),PJP1,PJ,KAPPA)                QCTROP1A.141    
      P_EXNER_FULL_JM1 = P_EXNER_C                                         QCTROP1A.142    
     +(P_EXNER_HALF(I,J),P_EXNER_HALF(I,J-1),PJ,PJM1,KAPPA)                QCTROP1A.143    
                                                                           QCTROP1A.144    
C Exner pressure difference across half layers                             QCTROP1A.145    
      DEL_EXNER_J=P_EXNER_HALF(I,J)-P_EXNER_FULL_J                         QCTROP1A.146    
      DEL_EXNER_JM1=P_EXNER_FULL_JM1-P_EXNER_HALF(I,J)                     QCTROP1A.147    
                                                                           QCTROP1A.148    
C Denominator                                                              QCTROP1A.149    
      TERM2=CP_OVER_G*(THETA(I,J-1)*DEL_EXNER_JM1                          QCTROP1A.150    
     *       +THETA(I,J)*DEL_EXNER_J)                                      QCTROP1A.151    
                                                                           QCTROP1A.152    
C Numerator                                                                QCTROP1A.153    
      TERM1=THETA(I,J-1)*P_EXNER_FULL_JM1-THETA(I,J)*P_EXNER_FULL_J        QCTROP1A.154    
                                                                           QCTROP1A.155    
C Lapse rate between level j-1 and j                                       QCTROP1A.156    
      LAPSE_RATE(I,J)=TERM1/TERM2                                          QCTROP1A.157    
210   CONTINUE                                                             QCTROP1A.158    
200   CONTINUE                                                             QCTROP1A.159    
                                                                           QCTROP1A.160    
CL 2.1. Quality control set up                                             QCTROP1A.161    
                                                                           QCTROP1A.162    
C Set up constants                                                         QCTROP1A.163    
      TUNER_LR=1.0                                                         QCTROP1A.164    
      TUNER_TT=0.5                                                         QCTROP1A.165    
      SILLY=101320.0                                                       QCTROP1A.166    
      LOOP_INDEX=9                                                         QCTROP1A.167    
                                                                           QCTROP1A.168    
C Evaluate 1000-500 HPa thickness in metres                                QCTROP1A.169    
      DO 777 K=1,2                                                         QCTROP1A.170    
        DO 778 I=START,END                                                 GSM1F405.525    
          PZ(I,K)=PZS(K)                                                   QCTROP1A.172    
  778   CONTINUE                                                           QCTROP1A.173    
        CALL V_INT_Z(PZ(1,K),P_Z,PSTAR,P_EXNER_HALF,                       QCTROP1A.174    
     &               THETA,Q,ZH,ZZ(1,K),POINTS,P_LEVELS,Q_LEVELS,          QCTROP1A.175    
     &               Z_REF,AKH,BKH,START,END)                              GSM1F405.526    
  777 CONTINUE                                                             QCTROP1A.177    
      DO 779 I=START,END                                                   GSM1F405.527    
        THICK(I)=ZZ(I,2)-ZZ(I,1)                                           QCTROP1A.179    
        IF (THICK(I).GT.6100.0) THEN                                       GDR2F404.20     
          write(6,*) 'QCTROP : Thickness = ',THICK(I),' Reset to 6100.'    GDR2F404.21     
          THICK(I)=6100.0                                                  GDR2F404.22     
        ENDIF                                                              GDR2F404.23     
  779 CONTINUE                                                             QCTROP1A.180    
                                                                           QCTROP1A.181    
C Pick up relevant constants from arrays                                   QCTROP1A.182    
      LOOP=1                                                               QCTROP1A.183    
      DO 211 I=START,END                                                   GSM1F405.528    
        SD(I)=SD_REF(LOOP)*100.0                                           QCTROP1A.185    
        PT_TT(I)=(A_REF(LOOP)*100.0)+G_REF(LOOP)*10.0*THICK(I)             QCTROP1A.186    
  211 CONTINUE                                                             QCTROP1A.187    
                                                                           QCTROP1A.188    
      DO 212 LOOP=2,8                                                      QCTROP1A.189    
      DO 213 I=START,END                                                   GSM1F405.529    
        IF(THICK(I).GE.TH_REF(LOOP))THEN                                   QCTROP1A.191    
          SD(I)=SD_REF(LOOP)*100.0                                         QCTROP1A.192    
          PT_TT(I)=(A_REF(LOOP)*100.0)+G_REF(LOOP)*10.0*THICK(I)           QCTROP1A.193    
        ENDIF                                                              QCTROP1A.194    
  213 CONTINUE                                                             QCTROP1A.195    
  212 CONTINUE                                                             QCTROP1A.196    
                                                                           QCTROP1A.197    
C Set up an array of alternative values using weighting functions          QCTROP1A.198    
      DO 220 I=START,END                                                   GSM1F405.530    
        FUNC_LR=(LAPSE_RATE(I,BOTTOM_QC_LEVEL)-LAPSE_TROP)*1000.0          QCTROP1A.200    
        IF(FUNC_LR.LT.0.0)THEN                                             QCTROP1A.201    
          WEIGHT_LR(I,1)=1.0                                               QCTROP1A.202    
        ELSE                                                               QCTROP1A.203    
          WEIGHT_LR(I,1)=2.0/(EXP(FUNC_LR)+EXP(-FUNC_LR))                  QCTROP1A.207    
        ENDIF                                                              QCTROP1A.209    
  220 CONTINUE                                                             QCTROP1A.210    
                                                                           QCTROP1A.211    
C Set up default value for weighting function and trop pressure            QCTROP1A.212    
      DO 230 I=START,END                                                   GSM1F405.531    
        WEIGHT_REF(I)=WEIGHT_LR(I,1)          ! Must be set                QCTROP1A.214    
        PT_QC(I)=SILLY               ! May not need to be set              QCTROP1A.215    
  230 CONTINUE                                                             QCTROP1A.216    
                                                                           QCTROP1A.217    
C Evaluate weighting functions                                             QCTROP1A.218    
      DO 240 J=BOTTOM_QC_LEVEL,TOP_QC_LEVEL                                QCTROP1A.219    
        IF(J.GT.BOTTOM_QC_LEVEL)THEN                                       QCTROP1A.220    
          DO 250 I=START,END                                               GSM1F405.532    
            WEIGHT_LR(I,1)=WEIGHT_LR(I,2)                                  QCTROP1A.222    
  250     CONTINUE                                                         QCTROP1A.223    
        ENDIF                                                              QCTROP1A.224    
        DO 260 I=START,END                                                 GSM1F405.533    
          FUNC_LR=(LAPSE_RATE(I,J+1)-LAPSE_TROP)*1000.0                    QCTROP1A.226    
          IF(FUNC_LR.LT.0.0)THEN                                           QCTROP1A.227    
            WEIGHT_LR(I,2)=1.0                                             QCTROP1A.228    
          ELSE                                                             QCTROP1A.229    
            WEIGHT_LR(I,2)=2.0/(EXP(FUNC_LR)+EXP(-FUNC_LR))                QCTROP1A.233    
          ENDIF                                                            QCTROP1A.235    
  260   CONTINUE                                                           QCTROP1A.236    
                                                                           QCTROP1A.237    
        DO 270 JINT=1,LOOP_INDEX                                           QCTROP1A.238    
C Contribution from lapse rate weighting function                          QCTROP1A.239    
          DO 280 I=START,END                                               GSM1F405.534    
            REAL_INCR=(P_HALF(I,J)-P_HALF(I,J+1))/9.0 ! FLOAT(LOOP_INDEX   QCTROP1A.241    
            P_FACTOR=(REAL_INCR*(JINT-1))/(P_HALF(I,J+1)-P_HALF(I,J))      QCTROP1A.242    
            WEIGHT_LR_INT(I)=WEIGHT_LR(I,1)+                               QCTROP1A.243    
     &                      (WEIGHT_LR(I,1)-WEIGHT_LR(I,2))*P_FACTOR       QCTROP1A.244    
            IF(WEIGHT_LR_INT(I).GT.1.0)THEN                                QCTROP1A.245    
              WEIGHT_LR_INT(I)=1.0                                         QCTROP1A.246    
            ELSEIF(WEIGHT_LR_INT(I).LT.0.0)THEN                            QCTROP1A.247    
              WEIGHT_LR_INT(I)=0.0                                         QCTROP1A.248    
            ENDIF                                                          QCTROP1A.249    
C Contribution from pseudo-sigma weighting                                 QCTROP1A.250    
            PSIGWT=(P_HALF(I,J)-REAL_INCR*(JINT-1))*0.00001                QCTROP1A.251    
            WEIGHT_LR_INT(I)=(WEIGHT_LR_INT(I)+PSIGWT)*TUNER_LR            QCTROP1A.252    
C Contribution from thickness weighting function                           QCTROP1A.253    
            RIP=P_HALF(I,J)-REAL_INCR*(JINT-1)                             QCTROP1A.254    
            TERM1=-((RIP-PT_TT(I))*(RIP-PT_TT(I)))                         QCTROP1A.255    
     &            /(2.0*SD(I)*SD(I))                                       QCTROP1A.256    
            WEIGHT_TT_INT(I)=EXP(TERM1)*TUNER_TT                           QCTROP1A.260    
            WEIGHT_TOT_INT(I)=WEIGHT_LR_INT(I)+WEIGHT_TT_INT(I)            QCTROP1A.262    
C Update trop pressure where total weighting function is a maximum         QCTROP1A.263    
            IF(WEIGHT_REF(I).LT.WEIGHT_TOT_INT(I))THEN                     QCTROP1A.264    
              WEIGHT_REF(I)=WEIGHT_TOT_INT(I)                              QCTROP1A.265    
              PT_QC(I)=RIP                                                 QCTROP1A.266    
            ENDIF                                                          QCTROP1A.267    
  280     CONTINUE                                                         QCTROP1A.268    
  270   CONTINUE                                                           QCTROP1A.269    
  240 CONTINUE                                                             QCTROP1A.270    
C Set a silly value if total weighting function is less than 1.0           QCTROP1A.271    
C (This will nullify any attempt to provide a substitute value)            QCTROP1A.272    
      DO 290 I=START,END                                                   GSM1F405.535    
        IF(WEIGHT_REF(I).LT.1.0)THEN                                       QCTROP1A.274    
          PT_QC(I)=SILLY                                                   QCTROP1A.275    
        ENDIF                                                              QCTROP1A.276    
  290 CONTINUE                                                             QCTROP1A.277    
                                                                           QCTROP1A.278    
C Obtain corresponding temperatures for alternative tropopause pressures   QCTROP1A.279    
      CALL V_INT_T(TT_QC,PT_QC,P_T,PSTAR,P_EXNER_HALF                      QCTROP1A.280    
     &  ,THETA,POINTS,P_LEVELS,T_REF,AKH,BKH                               GSM1F405.536    
     &  ,START,END)                                                        GSM1F405.537    
C Estimate range of trop pressures allowed by quality control scheme       QCTROP1A.282    
      SDLIM=3.0                                                            QCTROP1A.283    
      DO 2110 I=START,END                                                  GSM1F405.538    
        P_UPPER(I)=PT_TT(I)+SDLIM*SD(I)                                    QCTROP1A.285    
        P_LOWER(I)=EXP(2.0*ALOG(PT_TT(I))-ALOG(P_UPPER(I)))                QCTROP1A.289    
 2110 CONTINUE                                                             QCTROP1A.291    
                                                                           QCTROP1A.292    
CL 3. Calculate tropopause temperature, height  and pressure               QCTROP1A.293    
                                                                           QCTROP1A.294    
      LO_WT=0.5                                                            QCTROP1A.295    
                                                                           QCTROP1A.296    
      DO 300 J=MIN_TROP_LEVEL+1,P_LEVELS                                   QCTROP1A.297    
      JP1=MIN(J+1,P_LEVELS)                                                QCTROP1A.298    
      DO 310 I=START,END                                                   GSM1F405.539    
                                                                           QCTROP1A.300    
C Exner pressure at full levels                                            QCTROP1A.301    
      PJP1 = AKH(J+1) + BKH(J+1)*PSTAR(I)                                  QCTROP1A.302    
      PJ   = AKH(J)   + BKH(J)  *PSTAR(I)                                  QCTROP1A.303    
      PJM1 = AKH(J-1) + BKH(J-1)*PSTAR(I)                                  QCTROP1A.304    
      P_EXNER_FULL_J = P_EXNER_C                                           QCTROP1A.305    
     +(P_EXNER_HALF(I,J+1),P_EXNER_HALF(I,J),PJP1,PJ,KAPPA)                QCTROP1A.306    
      P_EXNER_FULL_JM1 = P_EXNER_C                                         QCTROP1A.307    
     +(P_EXNER_HALF(I,J),P_EXNER_HALF(I,J-1),PJ,PJM1,KAPPA)                QCTROP1A.308    
                                                                           QCTROP1A.309    
C Criteria for layer containing tropopause                                 QCTROP1A.310    
C (where 'layer' is interval between level j and level j-1)                QCTROP1A.311    
      IF(P_EXNER_FULL_J.LT.P_EXNER_500.AND.                                QCTROP1A.312    
     * P_EXNER_FULL_JM1.GT.P_EXNER_50.AND.                                 QCTROP1A.313    
     * ((LAPSE_RATE(I,J)*LO_WT)+(LAPSE_RATE(I,JP1)*(1.0-LO_WT))).LT.       QCTROP1A.314    
     * LAPSE_TROP.AND.LTROP(I))THEN                                        QCTROP1A.315    
                                                                           QCTROP1A.316    
C Reset logical string to say tropause now found                           QCTROP1A.317    
      LTROP(I)=.FALSE.                                                     QCTROP1A.318    
                                                                           QCTROP1A.319    
C Z(j-1)-Z(j-1/2); Z(j)-Z(j-1/2)                                           QCTROP1A.320    
      ZDJM1=CP_OVER_G*THETA(I,J-1)*(P_EXNER_HALF(I,J)-P_EXNER_FULL_JM1)    QCTROP1A.321    
      ZDJ=CP_OVER_G*THETA(I,J)*(P_EXNER_HALF(I,J)-P_EXNER_FULL_J)          QCTROP1A.322    
                                                                           QCTROP1A.323    
C Z(tropopause) - Z(j-1/2): equation (3.19)                                QCTROP1A.324    
      ZDT=(THETA(I,J-1)*P_EXNER_FULL_JM1-THETA(I,J)*P_EXNER_FULL_J         QCTROP1A.325    
     *+LAPSE_RATE(I,J-1)*ZDJM1                                             QCTROP1A.326    
     *-LAPSE_RATE(I,JP1)*ZDJ)                                              QCTROP1A.327    
     */MAX(1.E-6,(LAPSE_RATE(I,J-1)-LAPSE_RATE(I,JP1)))                    QCTROP1A.328    
                                                                           QCTROP1A.329    
C Ensure trop level doesn't undershoot Z(j-1) (cannot overshoot Z(j) )     QCTROP1A.330    
      ZDT=MAX(ZDT,ZDJM1)                                                   QCTROP1A.331    
                                                                           QCTROP1A.332    
C Tropopause Height                                                        QCTROP1A.333    
      ZT(I)=ZDT+ZH(I,J)                                                    QCTROP1A.334    
      ZDT=MIN(ZDT,ZDJ)                                                     QCTROP1A.335    
                                                                           QCTROP1A.336    
C Tropopause temperature : equation (3.20)                                 QCTROP1A.337    
      TT(I)=THETA(I,J)*P_EXNER_FULL_J                                      QCTROP1A.338    
     *     -LAPSE_RATE(I,JP1)*(ZDT-ZDJ)                                    QCTROP1A.339    
                                                                           QCTROP1A.340    
C Exner pressure of tropopause: equation (3.22)                            QCTROP1A.341    
      IF(ZDT.GT.0.0)THEN                                                   QCTROP1A.342    
        P_EXNER_T=P_EXNER_HALF(I,J)-G*ZDT/(CP*THETA(I,J))                  QCTROP1A.343    
      ELSE                                                                 QCTROP1A.344    
        P_EXNER_T=P_EXNER_HALF(I,J)-G*ZDT/(CP*THETA(I,J-1))                QCTROP1A.345    
      ENDIF                                                                QCTROP1A.346    
                                                                           QCTROP1A.347    
C Pressure of tropopause: equation (3.21)                                  QCTROP1A.348    
      PT(I)=PREF*(P_EXNER_T)**ONE_OVER_KAPPA                               QCTROP1A.352    
                                                                           QCTROP1A.354    
      ENDIF                                                                QCTROP1A.355    
                                                                           QCTROP1A.356    
310   CONTINUE                                                             QCTROP1A.357    
300   CONTINUE                                                             QCTROP1A.358    
                                                                           QCTROP1A.359    
CL 4. Apply quality control to results                                     QCTROP1A.360    
                                                                           QCTROP1A.361    
      DO 400 I=START,END                                                   GSM1F405.540    
        IF(PT(I).LT.P_LOWER(I).AND.PT_QC(I).LT.P_UPPER(I).AND.             QCTROP1A.363    
     &     PT(I).LT.PT_QC(I))THEN                                          QCTROP1A.364    
          PT(I)=PT_QC(I)                                                   QCTROP1A.365    
          TT(I)=TT_QC(I)                                                   QCTROP1A.366    
        ENDIF                                                              QCTROP1A.367    
  400 CONTINUE                                                             QCTROP1A.368    
                                                                           QCTROP1A.369    
C-----------------------------------------------------------------------   QCTROP1A.370    
C Set arbitrary max tropopause                                             QCTROP1A.371    
C-----------------------------------------------------------------------   QCTROP1A.372    
      TRP_MAX=10100.0                                                      QCTROP1A.373    
      DO I=START,END                                                       GSM1F405.541    
        IF(PT(I).LT.TRP_MAX)THEN                                           QCTROP1A.375    
          PT(I)=TRP_MAX                                                    QCTROP1A.376    
          TT(I)=199                                                        QCTROP1A.377    
          ZT(I)=16180                                                      QCTROP1A.378    
        ENDIF                                                              QCTROP1A.379    
      ENDDO                                                                QCTROP1A.380    
                                                                           QCTROP1A.381    
      RETURN                                                               QCTROP1A.382    
      END                                                                  QCTROP1A.383    
*ENDIF                                                                     QCTROP1A.384