*IF DEF,A18_1A,OR,DEF,A18_2A,OR,DEF,RECON                                  VSB1F304.155    
C ******************************COPYRIGHT******************************    GTS2F400.9775   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.9776   
C                                                                          GTS2F400.9777   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.9778   
C restrictions as set forth in the contract.                               GTS2F400.9779   
C                                                                          GTS2F400.9780   
C                Meteorological Office                                     GTS2F400.9781   
C                London Road                                               GTS2F400.9782   
C                BRACKNELL                                                 GTS2F400.9783   
C                Berkshire UK                                              GTS2F400.9784   
C                RG12 2SZ                                                  GTS2F400.9785   
C                                                                          GTS2F400.9786   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.9787   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.9788   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.9789   
C Modelling at the above address.                                          GTS2F400.9790   
C ******************************COPYRIGHT******************************    GTS2F400.9791   
C                                                                          GTS2F400.9792   
CLL Subroutine STRATQ                                                      STRATQ1A.3      
CLL                                                                        STRATQ1A.4      
CLL Purpose :     To reset the moisture levels in the stratosphere         STRATQ1A.5      
CLL               to climatological values                                 STRATQ1A.6      
CLL               (min q=1.E-6,max q=3.E-6 or max RH=10%)                  STRATQ1A.7      
CLL               called in assimilation mode at model_analysis_hour       STRATQ1A.8      
CLL               and at end of assimilation period                        STRATQ1A.9      
CLL                                                                        STRATQ1A.10     
CLL For CRAY YMP                                                           STRATQ1A.11     
CLL                                                                        STRATQ1A.12     
CLL S.Bell      <- programmer of some or all of previous code or changes   STRATQ1A.13     
CLL                                                                        STRATQ1A.14     
CLL  Model            Modification history from model version 3.0:         STRATQ1A.15     
CLL version  Date                                                          STRATQ1A.16     
CLL   3.2  19/04/93  Code for new real missing data indicator (TCJ).       TJ050593.120    
CLL   3.2  8/7/93      Eliminate QA FORTRAN complaints    S Bell           SB100793.490    
CLL   3.4  7/9/94      Eliminate cloud water/ice and RHCRIT                ABM1F304.220    
CLL                    from arg list and calls to HMRTORH  Bruce M         ABM1F304.221    
CLL   3.4  19/9/94     Make available for A18_2A          S Bell           VSB1F304.156    
!+                                                                         VSB1F304.157    
CLL                                                                        STRATQ1A.17     
CLL Programming standard; Unified Model Documentation Paper No. 4          STRATQ1A.18     
CLL                       version no. 3, dated 15/08/90                    STRATQ1A.19     
CLL                                                                        STRATQ1A.20     
CLL System components covered : P3                                         STRATQ1A.21     
CLL                                                                        STRATQ1A.22     
CLL Documentation :                                                        STRATQ1A.23     
CLL                                                                        STRATQ1A.24     
CLLEND                                                                     STRATQ1A.25     
                                                                           STRATQ1A.26     
C*L  ARGUMENTS:---------------------------------------------------         STRATQ1A.27     

      SUBROUTINE STRATQ(                                                    2,4STRATQ1A.28     
C   primary data in                                                        STRATQ1A.29     
     &  PSTAR,Q,THETA,OROG,P_EXNER_HALF,                                   ABM1F304.222    
C   primary data constants                                                 STRATQ1A.31     
     &  P_LEVELS,Q_LEVELS,P_FIELD,                                         STRATQ1A.32     
     &  AK,BK,AKH,BKH,                                                     STRATQ1A.33     
     &  MIN_TROP_LEV,                                                      STRATQ1A.35     
C   return code and message.                                               STRATQ1A.36     
     &  ICODE,CMESSAGE)                                                    STRATQ1A.37     
C*---------------------------------------------------------------------    STRATQ1A.38     
                                                                           STRATQ1A.39     
      IMPLICIT NONE                                                        STRATQ1A.40     
                                                                           STRATQ1A.41     
*CALL C_G                                                                  STRATQ1A.42     
                                                                           STRATQ1A.43     
C*L--------------------------------------------------------------------    STRATQ1A.44     
      INTEGER                                                              STRATQ1A.45     
     *  P_FIELD            !IN    1ST DIMENSION OF FIELD OF PSTAR          STRATQ1A.46     
     *, P_LEVELS           !IN    NUMBER OF MODEL LEVELS                   STRATQ1A.47     
     *, Q_LEVELS           !IN    NUMBER OF WET LEVELS                     STRATQ1A.48     
     *, ICODE              ! RETURN CODE      :    ICODE=0  NORMAL EXIT    STRATQ1A.49     
     *, MIN_TROP_LEV       !IN    MIN LEVEL OF TROPOPAUSE                  STRATQ1A.50     
                                                                           STRATQ1A.51     
      CHARACTER                                                            STRATQ1A.52     
     *  CMESSAGE*(*)                                                       STRATQ1A.53     
                                                                           STRATQ1A.54     
      REAL                                                                 STRATQ1A.55     
     * PSTAR(P_FIELD)          !IN   PRIMARY MODEL ARRAY FOR PSTAR FIELD   STRATQ1A.56     
     *,OROG(P_FIELD)           !IN   PRIMARY MODEL OROGRAPHY               STRATQ1A.57     
     *,P_EXNER_HALF(P_FIELD,P_LEVELS+1) !IN  EXNER PRESS ON 1/2 LVLS       STRATQ1A.58     
     *,THETA(P_FIELD,P_LEVELS) !IN PRIMARY MODEL ARRAY FOR THETA FIELD     STRATQ1A.59     
     *,Q(P_FIELD,Q_LEVELS)     !IN PRIMARY MODEL ARRAY FOR HUMIDITY        STRATQ1A.60     
     *,AK (P_LEVELS)            !IN   } hybrid coords (A and B values)     STRATQ1A.63     
     *,BK (P_LEVELS)            !IN   } for full model levels              STRATQ1A.64     
     *,AKH(P_LEVELS+1)          !IN   } hybrid coords (A and B values)     STRATQ1A.65     
     *,BKH(P_LEVELS+1)          !IN   } for half model levels              STRATQ1A.66     
C*---------------------------------------------------------------------    STRATQ1A.68     
                                                                           STRATQ1A.69     
C*L  WORKSPACE USAGE:-------------------------------------------------     STRATQ1A.70     
      REAL                                                                 STRATQ1A.71     
     * TROP_T(P_FIELD)  ! OUTPUT TEMPS OF TROPOPAUSE                       STRATQ1A.72     
     *,TROP_P(P_FIELD)  ! OUTPUT PRESSURE OF TROPOPAUSE                    STRATQ1A.73     
     *,TROP_Z(P_FIELD)  ! OUTPUT HEIGHT OF TROPOPAUSE PRESSURE SURFACE     STRATQ1A.74     
     *,MODEL_HALF_HEIGHT(P_FIELD,P_LEVELS+1) !OUT HEIGHTS OF MODEL HALF    STRATQ1A.75     
     *, PHI_STAR(P_FIELD)     ! Geopotential                               STRATQ1A.76     
C*---------------------------------------------------------------------    STRATQ1A.77     
                                                                           STRATQ1A.78     
C*L EXTERNAL SUBROUTINES CALLED---------------------------------------     STRATQ1A.79     
      EXTERNAL V_INT_ZH,TROP,HMRTORH                                       STRATQ1A.80     
C*---------------------------------------------------------------------    STRATQ1A.81     
                                                                           STRATQ1A.82     
C    DEFINE LOCAL VARIABLES                                                STRATQ1A.83     
      INTEGER K,I   ! LOOP COUNTERS IN ROUTINE                             STRATQ1A.84     
      REAL MAXSTQ   ! MAX ALLOWED STRATO MIXING RATIO                      STRATQ1A.85     
      REAL MAXSTRH  ! MAX ALLOWED STRATO RELATIVE HUMIDITY                 STRATQ1A.86     
      REAL MINSTQ   ! MIN ALLOWED STRATO MIXING RATIO                      STRATQ1A.87     
      REAL MINTROP  ! MIN ALLOWED TROP PRESSURE                            STRATQ1A.88     
      REAL PHERE    ! pressure at a model level                            STRATQ1A.89     
      REAL TROP_MAX,TROP_MIN ! diagnostic info - range of TROP_P           STRATQ1A.90     
      PARAMETER (MAXSTQ=3.E-6,MAXSTRH=10.,MINTROP=10000.)                  STRATQ1A.91     
      PARAMETER (MINSTQ=1.E-6)                                             STRATQ1A.92     
                                                                           STRATQ1A.93     
      ICODE=0                                                              STRATQ1A.94     
      CMESSAGE=' '                                                         STRATQ1A.95     
                                                                           STRATQ1A.96     
CL--------- Get MODEL_HALF_HEIGHTS                                         STRATQ1A.97     
CL--------------------------------                                         STRATQ1A.98     
      DO 100 I=1,P_FIELD                                                   STRATQ1A.99     
      PHI_STAR(I)=OROG(I)*G                                                STRATQ1A.100    
100   CONTINUE                                                             STRATQ1A.101    
      CALL V_INT_ZH(P_EXNER_HALF,THETA,Q,PHI_STAR,                         STRATQ1A.102    
     *              MODEL_HALF_HEIGHT,P_FIELD,P_LEVELS,Q_LEVELS)           STRATQ1A.103    
                                                                           STRATQ1A.104    
CL--------- Get tropopause pressure TROP_P                                 STRATQ1A.105    
CL----------------------------------------                                 STRATQ1A.106    
      CALL TROP(PSTAR,THETA,P_EXNER_HALF,MODEL_HALF_HEIGHT,TROP_T,         STRATQ1A.107    
     &    TROP_P,TROP_Z,P_FIELD,P_LEVELS,MIN_TROP_LEV,AKH,BKH)             STRATQ1A.108    
                                                                           STRATQ1A.109    
CL--------- Diagnostic print of TROP_P range                               STRATQ1A.110    
CL------------------------------------------                               STRATQ1A.111    
      TROP_MAX=TROP_P(1)                                                   STRATQ1A.112    
      DO 200 I=2,P_FIELD                                                   STRATQ1A.113    
      IF(TROP_P(I).GT.TROP_MAX)THEN                                        STRATQ1A.114    
        TROP_MAX=TROP_P(I)                                                 STRATQ1A.115    
      ENDIF                                                                STRATQ1A.116    
200   CONTINUE                                                             STRATQ1A.117    
                                                                           STRATQ1A.118    
      TROP_MIN=TROP_P(1)                                                   STRATQ1A.119    
      DO 210 I=2,P_FIELD                                                   STRATQ1A.120    
      IF(TROP_P(I).LT.TROP_MIN)THEN                                        STRATQ1A.121    
        TROP_MIN=TROP_P(I)                                                 STRATQ1A.122    
      ENDIF                                                                STRATQ1A.123    
210   CONTINUE                                                             STRATQ1A.124    
                                                                           STRATQ1A.125    
      TROP_MAX=TROP_MAX*.01                                                STRATQ1A.126    
      TROP_MIN=TROP_MIN*.01                                                STRATQ1A.127    
      WRITE(6,*)' STRATQ diagnostics---TROPOPAUSE range is ',              STRATQ1A.128    
     *          TROP_MAX,'mb to ',TROP_MIN,'mb'                            STRATQ1A.129    
                                                                           STRATQ1A.130    
CL--------- Reset TROP_P if less than MINTROP                              STRATQ1A.131    
CL-------------------------------------------                              STRATQ1A.132    
C (TROP routine currently returns RMDI(-2**30) if no tropopause found!)    TJ050593.121    
      DO 300 I=1,P_FIELD                                                   STRATQ1A.134    
      IF(TROP_P(I).LT.MINTROP)THEN                                         STRATQ1A.135    
        TROP_P(I)=MINTROP                                                  STRATQ1A.136    
      ENDIF                                                                STRATQ1A.137    
300   CONTINUE                                                             STRATQ1A.138    
                                                                           STRATQ1A.139    
      TROP_MIN=MINTROP*.01                                                 STRATQ1A.140    
      WRITE(6,*)' Minimum tropopause pressure reset to ',                  STRATQ1A.141    
     *          TROP_MIN,'mb'                                              STRATQ1A.142    
                                                                           STRATQ1A.143    
CL--------- Reset Q above TROP_P (must be less than MAXSTQ)                STRATQ1A.144    
CL---------------------------------------------------------                STRATQ1A.145    
      DO 400 K=MIN_TROP_LEV,Q_LEVELS                                       STRATQ1A.146    
       DO 410 I=1, P_FIELD                                                 STRATQ1A.147    
       PHERE = AK(K) + BK(K)*PSTAR(I)                                      STRATQ1A.148    
        IF ( PHERE .LT. TROP_P(I)) THEN                                    STRATQ1A.149    
        Q(I,K) = MIN ( Q(I,K), MAXSTQ )                                    STRATQ1A.150    
        Q(I,K) = MAX ( Q(I,K), MINSTQ )                                    STRATQ1A.151    
        ENDIF                                                              STRATQ1A.152    
410    CONTINUE                                                            STRATQ1A.153    
400   CONTINUE                                                             STRATQ1A.154    
                                                                           STRATQ1A.155    
CL--------- Convert Q to RH                                                STRATQ1A.156    
CL-------------------------                                                STRATQ1A.157    
      CALL HMRTORH (1,AK,BK,P_EXNER_HALF,                                  STRATQ1A.158    
     *              PSTAR,THETA,Q,                                         STRATQ1A.159    
     *              P_FIELD,P_LEVELS,Q_LEVELS,                             STRATQ1A.161    
     *              AKH,BKH,ICODE,CMESSAGE)                                STRATQ1A.162    
      IF(ICODE.GT.0)GOTO 999                                               STRATQ1A.163    
                                                                           STRATQ1A.164    
CL--------- Reset RH above TROP_P (must be less than MAXSTRH)              STRATQ1A.165    
CL---------------------------------------------------------                STRATQ1A.166    
      DO 500 K=MIN_TROP_LEV,Q_LEVELS                                       STRATQ1A.167    
       DO 510 I=1, P_FIELD                                                 STRATQ1A.168    
       PHERE = AK(K) + BK(K)*PSTAR(I)                                      STRATQ1A.169    
        IF ( PHERE .LT. TROP_P(I)) THEN                                    STRATQ1A.170    
        Q(I,K) = MIN ( Q(I,K), MAXSTRH)                                    STRATQ1A.171    
        ENDIF                                                              STRATQ1A.172    
510    CONTINUE                                                            STRATQ1A.173    
500   CONTINUE                                                             STRATQ1A.174    
                                                                           STRATQ1A.175    
CL----------Convert Q back to mixing ratio                                 STRATQ1A.176    
CL----------------------------------------                                 STRATQ1A.177    
      CALL HMRTORH (2,AK,BK,P_EXNER_HALF,                                  STRATQ1A.178    
     *              PSTAR,THETA,Q,                                         STRATQ1A.179    
     *              P_FIELD,P_LEVELS,Q_LEVELS,                             STRATQ1A.181    
     *              AKH,BKH,ICODE,CMESSAGE)                                STRATQ1A.182    
      IF(ICODE.GT.0)GOTO 999                                               STRATQ1A.183    
                                                                           STRATQ1A.184    
      ICODE=0                                                              STRATQ1A.185    
      CMESSAGE=' '                                                         STRATQ1A.186    
                                                                           STRATQ1A.187    
999   CONTINUE                                                             SB100793.491    
      RETURN                                                               SB100793.492    
      END                                                                  STRATQ1A.189    
*ENDIF                                                                     STRATQ1A.190