*IF DEF,A15_1A                                                             TESTDI1A.2      
C ******************************COPYRIGHT******************************    GTS2F400.10153  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.10154  
C                                                                          GTS2F400.10155  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.10156  
C restrictions as set forth in the contract.                               GTS2F400.10157  
C                                                                          GTS2F400.10158  
C                Meteorological Office                                     GTS2F400.10159  
C                London Road                                               GTS2F400.10160  
C                BRACKNELL                                                 GTS2F400.10161  
C                Berkshire UK                                              GTS2F400.10162  
C                RG12 2SZ                                                  GTS2F400.10163  
C                                                                          GTS2F400.10164  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.10165  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.10166  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.10167  
C Modelling at the above address.                                          GTS2F400.10168  
C ******************************COPYRIGHT******************************    GTS2F400.10169  
C                                                                          GTS2F400.10170  
CLL  SUBROUTINE TESTDIAG------------------------------------------------   TESTDI1A.3      
CLL                                                                        TESTDI1A.4      
CLL  PURPOSE: CALCULATE SIMPLE TEST DIAGNOSTICS BASED ON A SIMPLE          TESTDI1A.5      
CLL           ANALYTIC FORMULA:                                            TESTDI1A.6      
CLL  VALUE=A*(LATITUDE+90.)+B*LONGITUDE+C*LEVEL+D*FORECAST_HRS             TESTDI1A.7      
CLL  WHERE A=1.0, B=1.0E2, C=1.0E3, D=1.0E4                                TESTDI1A.8      
CLL  AND (LAT,LONG) ARE IN DEGREES, ACTUAL POSITION (ROTATED FOR LAM),     TESTDI1A.9      
CLL  LEVEL IS EITHER MODEL LEVEL OR                                        TESTDI1A.10     
CLL  PRESSURE LEVEL IN MB., AND FORECAST_HRS IN HOURS.                     TESTDI1A.11     
CLL  THESE DIAGNOSTICS ARE TO BE USED FOR CHECKING OUTPUT PROCEDURES       TESTDI1A.12     
CLL  AFTER VARIOUS POST-PROCESSING ROUTES.                                 TESTDI1A.13     
CLL  FOUR DIAGNOSTICS CAN BE CALCULATED:                                   TESTDI1A.14     
CLL  1. SINGLE LEVEL FIELD (LEVEL=0.) AT U POINTS.                         TESTDI1A.15     
CLL  2. SINGLE LEVEL FIELD (LEVEL=0.) AT P POINTS.                         TESTDI1A.16     
CLL  3. MULTI- LEVEL FIELD (LEVEL=PRESS LEVEL) AT P POINTS                 TESTDI1A.17     
CLL  4. MULTI- LEVEL FIELD (LEVEL=MODEL LEVEL) AT P POINTS                 TESTDI1A.18     
CLL                                                                        TESTDI1A.19     
CLL  NOT SUITABLE FOR SINGLE COLUMN USE                                    TESTDI1A.20     
CLL                                                                        TESTDI1A.21     
CLL  MODEL            MODIFICATION HISTORY:                                TESTDI1A.22     
CLL VERSION  DATE                                                          TESTDI1A.23     
CLL   3.1   25/01/93  NEW DECK                             R.RAWLINS       TESTDI1A.24     
CLL                                                                        TESTDI1A.25     
CLL  PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 4,        TESTDI1A.26     
CLL  VERSION 2, DATED 18/01/90                                             TESTDI1A.27     
CLL                                                                        TESTDI1A.28     
CLL  SYSTEM TASK: D4                                                       TESTDI1A.29     
CLL                                                                        TESTDI1A.30     
CLL  LOGICAL COMPONENT:                                                    TESTDI1A.31     
CLL                                                                        TESTDI1A.32     
CLL  DOCUMENTATION:  UMDP NO. D7                                           TESTDI1A.33     
CLL                                                                        TESTDI1A.34     
CLLEND------------------------------------------------------------------   TESTDI1A.35     
C                                                                          TESTDI1A.36     
C*L ARGUMENTS:----------------------------------------------------------   TESTDI1A.37     

      SUBROUTINE TESTDIAG                                                   1,2TESTDI1A.38     
     1 (P_FIELD,U_FIELD,P_ROWS,U_ROWS,ROW_LENGTH,EW_SPACE,NS_SPACE,        TESTDI1A.39     
     2  FIRST_LAT,FIRST_LONG,ELF,PHI_POLE,LAMBDA_POLE,                     TESTDI1A.40     
     3  PRESS_LEVELS_LIST,NO_PRESS_LEVELS,                                 TESTDI1A.41     
     4  MODEL_LEVELS_LIST,NO_MODEL_LEVELS,FORECAST_HRS,                    TESTDI1A.42     
     5  DIAG1,DIAG2,DIAG3,DIAG4,                                           TESTDI1A.43     
     6  QDIA1,QDIA2,QDIA3,QDIA4)                                           TESTDI1A.44     
C                                                                          TESTDI1A.45     
      IMPLICIT NONE                                                        TESTDI1A.46     
C                                                                          TESTDI1A.47     
      INTEGER                                                              TESTDI1A.48     
     *  P_FIELD      !IN   FIRST DIMENSION OF FIELD OF PSTAR               TESTDI1A.49     
     *, U_FIELD      !IN   FIRST DIMENSION OF (U,V) FIELD                  TESTDI1A.50     
     *, P_ROWS       !IN   NO. OF ROWS FOR P FIELD                         TESTDI1A.51     
     *, U_ROWS       !IN   NO. OF ROWS FOR U FIELD                         TESTDI1A.52     
     *, ROW_LENGTH   !IN   NO. OF POINTS PER ROW                           TESTDI1A.53     
     *, NO_MODEL_LEVELS                    !IN MODEL LEVELS FOR OUTPUT     TESTDI1A.54     
     *, NO_PRESS_LEVELS                    !IN PRESS LEVELS FOR OUTPUT     TESTDI1A.55     
     *, FORECAST_HRS                       !IN FORECAST HOURS T+0, ETC     TESTDI1A.56     
C                                                                          TESTDI1A.57     
      LOGICAL                                                              TESTDI1A.58     
     *  ELF              !IN  TRUE IF MODEL IS LAM WITH ROTATED GRID       TESTDI1A.59     
     * ,QDIA1            !IN  STASHFLAG FOR DIAG1                          TESTDI1A.60     
     * ,QDIA2            !IN  STASHFLAG FOR DIAG2                          TESTDI1A.61     
     * ,QDIA3            !IN  STASHFLAG FOR DIAG3                          TESTDI1A.62     
     * ,QDIA4            !IN  STASHFLAG FOR DIAG4                          TESTDI1A.63     
C                                                                          TESTDI1A.64     
      REAL                                                                 TESTDI1A.65     
     *  EW_SPACE         !IN  DELTA LONGITUDE (DEGREES)                    TESTDI1A.66     
     *, NS_SPACE         !IN  DELTA  LATITUDE (DEGREES)                    TESTDI1A.67     
     *, FIRST_LAT        !IN  LATITUDE  OF FIRST P ROW IN DEGREES          TESTDI1A.68     
     *, FIRST_LONG       !IN  LONGITUDE OF FIRST P COL IN DEGREES          TESTDI1A.69     
     *, PHI_POLE         !IN  LATITUDE OF THE PSEUDO POLE                  TESTDI1A.70     
     *, LAMBDA_POLE      !IN  LONGITUDE OF THE PSEUDO POLE                 TESTDI1A.71     
     *, MODEL_LEVELS_LIST(NO_MODEL_LEVELS) !IN LEVELS LIST (FOR DIAG3)     TESTDI1A.72     
     *, PRESS_LEVELS_LIST(NO_PRESS_LEVELS) !IN LEVELS LIST (FOR DIAG4)     TESTDI1A.73     
     *, DIAG1(U_FIELD)   !OUT DIAGNOSTIC 1                                 TESTDI1A.74     
     *, DIAG2(P_FIELD)   !OUT DIAGNOSTIC 2                                 TESTDI1A.75     
     *, DIAG3(P_FIELD,NO_PRESS_LEVELS)  !OUT DIAGNOSTIC 3                  TESTDI1A.76     
     *, DIAG4(P_FIELD,NO_MODEL_LEVELS)  !OUT DIAGNOSTIC 4                  TESTDI1A.77     
C                                                                          TESTDI1A.78     
C*----------------------------------------------------------------------   TESTDI1A.79     
C                                                                          TESTDI1A.80     
C*L WORKSPACE USAGE-----------------------------------------------------   TESTDI1A.81     
C*----------------------------------------------------------------------   TESTDI1A.82     
      REAL                                                                 TESTDI1A.83     
     *  LATITUDE(P_FIELD)    ! LATITUDE IN DEGREES                         TESTDI1A.84     
     *, LONGITUDE(P_FIELD)   ! LONGITUDE IN DEGREES                        TESTDI1A.85     
     *, LAT(P_FIELD)         ! LATITUDE  IN DEGREES ON EQUATORIAL GRID     TESTDI1A.86     
     *, LONG(P_FIELD)        ! LONGITUDE IN DEGREES ON EQUATORIAL GRID     TESTDI1A.87     
C                                                                          TESTDI1A.88     
C*L EXTERNAL SUBROUTINES CALLED-----------------------------------------   TESTDI1A.89     
      EXTERNAL LLTOEQ                                                      TESTDI1A.90     
C*----------------------------------------------------------------------   TESTDI1A.91     
C                                                                          TESTDI1A.92     
*CALL C_PI                                                                 TESTDI1A.93     
*CALL C_R_CP                                                               TESTDI1A.94     
C                                                                          TESTDI1A.95     
C-----------------------------------------------------------------------   TESTDI1A.96     
C DEFINE LOCAL CONSTANTS                                                   TESTDI1A.97     
C-----------------------------------------------------------------------   TESTDI1A.98     
      REAL                                                                 TESTDI1A.99     
     *  A,B,C,D  ! COEFFICIENTS FOR CALCULATING VALUES OF FIELD            TESTDI1A.100    
C                                                                          TESTDI1A.101    
      PARAMETER(A=1.0,B=1.0E2,C=1.0E3,D=1.0E4)                             TESTDI1A.102    
C                                                                          TESTDI1A.103    
C-----------------------------------------------------------------------   TESTDI1A.104    
C DEFINE LOCAL VARIABLES                                                   TESTDI1A.105    
C-----------------------------------------------------------------------   TESTDI1A.106    
      INTEGER                                                              TESTDI1A.107    
     *  I,J,K        !  LOOP COUNTERS                                      TESTDI1A.108    
     * ,L            !  LOOP INDEX                                         TESTDI1A.109    
C-----------------------------------------------------------------------   TESTDI1A.110    
CL  1. CALCULATE FIRST DIAGNOSTIC  (U GRID SINGLE LEVEL)                   TESTDI1A.111    
C-----------------------------------------------------------------------   TESTDI1A.112    
      IF(QDIA1) THEN                                                       TESTDI1A.113    
CL                                                                         TESTDI1A.114    
CL  1a. FIND EQUATORIAL LATITUDES,LONGITUDES                               TESTDI1A.115    
CL                                                                         TESTDI1A.116    
         DO J=1,U_ROWS                                                     TESTDI1A.117    
           DO I=1,ROW_LENGTH                                               TESTDI1A.118    
             L= I + (J-1)*ROW_LENGTH                                       TESTDI1A.119    
             LAT (L)=  FIRST_LAT  - NS_SPACE*(J-0.5)                       TESTDI1A.120    
             LONG(L)=  FIRST_LONG + EW_SPACE*(I-0.5)                       TESTDI1A.121    
           ENDDO                                                           TESTDI1A.122    
         ENDDO                                                             TESTDI1A.123    
CL                                                                         TESTDI1A.124    
CL  1b. CONVERT TO ACTUAL LATITUDE,LONGITUDE IF ELF GRID                   TESTDI1A.125    
CL                                                                         TESTDI1A.126    
         IF(ELF) THEN                                                      TESTDI1A.127    
           CALL EQTOLL(LAT,LONG,LATITUDE,LONGITUDE,PHI_POLE,LAMBDA_POLE,   TESTDI1A.128    
     *                 U_FIELD)                                            TESTDI1A.129    
         ELSE                                                              TESTDI1A.130    
           DO I=1,U_FIELD                                                  TESTDI1A.131    
             LATITUDE(I) =LAT(I)                                           TESTDI1A.132    
             LONGITUDE(I)=LONG(I)                                          TESTDI1A.133    
           ENDDO                                                           TESTDI1A.134    
         ENDIF                                                             TESTDI1A.135    
CL                                                                         TESTDI1A.136    
CL  1c. CALCULATE VALUE FROM ANALYTIC FUNCTION                             TESTDI1A.137    
CL                                                                         TESTDI1A.138    
                                                                           TESTDI1A.139    
         DO I=1,U_FIELD                                                    TESTDI1A.140    
           DIAG1(I)=A*(LATITUDE(I)+90.0) + B*LONGITUDE(I) +                TESTDI1A.141    
     *              D*FORECAST_HRS                                         TESTDI1A.142    
         ENDDO                                                             TESTDI1A.143    
                                                                           TESTDI1A.144    
      ENDIF               ! END OF QDIA1 TEST                              TESTDI1A.145    
                                                                           TESTDI1A.146    
C-----------------------------------------------------------------------   TESTDI1A.147    
CL  2. CALCULATE ACTUAL LATITUDES, LONGITUDES FOR P FIELDS (DIAG 2-4)      TESTDI1A.148    
C-----------------------------------------------------------------------   TESTDI1A.149    
      IF(QDIA2.OR.QDIA3.OR.QDIA4) THEN                                     TESTDI1A.150    
CL                                                                         TESTDI1A.151    
CL  2a. FIND EQUATORIAL LATITUDES,LONGITUDES                               TESTDI1A.152    
CL                                                                         TESTDI1A.153    
         DO J=1,P_ROWS                                                     TESTDI1A.154    
           DO I=1,ROW_LENGTH                                               TESTDI1A.155    
             L= I + (J-1)*ROW_LENGTH                                       TESTDI1A.156    
             LAT (L)=  FIRST_LAT  - NS_SPACE*(J-1)                         TESTDI1A.157    
             LONG(L)=  FIRST_LONG + EW_SPACE*(I-1)                         TESTDI1A.158    
           ENDDO                                                           TESTDI1A.159    
         ENDDO                                                             TESTDI1A.160    
CL                                                                         TESTDI1A.161    
CL  2b. CONVERT TO ACTUAL LATITUDE,LONGITUDE IF ELF GRID                   TESTDI1A.162    
CL                                                                         TESTDI1A.163    
         IF(ELF) THEN                                                      TESTDI1A.164    
           CALL EQTOLL(LAT,LONG,LATITUDE,LONGITUDE,PHI_POLE,LAMBDA_POLE,   TESTDI1A.165    
     *                 P_FIELD)                                            TESTDI1A.166    
         ELSE                                                              TESTDI1A.167    
           DO I=1,P_FIELD                                                  TESTDI1A.168    
             LATITUDE(I) =LAT(I)                                           TESTDI1A.169    
             LONGITUDE(I)=LONG(I)                                          TESTDI1A.170    
           ENDDO                                                           TESTDI1A.171    
         ENDIF                                                             TESTDI1A.172    
      ENDIF                      ! END OF QDIA2-4 TEST                     TESTDI1A.173    
C-----------------------------------------------------------------------   TESTDI1A.174    
CL  3. CALCULATE SECOND DIAGNOSTIC (P GRID SINGLE LEVEL)                   TESTDI1A.175    
C-----------------------------------------------------------------------   TESTDI1A.176    
      IF(QDIA2) THEN                                                       TESTDI1A.177    
                                                                           TESTDI1A.178    
         DO I=1,P_FIELD                                                    TESTDI1A.179    
           DIAG2(I)=A*(LATITUDE(I)+90.0) + B*LONGITUDE(I) +                TESTDI1A.180    
     *              D*FORECAST_HRS                                         TESTDI1A.181    
         ENDDO                                                             TESTDI1A.182    
                                                                           TESTDI1A.183    
      ENDIF               ! END OF QDIA2 TEST                              TESTDI1A.184    
C-----------------------------------------------------------------------   TESTDI1A.185    
CL  4. CALCULATE THIRD  DIAGNOSTIC (P GRID PRESSURE LEVELS)                TESTDI1A.186    
C-----------------------------------------------------------------------   TESTDI1A.187    
      IF(QDIA3) THEN                                                       TESTDI1A.188    
                                                                           TESTDI1A.189    
         DO K=1,NO_PRESS_LEVELS                                            TESTDI1A.190    
           DO I=1,P_FIELD                                                  TESTDI1A.191    
             DIAG3(I,K)=A*(LATITUDE(I)+90.0)   + B*LONGITUDE(I) +          TESTDI1A.192    
     *                  C*PRESS_LEVELS_LIST(K) + D*FORECAST_HRS            TESTDI1A.193    
           ENDDO                                                           TESTDI1A.194    
         ENDDO                                                             TESTDI1A.195    
                                                                           TESTDI1A.196    
      ENDIF               ! END OF QDIA3 TEST                              TESTDI1A.197    
C-----------------------------------------------------------------------   TESTDI1A.198    
CL  5. CALCULATE FOURTH DIAGNOSTIC (P GRID MODEL    LEVELS)                TESTDI1A.199    
C-----------------------------------------------------------------------   TESTDI1A.200    
      IF(QDIA4) THEN                                                       TESTDI1A.201    
                                                                           TESTDI1A.202    
         DO K=1,NO_MODEL_LEVELS                                            TESTDI1A.203    
           DO I=1,P_FIELD                                                  TESTDI1A.204    
             DIAG4(I,K)=A*(LATITUDE(I)+90.0)   + B*LONGITUDE(I) +          TESTDI1A.205    
     *                  C*MODEL_LEVELS_LIST(K) + D*FORECAST_HRS            TESTDI1A.206    
           ENDDO                                                           TESTDI1A.207    
         ENDDO                                                             TESTDI1A.208    
                                                                           TESTDI1A.209    
      ENDIF               ! END OF QDIA4 TEST                              TESTDI1A.210    
C=======================================================================   TESTDI1A.211    
C END OF TESTDIAG                                                          TESTDI1A.212    
C=======================================================================   TESTDI1A.213    
      RETURN                                                               TESTDI1A.214    
      END                                                                  TESTDI1A.215    
C=======================================================================   TESTDI1A.216    
*ENDIF                                                                     TESTDI1A.217