*IF DEF,CONTROL,AND,DEF,ATMOS                                              ST_DIA21.2      
C ******************************COPYRIGHT******************************    GTS2F400.9847   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.9848   
C                                                                          GTS2F400.9849   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.9850   
C restrictions as set forth in the contract.                               GTS2F400.9851   
C                                                                          GTS2F400.9852   
C                Meteorological Office                                     GTS2F400.9853   
C                London Road                                               GTS2F400.9854   
C                BRACKNELL                                                 GTS2F400.9855   
C                Berkshire UK                                              GTS2F400.9856   
C                RG12 2SZ                                                  GTS2F400.9857   
C                                                                          GTS2F400.9858   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.9859   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.9860   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.9861   
C Modelling at the above address.                                          GTS2F400.9862   
C ******************************COPYRIGHT******************************    GTS2F400.9863   
C                                                                          GTS2F400.9864   
CLL Subroutine ST_DIAG2---------------------------------------------       ST_DIA21.3      
CLL                                                                        ST_DIA21.4      
CLL  Model            Modification history from model version 3.0:         ST_DIA21.5      
CLL version  Date                                                          ST_DIA21.6      
CLL  3.1   9/02/93  : added comdeck CHSUNITS to define NUNIST for          RS030293.230    
CLL                   comdeck CCONTROL                                     RS030293.231    
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.189    
CLL                   portability.  Author Tracey Smith.                   TS150793.190    
CLL  3.2  13/04/93  Dynamic allocation of main arrays. PFLD removed        @DYALLOC.3292   
CLL                 - not used. R T H Barnes.                              @DYALLOC.3293   
CLL   3.3  15/12/93  Remove hardwired LEVNO_ABOVE_BOUNDARY=5 and           CW151293.1      
CLL        change name to LEVNO_PMSL_CALC, determined as first model       CW151293.2      
CLL        level above eta=0.795       C.Wilson                            CW151293.3      
CLL   3.4  21/9/94  Calculates model level geopotential heights in         ASW3F304.1      
CLL                 metres             S.A.Woltering                       ASW3F304.2      
CLL  3.4  29/11/94 Add P_FIELDDA,P_LEVELSDA for portable dyn.allocn.       ANF1F304.10     
CLL  4.1  15/05/96 Add code to process tracer data.                        ADP0F401.60     
CLL                Including TR_VARSDA         D.Podd                      ADP0F401.61     
!LL   4.3  10/02/97  Added PPX arguments to COPY_DIAG   P.Burton           GPB1F403.1276   
!LL   4.4  25/09/97  Fix problems when tracers included and no tracer      ADP0F404.1      
!LL                  diagnostics required.  D. Podd.                       ADP0F404.2      
!LL   4.4  09/09/97  Remove calculation of LEVNO_PMSL_CALC. D. Robinson    GDR3F404.1      
!LL   4.5 20/04/98   Initialise STASHWORK so that PHY_DIAG does not        GSM1F405.458    
!LL                  need to initialise halos S.D.Mullerworth              GSM1F405.459    
!LL   4.5  05/06/98  New arguments L_VINT_TP, L_LSPICE for PHY_DIAG.       GDR4F405.10     
!ll                  D. Robinson                                           GDR4F405.11     
CLL                                                                        ST_DIA21.7      
CLL Purpose : To provide the interface for PHY_DIAG                        ST_DIA21.8      
CLL                                                                        ST_DIA21.9      
CLL Control routine for CRAY YMP                                           ST_DIA21.10     
CLL                                                                        ST_DIA21.11     
CLL Programming standard; Unified Model Documentation Paper No. 3          ST_DIA21.12     
CLL                       version no. 1, dated 15/01/90                    ST_DIA21.13     
CLL                                                                        ST_DIA21.14     
CLL Logical components covered : D4                                        ST_DIA21.15     
CLL                                                                        ST_DIA21.16     
CLL System task : P0                                                       ST_DIA21.17     
CLL                                                                        ST_DIA21.18     
CLL Documentation : Unified Model Documentation Paper No P0                ST_DIA21.19     
CLL                                                                        ST_DIA21.20     
CLLEND---------------------------------------------------------------      ST_DIA21.21     
C*L Arguments                                                              ST_DIA21.24     
                                                                           ST_DIA21.26     

      SUBROUTINE ST_DIAG2( NUM_STASH_LEVELSDA,INT16,                        2,7@DYALLOC.3294   
     &                     P_FIELDDA,P_LEVELSDA,TR_VARSDA,                 ADP0F401.62     
*CALL ARGSIZE                                                              @DYALLOC.3295   
*CALL ARGD1                                                                @DYALLOC.3296   
*CALL ARGDUMA                                                              @DYALLOC.3297   
*CALL ARGDUMO                                                              @DYALLOC.3298   
*CALL ARGDUMW                                                              GKR1F401.269    
*CALL ARGSTS                                                               @DYALLOC.3299   
*CALL ARGPTRA                                                              @DYALLOC.3300   
*CALL ARGPTRO                                                              @DYALLOC.3301   
*CALL ARGCONA                                                              @DYALLOC.3302   
*CALL ARGPPX                                                               GKR0F305.996    
*CALL ARGFLDPT                                                             GSM1F405.460    
     &                    ICODE,CMESSAGE)                                  @DYALLOC.3303   
                                                                           @DYALLOC.3304   
      IMPLICIT NONE                                                        ST_DIA21.28     
C*L                                                                        ST_DIA21.29     
*CALL CMAXSIZE                                                             @DYALLOC.3305   
*CALL CSUBMODL                                                             GSS1F305.939    
*CALL TYPSIZE                                                              @DYALLOC.3306   
*CALL TYPD1                                                                @DYALLOC.3307   
*CALL TYPDUMA                                                              @DYALLOC.3308   
*CALL TYPDUMO                                                              @DYALLOC.3309   
*CALL TYPDUMW                                                              GKR1F401.270    
*CALL TYPSTS                                                               @DYALLOC.3310   
*CALL TYPPTRA                                                              @DYALLOC.3311   
*CALL TYPPTRO                                                              @DYALLOC.3312   
*CALL TYPCONA                                                              @DYALLOC.3313   
*CALL PPXLOOK                                                              GKR0F305.997    
*CALL TYPFLDPT                                                             GSM1F405.461    
                                                                           ST_DIA21.30     
      INTEGER                                                              ST_DIA21.31     
     &        INT16,            ! Dummy variable for STASH_MAXLEN(16)      ST_DIA21.32     
     &        ICODE,            ! Out return code : 0 Normal exit          ST_DIA21.33     
C                               !                 : >0 Error exit          ST_DIA21.34     
     &        NUM_STASH_LEVELSDA! Extra copy NUM_STASH_LEVELS to allow     @DYALLOC.3314   
C                               ! workspace to be dynamically allocated    ST_DIA21.36     
     &      ,P_FIELDDA          ! No. of points in field ( " )             ANF1F304.12     
     &      ,P_LEVELSDA         ! No. of levels (for port.dyn.allocn.)     ANF1F304.13     
     &      ,TR_VARSDA          ! No. of tracers (for port.dyn.allocn.)    ADP0F401.63     
                                                                           ST_DIA21.37     
      CHARACTER*(80)                                                       TS150793.191    
     &        CMESSAGE          ! Out error message if ICODE > 0           ST_DIA21.39     
                                                                           ST_DIA21.40     
*CALL CHSUNITS                                                             RS030293.232    
*CALL CCONTROL                                                             ST_DIA21.45     
*CALL C_R_CP                                                               CW151293.4      
*CALL C_ETA_PMSL                                                           GDR3F404.2      
*CALL CTRACERA                                                             ADP0F401.64     
                                                                           ST_DIA21.46     
CL External subroutines called                                             ST_DIA21.47     
                                                                           ST_DIA21.48     
      EXTERNAL                                                             ST_DIA21.49     
     &        STASH,                                                       ST_DIA21.50     
     &        PHY_DIAG,                                                    ST_DIA21.51     
     &        TIMER                                                        ST_DIA21.52     
                                                                           ST_DIA21.53     
CL Locally dynamically allocated work area                                 ST_DIA21.54     
                                                                           ST_DIA21.55     
      REAL                                                                 ST_DIA21.56     
     &        STASHWORK(INT16),                                            ST_DIA21.57     
     &        T_P_PRESS(NUM_STASH_LEVELSDA),                               @DYALLOC.3315   
     &        HTS_PRESS(NUM_STASH_LEVELSDA),                               @DYALLOC.3316   
     &        REL_HUMID_PRESS(NUM_STASH_LEVELSDA),                         @DYALLOC.3317   
     &        WBPT_PRESS(NUM_STASH_LEVELSDA),                              @DYALLOC.3318   
     &        TH_ADV_PRESS(NUM_STASH_LEVELSDA),                            @DYALLOC.3319   
     &        PRESS_LEVS(NUM_STASH_LEVELSDA),                              ASW3F304.3      
     &        TR_PRESS(TR_VARSDA+1,NUM_STASH_LEVELSDA),                    ADP0F401.65     
     &        HEIGHT(P_FIELDDA,P_LEVELSDA)                                 ASW3F304.4      
                                                                           ST_DIA21.64     
C Local variables                                                          ST_DIA21.65     
                                                                           ST_DIA21.66     
      INTEGER                                                              ST_DIA21.67     
     &        I,J,                                                         CW151293.5      
     &        NI,                                                          ST_DIA21.69     
     &        K,                                                           ST_DIA21.70     
     &        ISL,                                                         ST_DIA21.71     
     &        BL,                                                          ST_DIA21.72     
     &        TL,                                                          ST_DIA21.73     
     &        LEVEL,                                                       ASW3F304.5      
     &        LAST_POINT,                                                  ASW3F304.6      
     &        FIRST_POINT                                                  ASW3F304.7      
     &       ,ITR                                                          ADP0F404.3      
     &       ,STASH_TR_FIRST                                               ADP0F401.66     
     &       ,STASH_TR_LAST                                                ADP0F401.67     
     &       ,im_ident      !  Internal Model Identifier                   GDR4F305.222    
     &       ,im_index      !  Internal Model Index for Stash arrays       GDR4F305.223    
                                                                           ST_DIA21.75     
      INTEGER                                                              ST_DIA21.76     
     &        T_P_LEVS,                                                    ST_DIA21.77     
     &        HTS_LEVS, H2_P_LEVS,                                         ST_DIA21.78     
     &        REL_HUMID_LEVS,                                              ST_DIA21.79     
     &        WBPT_LEVS,                                                   ST_DIA21.80     
     &        TH_ADV_P_LEVS                                                ST_DIA21.82     
     &       ,TR_PRESS_LEVS(TR_VARSDA+1)                                   ADP0F401.68     
     &       ,TR_P_FIELD_DA   ! P_FIELD for DA of tracer fields            ADP0F401.69     
                                                                           ST_DIA21.83     
      INTEGER                                                              ST_DIA21.84     
     &        H2_IND(NUM_STASH_LEVELSDA)                                   @DYALLOC.3321   
                                                                           ST_DIA21.86     
      INTEGER                                                              ST_DIA21.87     
     &        PT_TRACER(TR_VARSDA+1)                                       ADP0F401.70     
      INTEGER                                                              ADP0F401.71     
     &        PT201,PT202,PT203,PT204,PT205,PT206,PT207,PT208,PT209,       ST_DIA21.88     
     &  PT210,PT211,PT212,PT213,PT214,PT215,PT216,PT217,PT218,PT219,       ST_DIA21.89     
     &  PT220,PT221,PT222,PT223,PT224,PT225                                ASW3F304.8      
                                                                           ST_DIA21.91     
      REAL                                                                 CW151293.9      
     &        EW_SPACE,                                                    ST_DIA21.93     
     &        NS_SPACE                                                     ST_DIA21.94     
      LOGICAL                                                              ADP0F401.72     
     &        SF_TRACER(TR_VARSDA+1)                                       ADP0F401.73     
                                                                           ASW3F304.9      
CL Initialisation                                                          ASW3F304.10     
      FIRST_POINT=FIRST_FLD_PT                                             GSM1F405.462    
      LAST_POINT=LAST_P_FLD_PT                                             GSM1F405.463    
                                                                           ASW3F304.13     
CL Internal Structure:                                                     ST_DIA21.95     
                                                                           ST_DIA21.96     
!     Set to atmosphere internal model                                     GDR4F305.224    
      im_ident = atmos_im                                                  GDR4F305.225    
      im_index = internal_model_index(im_ident)                            GDR4F305.226    
                                                                           GDR4F305.227    
                                                                           ST_DIA21.97     
CL----- Calculate additional diagnostic quantities------------------       ST_DIA21.98     
                                                                           ST_DIA21.99     
CL------------ Extract required pressures for T_P ----------------------   ST_DIA21.100    
      NS_SPACE=A_REALHD(2)                                                 ST_DIA21.101    
      EW_SPACE=A_REALHD(1)                                                 ST_DIA21.102    
                                                                           ST_DIA21.103    
      ISL=STINDEX(1,203,16,im_index)                                       GDR4F305.228    
      IF(ISL.GT.0) THEN                                                    ST_DIA21.105    
            NI=-STLIST(10,ISL)                                             ST_DIA21.106    
            T_P_LEVS=STASH_LEVELS(1,NI)                                    ST_DIA21.107    
            DO K =1,T_P_LEVS                                               ST_DIA21.108    
              T_P_PRESS(K)=STASH_LEVELS(K+1,NI)/1000.0                     ST_DIA21.109    
            ENDDO                                                          ST_DIA21.110    
      ELSE                                                                 ST_DIA21.111    
        T_P_LEVS=1                                                         ST_DIA21.112    
      END IF                                                               ST_DIA21.113    
                                                                           ST_DIA21.114    
CL------------ Extract required pressures for Heights ------------------   ST_DIA21.115    
                                                                           ST_DIA21.116    
      ISL=STINDEX(1,202,16,im_index)                                       GDR4F305.229    
      IF(ISL.GT.0) THEN                                                    ST_DIA21.118    
            NI=-STLIST(10,ISL)                                             ST_DIA21.119    
            HTS_LEVS=STASH_LEVELS(1,NI)                                    ST_DIA21.120    
            DO K =1,HTS_LEVS                                               ST_DIA21.121    
              HTS_PRESS(K)=STASH_LEVELS(K+1,NI)/1000.0                     ST_DIA21.122    
            ENDDO                                                          ST_DIA21.123    
      ELSE                                                                 ST_DIA21.124    
        HTS_LEVS=1                                                         ST_DIA21.125    
      END IF                                                               ST_DIA21.126    
                                                                           ST_DIA21.127    
                                                                           ST_DIA21.128    
CL------------ Extract required pressures for Humidities ---------------   ST_DIA21.129    
                                                                           ST_DIA21.130    
      ISL=STINDEX(1,204,16,im_index)                                       GDR4F305.230    
      IF(ISL.GT.0) THEN                                                    ST_DIA21.132    
        IF(STLIST(10,ISL).LT.0) THEN                                       ST_DIA21.133    
          IF(STLIST(11,ISL).EQ.2) THEN                                     ST_DIA21.134    
            NI=-STLIST(10,ISL)                                             ST_DIA21.135    
            REL_HUMID_LEVS=STASH_LEVELS(1,NI)                              ST_DIA21.136    
            DO K =1,REL_HUMID_LEVS                                         ST_DIA21.137    
              REL_HUMID_PRESS(K)=STASH_LEVELS(K+1,NI)/1000.0               ST_DIA21.138    
            ENDDO                                                          ST_DIA21.139    
          ELSE                                                             ST_DIA21.140    
             CMESSAGE='ST_DIAG2 : Level not pressure for REL_HUMID'        ST_DIA21.141    
            ICODE=1                                                        ST_DIA21.142    
            RETURN                                                         ST_DIA21.143    
          END IF                                                           ST_DIA21.144    
        ELSE                                                               ST_DIA21.145    
           CMESSAGE='ST_DIAG2 : Level not a levels list for REL_HUMID'     ST_DIA21.146    
          ICODE=1                                                          ST_DIA21.147    
          RETURN                                                           ST_DIA21.148    
        END IF                                                             ST_DIA21.149    
      ELSE                                                                 ST_DIA21.150    
        REL_HUMID_LEVS=1                                                   ST_DIA21.151    
      END IF                                                               ST_DIA21.152    
                                                                           ST_DIA21.153    
                                                                           ST_DIA21.154    
                                                                           ST_DIA21.155    
CL------------ Extract required pressures for Wet bulb pot temp---------   ST_DIA21.156    
                                                                           ST_DIA21.157    
      ISL=STINDEX(1,205,16,im_index)                                       GDR4F305.231    
      IF(ISL.GT.0) THEN                                                    ST_DIA21.159    
        IF(STLIST(10,ISL).LT.0) THEN                                       ST_DIA21.160    
          IF(STLIST(11,ISL).EQ.2) THEN                                     ST_DIA21.161    
            NI=-STLIST(10,ISL)                                             ST_DIA21.162    
            WBPT_LEVS=STASH_LEVELS(1,NI)                                   ST_DIA21.163    
            DO K =1,WBPT_LEVS                                              ST_DIA21.164    
              WBPT_PRESS(K)=STASH_LEVELS(K+1,NI)/1000.0                    ST_DIA21.165    
            ENDDO                                                          ST_DIA21.166    
          ELSE                                                             ST_DIA21.167    
             CMESSAGE='ST_DIAG2 : Level not pressure for WBPT'             ST_DIA21.168    
            ICODE=1                                                        ST_DIA21.169    
            RETURN                                                         ST_DIA21.170    
          END IF                                                           ST_DIA21.171    
        ELSE                                                               ST_DIA21.172    
           CMESSAGE='ST_DIAG2 : Level not a levels list for WBPT'          ST_DIA21.173    
          ICODE=1                                                          ST_DIA21.174    
          RETURN                                                           ST_DIA21.175    
        END IF                                                             ST_DIA21.176    
      ELSE                                                                 ST_DIA21.177    
        WBPT_LEVS=1                                                        ST_DIA21.178    
      END IF                                                               ST_DIA21.179    
CL------------ Extract required pressures for Thermal advection --------   ST_DIA21.180    
                                                                           ST_DIA21.181    
      ISL=STINDEX(1,219,16,im_index)                                       GDR4F305.232    
      IF(ISL.GT.0) THEN                                                    ST_DIA21.183    
        IF(STLIST(10,ISL).LT.0) THEN                                       ST_DIA21.184    
          IF(STLIST(11,ISL).EQ.2) THEN                                     ST_DIA21.185    
            NI=-STLIST(10,ISL)                                             ST_DIA21.186    
            TH_ADV_P_LEVS=STASH_LEVELS(1,NI)                               ST_DIA21.187    
            DO K =1,TH_ADV_P_LEVS                                          ST_DIA21.188    
              TH_ADV_PRESS(K)=STASH_LEVELS(K+1,NI)/1000.0                  ST_DIA21.189    
            ENDDO                                                          ST_DIA21.190    
          ELSE                                                             ST_DIA21.191    
             CMESSAGE='ST_DIAG2 : Level not pressure for THADV'            ST_DIA21.192    
            ICODE=1                                                        ST_DIA21.193    
            RETURN                                                         ST_DIA21.194    
          END IF                                                           ST_DIA21.195    
        ELSE                                                               ST_DIA21.196    
           CMESSAGE='ST_DIAG2 : Level not a levels list for THADV'         ST_DIA21.197    
          ICODE=1                                                          ST_DIA21.198    
          RETURN                                                           ST_DIA21.199    
        END IF                                                             ST_DIA21.200    
      ELSE                                                                 ST_DIA21.201    
        TH_ADV_P_LEVS=1                                                    ST_DIA21.202    
      END IF                                                               ST_DIA21.203    
                                                                           ST_DIA21.204    
CL------------ Extract required pressures for Tracers ------------------   ADP0F401.74     
                                                                           ADP0F401.75     
      STASH_TR_FIRST=226                                                   ADP0F401.76     
      STASH_TR_LAST=254                                                    ADP0F401.77     
C     ITR is a count of tracers found to be using this diagnostic          ADP0F404.4      
      ITR=0                                                                ADP0F404.5      
      IF (TR_VARS.GT.0) THEN                                               ADP0F404.6      
                                                                           ADP0F404.7      
C     Initialize PT_TRACER and SF_TRACER arrays                            ADP0F404.8      
        DO I=1,TR_VARS                                                     ADP0F404.9      
          PT_TRACER(I)=1                                                   ADP0F404.10     
          SF_TRACER(I)=.FALSE.                                             ADP0F404.11     
        END DO                                                             ADP0F404.12     
                                                                           ADP0F404.13     
      DO J=STASH_TR_FIRST,STASH_TR_LAST                                    ADP0F401.79     
        ISL=STINDEX(1,J,16,im_index)                                       ADP0F401.80     
        IF(ISL.GT.0) THEN                                                  ADP0F401.81     
          IF(STLIST(10,ISL).LT.0) THEN                                     ADP0F401.82     
            IF(STLIST(11,ISL).EQ.2) THEN                                   ADP0F401.83     
                ITR=ITR+1                                                  ADP0F404.14     
              NI=-STLIST(10,ISL)                                           ADP0F401.85     
                TR_PRESS_LEVS(ITR)=STASH_LEVELS(1,NI)                      ADP0F404.15     
                DO K=1,TR_PRESS_LEVS(ITR)                                  ADP0F404.16     
                  TR_PRESS(ITR,K)=STASH_LEVELS(K+1,NI)/1000.0              ADP0F404.17     
              ENDDO                                                        ADP0F401.89     
                PT_TRACER(ITR)=SI(J,16,im_index)                           ADP0F404.18     
                SF_TRACER(ITR)=SF(J,16)                                    ADP0F404.19     
            ELSE                                                           ADP0F401.92     
               CMESSAGE='ST_DIAG2 : Level not pressure for Tracers'        ADP0F401.93     
              ICODE=1                                                      ADP0F401.94     
              RETURN                                                       ADP0F401.95     
            END IF                                                         ADP0F401.96     
          ELSE                                                             ADP0F401.97     
             CMESSAGE='ST_DIAG2 : Level not a levels list for Tracers'     ADP0F401.98     
            ICODE=1                                                        ADP0F401.99     
            RETURN                                                         ADP0F401.100    
          END IF                                                           ADP0F401.101    
        END IF                                                             ADP0F401.102    
      END DO                                                               ADP0F401.103    
      END IF                                                               ADP0F404.20     
                                                                           ADP0F401.104    
C     Set last (or only) values in tracer pointer arrays                   ADP0F401.105    
      PT_TRACER(TR_VARS+1)=1                                               ADP0F401.106    
      SF_TRACER(TR_VARS+1)=.FALSE.                                         ADP0F401.107    
                                                                           ADP0F401.108    
C     Set size of TR_P_FIELD_DA depending on whether any tracers           ADP0F404.21     
C     are using this diagnostic. (Used for dynamic allocation of           ADP0F404.22     
C     tracer arrays in phy_diag).                                          ADP0F404.23     
      IF (ITR.GT.0) THEN                                                   ADP0F404.24     
        TR_P_FIELD_DA=P_FIELD                                              ADP0F401.113    
      ELSE                                                                 ADP0F401.114    
        TR_P_FIELD_DA=1                                                    ADP0F401.115    
      END IF                                                               ADP0F404.25     
                                                                           ADP0F401.117    
CL----- check height available for calculation of height**2 -----------    ST_DIA21.205    
                                                                           ST_DIA21.206    
                                                                           ST_DIA21.207    
      IF (SF(224,16)) THEN                                                 ST_DIA21.208    
        IF (.NOT.SF(202,16)) THEN                                          ST_DIA21.209    
          CMESSAGE='ST_DIAG2 : ERROR h**2 requires H at same timestep'     ST_DIA21.210    
          ICODE=1                                                          ST_DIA21.211    
          GOTO 999                                                         ST_DIA21.212    
         ELSE                                                              ST_DIA21.213    
      ISL=STINDEX(1,224,16,im_index)                                       GDR4F305.233    
          IF(ISL.GT.0) THEN                                                ST_DIA21.215    
            NI=-STLIST(10,ISL)                                             ST_DIA21.216    
            H2_P_LEVS=STASH_LEVELS(1,NI)                                   ST_DIA21.217    
            DO K =1,H2_P_LEVS                                              ST_DIA21.218    
              PRESS_LEVS(K)=STASH_LEVELS(K+1,NI)/1000.0                    ST_DIA21.219    
              DO I=1,HTS_LEVS                                              ST_DIA21.220    
                IF(PRESS_LEVS(K).EQ.HTS_PRESS(I)) THEN                     ST_DIA21.221    
                  H2_IND(k)=I                                              ST_DIA21.222    
                ENDIF                                                      ST_DIA21.223    
              ENDDO                                                        ST_DIA21.224    
            ENDDO                                                          ST_DIA21.225    
          ELSE                                                             ST_DIA21.226    
            H2_P_LEVS=1                                                    ST_DIA21.227    
          END IF                                                           ST_DIA21.228    
         ENDIF                                                             ST_DIA21.229    
      ELSE                                                                 ST_DIA21.230    
        H2_P_LEVS=1                                                        ST_DIA21.231    
      END IF                                                               ST_DIA21.232    
                                                                           ST_DIA21.233    
                                                                           ST_DIA21.234    
      IF(SF(202,16)) THEN                                                  ST_DIA21.235    
        SF(201,16)=.TRUE. !making sure model half heights switched         ST_DIA21.236    
      ENDIF               !on if heights on pressure surface is reqd       ST_DIA21.237    
      PT202=SI(202,16,im_index)                                            GDR4F305.234    
      PT203=SI(203,16,im_index)                                            GDR4F305.235    
      PT204=SI(204,16,im_index)                                            GDR4F305.236    
      PT205=SI(205,16,im_index)                                            GDR4F305.237    
      PT206=SI(206,16,im_index)                                            GDR4F305.238    
      PT207=SI(207,16,im_index)                                            GDR4F305.239    
      PT208=SI(208,16,im_index)                                            GDR4F305.240    
      PT209=SI(209,16,im_index)                                            GDR4F305.241    
      PT210=SI(210,16,im_index)                                            GDR4F305.242    
      PT211=SI(211,16,im_index)                                            GDR4F305.243    
      PT212=SI(212,16,im_index)                                            GDR4F305.244    
      PT213=SI(213,16,im_index)                                            GDR4F305.245    
      PT214=SI(214,16,im_index)                                            GDR4F305.246    
      PT215=SI(215,16,im_index)                                            GDR4F305.247    
      PT216=SI(216,16,im_index)                                            GDR4F305.248    
      PT217=SI(217,16,im_index)                                            GDR4F305.249    
      PT218=SI(218,16,im_index)                                            GDR4F305.250    
      PT219=SI(219,16,im_index)                                            GDR4F305.251    
      PT220=SI(220,16,im_index)                                            GDR4F305.252    
      PT221=SI(221,16,im_index)                                            GDR4F305.253    
      PT222=SI(222,16,im_index)                                            GDR4F305.254    
      PT223=SI(223,16,im_index)                                            GDR4F305.255    
      PT224=SI(224,16,im_index)                                            GDR4F305.256    
      PT225=SI(225,16,im_index)                                            GDR4F305.257    
                                                                           ST_DIA21.263    
      IF(LTIMER) THEN                                                      ST_DIA21.264    
        CALL TIMER('PHY_DIAG',3)                                           ST_DIA21.265    
      END IF                                                               ST_DIA21.266    
                                                                           ST_DIA21.267    
! Initialise STASHWORK as PHY_DIAG avoids MPP halo calculations            GSM1F405.464    
!* DIR$ CACHE_BYPASS STASHWORK                                             GSM1F405.465    
      DO I=1,INT16                                                         GSM1F405.466    
        STASHWORK(I)=0.                                                    GSM1F405.467    
      ENDDO                                                                GSM1F405.468    
                                                                           GSM1F405.469    
      CALL PHY_DIAG(                                                       ST_DIA21.268    
*CALL ARGFLDPT                                                             GSM1F405.470    
C Primary data in                                                          ST_DIA21.269    
                                                                           ST_DIA21.270    
     &     D1(JPSTAR),D1(JU(1)),D1(JV(1)),D1(JQ(1)),                       ST_DIA21.271    
     &     D1(JTHETA(1)),D1(JOROG),D1(JP_EXNER(1)),D1(JLAND),D1(JTSTAR),   @DYALLOC.3322   
     &     D1(JTRACER(1,1)),                                               ADP0F401.118    
                                                                           ST_DIA21.273    
C Primary data constants                                                   ST_DIA21.274    
                                                                           ST_DIA21.275    
     &     U_ROWS,P_ROWS,ROW_LENGTH,P_LEVELS,Q_LEVELS,P_FIELD,U_FIELD,     ST_DIA21.276    
     &     A_LEVDEPC(JAK),A_LEVDEPC(JBK),AKH,BKH,EW_SPACE,NS_SPACE,        ST_DIA21.277    
     &     SEC_U_LATITUDE,                                                 ST_DIA21.278    
     &     TR_LEVELS,TR_VARS,TR_P_FIELD_DA,                                ADP0F401.119    
                                                                           ST_DIA21.279    
C STASH variables                                                          ST_DIA21.280    
                                                                           ST_DIA21.281    
     &     T_P_PRESS,HTS_PRESS,REL_HUMID_PRESS,WBPT_PRESS,TH_ADV_PRESS,    ST_DIA21.282    
     &     TR_PRESS,                                                       ADP0F401.120    
     &     H2_IND,                                                         ST_DIA21.283    
                                                                           ST_DIA21.284    
C DIAGNOSTICS OUT                                                          ST_DIA21.285    
                                                                           ST_DIA21.286    
     &     STASHWORK(PT202),STASHWORK(PT203),STASHWORK(PT204),             ST_DIA21.287    
     &     STASHWORK(PT205),STASHWORK(PT206),STASHWORK(PT207),             ST_DIA21.288    
     &     STASHWORK(PT208),STASHWORK(PT209),STASHWORK(PT210),             ST_DIA21.289    
     &     STASHWORK(PT211),STASHWORK(PT212),STASHWORK(PT213),             ST_DIA21.290    
     &     STASHWORK(PT214),STASHWORK(PT215),STASHWORK(PT216),             ST_DIA21.291    
     &     STASHWORK(PT217),STASHWORK(PT218),STASHWORK(PT219),             ST_DIA21.292    
     &     STASHWORK(PT220),STASHWORK(PT221),STASHWORK(PT222),             ST_DIA21.293    
     &     STASHWORK(PT223),STASHWORK(PT224),HEIGHT,                       ASW3F304.15     
     &     STASHWORK,INT16,PT_TRACER,                                      ADP0F401.121    
                                                                           ST_DIA21.295    
C Diagnostic lengths                                                       ST_DIA21.296    
                                                                           ST_DIA21.297    
     &     T_P_LEVS,HTS_LEVS,REL_HUMID_LEVS,WBPT_LEVS,TH_ADV_P_LEVS,       ST_DIA21.298    
     &     H2_P_LEVS,                                                      ST_DIA21.299    
     &     TR_PRESS_LEVS,NUM_STASH_LEVELSDA,                               ADP0F401.122    
                                                                           ST_DIA21.300    
C Diagnostic logical indicators                                            ST_DIA21.301    
                                                                           ST_DIA21.302    
     &     SF(201,16),SF(202,16),SF(203,16),SF(204,16),SF(205,16),         ST_DIA21.303    
     &     SF(206,16),SF(207,16),SF(208,16),SF(209,16),SF(210,16),         ST_DIA21.304    
     &     SF(211,16),SF(212,16),SF(213,16),SF(214,16),SF(215,16),         ST_DIA21.305    
     &     SF(216,16),SF(217,16),SF(218,16),SF(219,16),SF(220,16),         ST_DIA21.306    
     &     SF(221,16),SF(222,16),SF(223,16),SF(224,16),SF(225,16),         ASW3F304.16     
     &     SF_TRACER,                                                      ADP0F401.123    
     &     LEVNO_PMSL_CALC, L_VINT_TP, L_LSPICE,                           GDR4F405.12     
     &     ICODE, CMESSAGE)                                                GDR4F405.13     
                                                                           GDR4F405.14     
          IF (SF(225,16)) THEN                                             ASW3F304.17     
            CALL COPYDIAG_3D(STASHWORK(SI(225,16,im_index)),HEIGHT,        GDR4F305.258    
     &               FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,            ASW3F304.19     
     &               P_LEVELS,STLIST(1,STINDEX(1,225,16,im_index)),        GDR4F305.259    
     &               LEN_STLIST,STASH_LEVELS,NUM_STASH_LEVELS+1,           GDR4F305.260    
     &               im_ident,16,225,                                      GPB1F403.1277   
*CALL ARGPPX                                                               GPB1F403.1278   
     &               ICODE,CMESSAGE)                                       ASW3F304.22     
          ENDIF                                                            ASW3F304.23     
                                                                           ST_DIA21.309    
      IF(LTIMER) THEN                                                      ST_DIA21.310    
        CALL TIMER('PHY_DIAG',4)                                           ST_DIA21.311    
      END IF                                                               ST_DIA21.312    
                                                                           ST_DIA21.313    
      IF(LTIMER) THEN                                                      ST_DIA21.314    
        CALL TIMER('STASH   ',3)                                           ST_DIA21.315    
      END IF                                                               ST_DIA21.316    
                                                                           ST_DIA21.317    
      CALL STASH(a_sm,a_im,16,STASHWORK,                                   GKR0F305.998    
*CALL ARGSIZE                                                              @DYALLOC.3324   
*CALL ARGD1                                                                @DYALLOC.3325   
*CALL ARGDUMA                                                              @DYALLOC.3326   
*CALL ARGDUMO                                                              @DYALLOC.3327   
*CALL ARGDUMW                                                              GKR1F401.271    
*CALL ARGSTS                                                               @DYALLOC.3328   
*CALL ARGPPX                                                               GKR0F305.999    
     &           ICODE,CMESSAGE)                                           @DYALLOC.3332   
                                                                           ST_DIA21.319    
      IF(LTIMER) THEN                                                      ST_DIA21.320    
        CALL TIMER('STASH   ',4)                                           ST_DIA21.321    
      END IF                                                               ST_DIA21.322    
                                                                           ST_DIA21.323    
  999 CONTINUE                                                             ST_DIA21.324    
      RETURN                                                               ST_DIA21.325    
      END                                                                  ST_DIA21.326    
*ENDIF                                                                     ST_DIA21.327