*IF DEF,CUMF                                                               COMPARE1.2      
C ******************************COPYRIGHT******************************    GTS2F400.1081   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.1082   
C                                                                          GTS2F400.1083   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.1084   
C restrictions as set forth in the contract.                               GTS2F400.1085   
C                                                                          GTS2F400.1086   
C                Meteorological Office                                     GTS2F400.1087   
C                London Road                                               GTS2F400.1088   
C                BRACKNELL                                                 GTS2F400.1089   
C                Berkshire UK                                              GTS2F400.1090   
C                RG12 2SZ                                                  GTS2F400.1091   
C                                                                          GTS2F400.1092   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.1093   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.1094   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.1095   
C Modelling at the above address.                                          GTS2F400.1096   
C ******************************COPYRIGHT******************************    GTS2F400.1097   
C                                                                          GTS2F400.1098   
CLL  Program  MAIN_COMPARE and Subroutine COMPARE                          COMPARE1.3      
CLL                                                                        COMPARE1.4      
CLL  Purpose: Compares two UM atmosphere, ocean, or ancillary files.       COMPARE1.5      
CLL           MAIN_COMPARE reads in fixed length and integer               COMPARE1.6      
CLL           headers of UM files to be compared, extracts dimensions      COMPARE1.7      
CLL           of each file and then passes these values to                 COMPARE1.8      
CLL           subroutine COMPARE.                                          COMPARE1.9      
CLL                                                                        COMPARE1.10     
CLL            COMPARE subroutine:                                         COMPARE1.11     
CLL          Compares two UM atmosphere, ocean, or ancillary files.        COMPARE1.12     
CLL          COMPARE reads in headers and data fields from files on        COMPARE1.13     
CLL          NFTIN1 and NFTIN2, comparing values.                          COMPARE1.14     
CLL          UNIT 6: If an exact compare is found the message 'OK'         COMPARE1.15     
CLL          is written out, otherwise                                     COMPARE1.16     
CLL          i)  if header, all differring values are printed              COMPARE1.17     
CLL          ii) if field, 1st 10 differring values are printed plus       COMPARE1.18     
CLL              the maximum difference between the fields.                COMPARE1.19     
CLL          iii) if field only present in one file, a warning message     UDG2F405.1      
CLL               is displayed                                             UDG2F405.2      
CLL          UNIT 7: Number of differences displayed for each header.      UDG2F405.3      
CLL                  Number of fields with differences is also             UDG2F405.4      
CLL                  displayed along with the number of differences        UDG2F405.5      
CLL                  for each field which has differences                  UDG2F405.6      
CLL                                                                        COMPARE1.22     
CLL  Written by A. Dickinson 20/03/92                                      COMPARE1.23     
CLL                                                                        COMPARE1.24     
CLL  Model            Modification history from model version 3.0:         COMPARE1.25     
CLL version  Date                                                          COMPARE1.26     
CLL                                                                        AD311093.30     
CLL  3.3   31/10/93   Dimension of data array set to maximum value         AD311093.31     
CLL                   Author: A. Dickinson      Reviewer: P.Burton         AD311093.32     
CLL                                                                        COMPARE1.27     
CLL   3.3   22/11/93  Compare logical fields correctly. Print integer      DR221193.1      
CLL                   and logical differences. Do not compare data         DR221193.2      
CLL                   section for obs files. D. Robinson                   DR221193.3      
CLL   3.3   15/12/93  Skip comparing fields if lookup record               DR221193.4      
CLL                   contains -99's. Allow compare to continue for        DR221193.5      
CLL                   files with different no of fields. Do not compare    DR221193.6      
CLL                   fields packed/compressed via WGDOS/GRIB method.      DR221193.7      
CLL                   Author: D.M.Goddard     Reviewer: D. Robinson        DR221193.8      
CLL                                                                        DR221193.9      
CLL   3.3   08/12/93  Extra argument for READFLDS. D. Robinson.            DR081293.25     
CLL                                                                        UDG9F304.1      
CLL   3.4   08/09/94  Print real values for LOOKUP 46-64 differences.      UDR2F304.1      
CLL                   Compare arrays only if both exist. D. Robinson.      UDR2F304.2      
CLL                                                                        DR081293.26     
CLL   3.4   12/12/94  Compare fields if LOOKUP(39) is -1 -2 -3             UDG9F304.2      
CLL                   ie Timeseries                                        UDG9F304.3      
CLL   3.5  24/03/95    Changed OPEN to FILE_OPEN  P.Burton                 GPB1F305.11     
!       3.5  27/06/95  Submodels project. Replace call to RDPPXRF by       UDG2F305.1      
!                      function EXPPXC to extract name of diagnostic       UDG2F305.2      
!                      item.                                               UDG2F305.3      
!                      Author D.M.Goddard    Reviewer S Swarbrick          UDG2F305.4      
!     4.0   06/09/95  Allows comparison of pre-vn4.0 and vn4.0 dumps       UDG1F400.1      
!                     contain u and v currents as grid type for these      UDG1F400.2      
!                     fields as corrected at vn4.0 from 3 to 13.           UDG1F400.3      
!                     Author D.M. Goddard                                  UDG1F400.4      
!     4.0  18/09/95    Changes for submodel project                        UDG7F400.25     
!   4.1  18/06/96   Changes to cope with changes in STASH addressing       UDG2F405.7      
!                   Author D.M. Goddard.                                   UDG2F405.8      
!     4.1  21/03/96    Fields read into correctly typed arrays             GPB2F401.1      
!                      Added more detailed output:                         GPB2F401.2      
!                       - Deviation charts                                 GPB2F401.3      
!                       - Basic statistical analysis                       GPB2F401.4      
!                            P.Burton                                      GPB2F401.5      
!     4.2  10/05/96    Added some checks to avoid FPE's by                 UDG1F403.1      
!                      checking for NaN's and using xor for                UDG1F403.2      
!                      comparisons. UDG2F402                               UDG1F403.3      
!                      Author: Bob Carruthers                              UDG1F403.4      
!     4.2  10/05/96    Extension to process WGDOS packed fields UBC3F402   UDG1F403.5      
!                      Author: Bob Carruthers                              UDG1F403.6      
!     4.3  12/03/97    Correct comparsion of integers                      UDG1F403.7      
!          24/04/97    Corrections for comparing packed fieldsfiles        UDG1F403.8      
!                      Write out position of maximum difference            UDG1F403.9      
!                      Author: D.M. Goddard and Richard Barnes             UDG1F403.10     
CLL  4.4   Oct. 1997 Changed error handling from routine HDPPXRF           GDW1F404.160    
CLL                  so only fatal (+ve) errors are handled.               GDW1F404.161    
CLL                                             Shaun de Witt              GDW1F404.162    
!     4.4  11/06/97    Changes in print statements to reflect the          GBC7F404.1      
!                      well-formed Dumpfile I/O.                           GBC7F404.2      
!                        Author: Bob Carruthers, Cray Research.            GBC7F404.3      
!   4.4  24/10/97   Initialise ICODE as it is no longer                    UDG9F404.1      
!                   initialised in HDPPXRF                                 UDG9F404.2      
!                   Author D.M. Goddard                                    UDG9F404.3      
!                   + extra write statement for statistics. R.Rawlins      UDG9F404.4      
!     4.5  14/07/98    Replaced 'xor' and 'and' bitwise operators for      GAV0F405.12     
!                      workstations due to non-portability                 GAV0F405.13     
!                      (A Van der Wal)                                     GAV0F405.14     
!   4.5  10/11/98   General upgrade to program.                            UDG2F405.9      
!                   1) Files with different sets of fields can now         UDG2F405.10     
!                      be compared.                                        UDG2F405.11     
!                   2) Summary file now contains more information.         UDG2F405.12     
!                   Author D.M Goddard                                     UDG2F405.13     
!                                                                          UDG7F400.26     
CLL  Programming standard:                                                 COMPARE1.28     
CLL                                                                        COMPARE1.29     
CLL  Logical components covered:                                           COMPARE1.30     
CLL                                                                        COMPARE1.31     
CLL  System Tasks: F3,F4,F6                                                COMPARE1.32     
CLL                                                                        COMPARE1.33     
CLL  Documentation: UM Doc Paper F5                                        COMPARE1.34     
CLL                                                                        COMPARE1.35     
CLL  -----------------------------------------------------------------     COMPARE1.36     

      PROGRAM MAIN_COMPARE                                                 ,20COMPARE1.37     
                                                                           COMPARE1.38     
      IMPLICIT NONE                                                        COMPARE1.39     
                                                                           COMPARE1.40     
      INTEGER                                                              COMPARE1.41     
     & FIXHD1(256)       !Space for fixed length header file 1             COMPARE1.42     
     &,INTHD1(100)       !Space for integer header file 1                  COMPARE1.43     
                                                                           COMPARE1.44     
      INTEGER                                                              COMPARE1.45     
     & FIXHD2(256)       !Space for fixed length header file 2             COMPARE1.46     
     &,INTHD2(100)       !Space for integer header file 2                  COMPARE1.47     
                                                                           COMPARE1.48     
      INTEGER                                                              COMPARE1.49     
     & LEN_FIXHD1     !Length of fixed length header on file 1             COMPARE1.50     
     &,LEN_INTHD1     !Length of integer header on file 1                  COMPARE1.51     
     &,LEN_REALHD1    !Length of real header on file 1                     COMPARE1.52     
     &,LEN1_LEVDEPC1  !1st dim of lev dependent consts on file 1           COMPARE1.53     
     &,LEN2_LEVDEPC1  !2nd dim of lev dependent consts on file 1           COMPARE1.54     
     &,LEN1_ROWDEPC1  !1st dim of row dependent consts on file 1           COMPARE1.55     
     &,LEN2_ROWDEPC1  !2nd dim of row dependent consts on file 1           COMPARE1.56     
     &,LEN1_COLDEPC1  !1st dim of col dependent consts on file 1           COMPARE1.57     
     &,LEN2_COLDEPC1  !2nd dim of col dependent consts on file 1           COMPARE1.58     
     &,LEN1_FLDDEPC1  !1st dim of field dependent consts on file 1         COMPARE1.59     
     &,LEN2_FLDDEPC1  !2nd dim of field dependent consts on file 1         COMPARE1.60     
     &,LEN_EXTCNST1   !Length of extra consts on file 1                    COMPARE1.61     
     &,LEN_DUMPHIST1  !Length of history header on file 1                  COMPARE1.62     
     &,LEN_CFI11      !Length of index1 on file 1                          COMPARE1.63     
     &,LEN_CFI21      !Length of index2 on file 1                          COMPARE1.64     
     &,LEN_CFI31      !Length of index3 on file 1                          COMPARE1.65     
     &,LEN1_LOOKUP1   !1st dim of LOOKUP on file 1                         COMPARE1.66     
     &,LEN2_LOOKUP1   !2nd dim of LOOKUP on file 1                         COMPARE1.67     
     &,LEN_DATA1      !Length of data on file 1                            COMPARE1.68     
     &,ROW_LENGTH1    !No of points E-W on file 1                          COMPARE1.69     
     &,P_ROWS1        !No of p-rows on file 1                              COMPARE1.70     
     &,P_FIELD1       !No of p-points per level on file 1                  COMPARE1.71     
     &,MAX_FIELD_SIZE1 !Maximum field size on file 1                       AD311093.33     
                                                                           COMPARE1.72     
      INTEGER                                                              COMPARE1.73     
     & LEN_FIXHD2     !Length of fixed length header on file 2             COMPARE1.74     
     &,LEN_INTHD2     !Length of integer header on file 2                  COMPARE1.75     
     &,LEN_REALHD2    !Length of real header on file 2                     COMPARE1.76     
     &,LEN1_LEVDEPC2  !1st dim of lev dependent consts on file 2           COMPARE1.77     
     &,LEN2_LEVDEPC2  !2nd dim of lev dependent consts on file 2           COMPARE1.78     
     &,LEN1_ROWDEPC2  !1st dim of row dependent consts on file 2           COMPARE1.79     
     &,LEN2_ROWDEPC2  !2nd dim of row dependent consts on file 2           COMPARE1.80     
     &,LEN1_COLDEPC2  !1st dim of col dependent consts on file 2           COMPARE1.81     
     &,LEN2_COLDEPC2  !2nd dim of col dependent consts on file 2           COMPARE1.82     
     &,LEN1_FLDDEPC2  !1st dim of field dependent consts on file 2         COMPARE1.83     
     &,LEN2_FLDDEPC2  !2nd dim of field dependent consts on file 2         COMPARE1.84     
     &,LEN_EXTCNST2   !Length of extra consts on file 2                    COMPARE1.85     
     &,LEN_DUMPHIST2  !Length of history header on file 2                  COMPARE1.86     
     &,LEN_CFI12      !Length of index1 on file 2                          COMPARE1.87     
     &,LEN_CFI22      !Length of index2 on file 2                          COMPARE1.88     
     &,LEN_CFI32      !Length of index3 on file 2                          COMPARE1.89     
     &,LEN1_LOOKUP2   !1st dim of LOOKUP on file 2                         COMPARE1.90     
     &,LEN2_LOOKUP2   !2nd dim of LOOKUP on file 2                         COMPARE1.91     
     &,LEN_DATA2      !Length of data on file 2                            COMPARE1.92     
     &,ROW_LENGTH2    !No of points E-W on file 2                          COMPARE1.93     
     &,P_ROWS2        !No of p-rows on file 2                              COMPARE1.94     
     &,P_FIELD2       !No of p-points per level on file 2                  COMPARE1.95     
     &,MAX_FIELD_SIZE2 !Maximum field size on file 2                       AD311093.34     
                                                                           COMPARE1.96     
                                                                           COMPARE1.97     
      INTEGER                                                              COMPARE1.98     
     & LEN_IO   !Length of I/O returned by BUFFER IN                       COMPARE1.99     
     &,I        !Loop index                                                COMPARE1.100    
     &,NFTIN1   !Unit number of input UM file 1                            COMPARE1.101    
     &,NFTIN2   !Unit number of input UM file 2                            COMPARE1.102    
                                                                           COMPARE1.103    
     &,ERR      !Return code from OPEN                                     COMPARE1.104    
     &,ICODE    !Return code from setpos                                   GTD0F400.44     
      REAL A    !BUFFER IN UNIT function                                   COMPARE1.105    
c                                                                          UBC3F402.1      
      integer wgdos_expand                                                 UBC3F402.2      
                                                                           COMPARE1.106    
                                                                           COMPARE1.107    
C External subroutines called:------------------------------------------   COMPARE1.108    
      EXTERNAL IOERROR,ABORT_IO,BUFFIN,FILE_OPEN,                          GPB1F305.12     
     &         SETPOS,ABORT,COMPARE                                        GPB1F305.13     
C*----------------------------------------------------------------------   COMPARE1.110    
                                                                           COMPARE1.111    
c                                                                          UBC3F402.3      
      wgdos_expand=1                                                       UBC3F402.4      
CL 1. Assign unit numbers                                                  COMPARE1.112    
                                                                           COMPARE1.113    
      NFTIN1=20                                                            COMPARE1.114    
      NFTIN2=21                                                            COMPARE1.115    
                                                                           COMPARE1.116    
      WRITE(6,*)' COMPARE - FULL MODE'                                     COMPARE1.117    
      WRITE(6,*)' -------------------'                                     COMPARE1.118    
      WRITE(6,*)' '                                                        COMPARE1.119    
                                                                           COMPARE1.120    
      WRITE(6,'(20x,''FILE STATUS'')')                                     COMPARE1.121    
      WRITE(6,'(20x,''==========='')')                                     COMPARE1.122    
C     CALL OPEN(1,'PPXREF',6,0,0,ERR)                                      COMPARE1.123    
      CALL FILE_OPEN(NFTIN1,'FILE1',5,0,0,ERR)                             GPB1F305.14     
      CALL FILE_OPEN(NFTIN2,'FILE2',5,0,0,ERR)                             GPB1F305.15     
                                                                           COMPARE1.126    
CL 2. Buffer in fixed length header record from file 1                     COMPARE1.127    
                                                                           COMPARE1.128    
      CALL BUFFIN(NFTIN1,FIXHD1,256,LEN_IO,A)                              COMPARE1.129    
                                                                           COMPARE1.130    
C Check for I/O errors                                                     COMPARE1.131    
      IF(A.NE.-1.0.OR.LEN_IO.NE.256)THEN                                   COMPARE1.132    
        CALL IOERROR('buffer in of fixed length header of input file',     COMPARE1.133    
     *  A,LEN_IO,256)                                                      COMPARE1.134    
      CALL ABORT                                                           COMPARE1.135    
      ENDIF                                                                COMPARE1.136    
                                                                           COMPARE1.137    
C Set missing data indicator to zero                                       COMPARE1.138    
      DO  I=1,256                                                          COMPARE1.139    
        IF(FIXHD1(I).LT.0)FIXHD1(I)=0                                      COMPARE1.140    
      ENDDO                                                                COMPARE1.141    
                                                                           COMPARE1.142    
C Input file dimensions                                                    COMPARE1.143    
      LEN_FIXHD1=256                                                       COMPARE1.144    
      LEN_INTHD1=FIXHD1(101)                                               COMPARE1.145    
      LEN_REALHD1=FIXHD1(106)                                              COMPARE1.146    
      LEN1_LEVDEPC1=FIXHD1(111)                                            COMPARE1.147    
      LEN2_LEVDEPC1=FIXHD1(112)                                            COMPARE1.148    
      LEN1_ROWDEPC1=FIXHD1(116)                                            COMPARE1.149    
      LEN2_ROWDEPC1=FIXHD1(117)                                            COMPARE1.150    
      LEN1_COLDEPC1=FIXHD1(121)                                            COMPARE1.151    
      LEN2_COLDEPC1=FIXHD1(122)                                            COMPARE1.152    
      LEN1_FLDDEPC1=FIXHD1(126)                                            COMPARE1.153    
      LEN2_FLDDEPC1=FIXHD1(127)                                            COMPARE1.154    
      LEN_EXTCNST1=FIXHD1(131)                                             COMPARE1.155    
      LEN_DUMPHIST1=FIXHD1(136)                                            COMPARE1.156    
      LEN_CFI11=FIXHD1(141)                                                COMPARE1.157    
      LEN_CFI21=FIXHD1(143)                                                COMPARE1.158    
      LEN_CFI31=FIXHD1(145)                                                COMPARE1.159    
      LEN1_LOOKUP1=FIXHD1(151)                                             COMPARE1.160    
      LEN2_LOOKUP1=FIXHD1(152)                                             COMPARE1.161    
      LEN_DATA1=FIXHD1(161)                                                COMPARE1.162    
                                                                           COMPARE1.163    
CL 3. Buffer in fixed length header record from file 2                     COMPARE1.164    
                                                                           COMPARE1.165    
      CALL BUFFIN(NFTIN2,FIXHD2,256,LEN_IO,A)                              COMPARE1.166    
                                                                           COMPARE1.167    
C Check for I/O errors                                                     COMPARE1.168    
      IF(A.NE.-1.0.OR.LEN_IO.NE.256)THEN                                   COMPARE1.169    
        CALL IOERROR('buffer in of fixed length header of input file',     COMPARE1.170    
     *  A,LEN_IO,256)                                                      COMPARE1.171    
      CALL ABORT                                                           COMPARE1.172    
      ENDIF                                                                COMPARE1.173    
                                                                           COMPARE1.174    
C Set missing data indicator to zero                                       COMPARE1.175    
      DO  I=1,256                                                          COMPARE1.176    
        IF(FIXHD2(I).LT.0)FIXHD2(I)=0                                      COMPARE1.177    
      ENDDO                                                                COMPARE1.178    
                                                                           COMPARE1.179    
C Input file dimensions                                                    COMPARE1.180    
      LEN_FIXHD2=256                                                       COMPARE1.181    
      LEN_INTHD2=FIXHD2(101)                                               COMPARE1.182    
      LEN_REALHD2=FIXHD2(106)                                              COMPARE1.183    
      LEN1_LEVDEPC2=FIXHD2(111)                                            COMPARE1.184    
      LEN2_LEVDEPC2=FIXHD2(112)                                            COMPARE1.185    
      LEN1_ROWDEPC2=FIXHD2(116)                                            COMPARE1.186    
      LEN2_ROWDEPC2=FIXHD2(117)                                            COMPARE1.187    
      LEN1_COLDEPC2=FIXHD2(121)                                            COMPARE1.188    
      LEN2_COLDEPC2=FIXHD2(122)                                            COMPARE1.189    
      LEN1_FLDDEPC2=FIXHD2(126)                                            COMPARE1.190    
      LEN2_FLDDEPC2=FIXHD2(127)                                            COMPARE1.191    
      LEN_EXTCNST2=FIXHD2(131)                                             COMPARE1.192    
      LEN_DUMPHIST2=FIXHD2(136)                                            COMPARE1.193    
      LEN_CFI12=FIXHD2(141)                                                COMPARE1.194    
      LEN_CFI22=FIXHD2(143)                                                COMPARE1.195    
      LEN_CFI32=FIXHD2(145)                                                COMPARE1.196    
      LEN1_LOOKUP2=FIXHD2(151)                                             COMPARE1.197    
      LEN2_LOOKUP2=FIXHD2(152)                                             COMPARE1.198    
      LEN_DATA2=FIXHD2(161)                                                COMPARE1.199    
                                                                           COMPARE1.200    
                                                                           COMPARE1.201    
CL 4. Buffer in integer constants from file 1                              COMPARE1.202    
                                                                           COMPARE1.203    
       CALL BUFFIN(NFTIN1,INTHD1,FIXHD1(101),LEN_IO,A)                     COMPARE1.204    
                                                                           COMPARE1.205    
C Check for I/O errors                                                     COMPARE1.206    
      IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD1(101))THEN                           COMPARE1.207    
        CALL IOERROR('buffer in of integer constants in input file 1',     COMPARE1.208    
     *  A,LEN_IO,FIXHD1(101))                                              COMPARE1.209    
      CALL ABORT                                                           COMPARE1.210    
      ENDIF                                                                COMPARE1.211    
                                                                           COMPARE1.212    
C Set missing data indicator to zero                                       COMPARE1.213    
      DO  I=1,FIXHD1(101)                                                  COMPARE1.214    
        IF(INTHD1(I).LT.0)INTHD1(I)=0                                      COMPARE1.215    
      ENDDO                                                                COMPARE1.216    
                                                                           COMPARE1.217    
       ROW_LENGTH1=INTHD1(6)                                               COMPARE1.218    
       P_ROWS1=INTHD1(7)                                                   COMPARE1.219    
       P_FIELD1=ROW_LENGTH1*P_ROWS1                                        COMPARE1.220    
                                                                           AD311093.35     
CL Extract maximum field size from LOOKUP header                           AD311093.36     
      CALL FIND_MAX_FIELD_SIZE(NFTIN1,FIXHD1(151),FIXHD1(152),FIXHD1       AD311093.37     
     &    ,max_field_size1, wgdos_expand)                                  UBC3F402.5      
                                                                           COMPARE1.221    
CL 5. Buffer in integer constants from file 2                              COMPARE1.222    
                                                                           COMPARE1.223    
       CALL BUFFIN(NFTIN2,INTHD2,FIXHD2(101),LEN_IO,A)                     COMPARE1.224    
                                                                           COMPARE1.225    
C Check for I/O errors                                                     COMPARE1.226    
      IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD2(101))THEN                           COMPARE1.227    
        CALL IOERROR('buffer in of integer constants in input file 2',     COMPARE1.228    
     *  A,LEN_IO,FIXHD2(101))                                              COMPARE1.229    
      CALL ABORT                                                           COMPARE1.230    
      ENDIF                                                                COMPARE1.231    
                                                                           COMPARE1.232    
C Set missing data indicator to zero                                       COMPARE1.233    
      DO  I=1,FIXHD2(101)                                                  COMPARE1.234    
        IF(INTHD2(I).LT.0)INTHD2(I)=0                                      COMPARE1.235    
      ENDDO                                                                COMPARE1.236    
                                                                           COMPARE1.237    
CL 6. Cause abort if files obviously different                             COMPARE1.238    
                                                                           COMPARE1.239    
      ROW_LENGTH2=INTHD2(6)                                                COMPARE1.240    
      P_ROWS2=INTHD2(7)                                                    COMPARE1.241    
      P_FIELD2=ROW_LENGTH2*P_ROWS1                                         COMPARE1.242    
                                                                           AD311093.39     
CL Extract maximum field size from LOOKUP header                           AD311093.40     
      CALL FIND_MAX_FIELD_SIZE(NFTIN2,FIXHD2(151),FIXHD2(152),FIXHD2       AD311093.41     
     &    ,max_field_size2, wgdos_expand)                                  UBC3F402.6      
                                                                           COMPARE1.243    
      IF(P_FIELD1.NE.P_FIELD2)THEN                                         COMPARE1.244    
       WRITE(6,*)'COMPARE: ERROR Dumps are at different resolutions'       COMPARE1.245    
       CALL ABORT                                                          COMPARE1.246    
      ENDIF                                                                COMPARE1.247    
      IF(LEN2_LOOKUP1.NE.LEN2_LOOKUP2)THEN                                 COMPARE1.248    
       WRITE(6,*)                                                          DR221193.10     
     & 'COMPARE: WARNING Dumps have different number of fields'            DR221193.11     
      ENDIF                                                                COMPARE1.251    
                                                                           COMPARE1.252    
C Rewind files                                                             COMPARE1.253    
      CALL SETPOS(NFTIN1,0,ICODE)                                          GTD0F400.45     
      CALL SETPOS(NFTIN2,0,ICODE)                                          GTD0F400.46     
                                                                           COMPARE1.256    
CL 7. Call COMPARE                                                         COMPARE1.257    
                                                                           COMPARE1.258    
      CALL COMPARE(LEN_FIXHD1,LEN_INTHD1,LEN_REALHD1,                      COMPARE1.259    
     &  LEN1_LEVDEPC1,LEN2_LEVDEPC1,LEN1_ROWDEPC1,                         COMPARE1.260    
     &  LEN2_ROWDEPC1,LEN1_COLDEPC1,LEN2_COLDEPC1,                         COMPARE1.261    
     &  LEN1_FLDDEPC1,LEN2_FLDDEPC1,LEN_EXTCNST1,                          COMPARE1.262    
     &  LEN_DUMPHIST1,LEN_CFI11,LEN_CFI21,LEN_CFI31,                       COMPARE1.263    
     &  LEN1_LOOKUP1,LEN2_LOOKUP1,LEN_DATA1,P_FIELD1,                      COMPARE1.264    
     &  LEN_FIXHD2,LEN_INTHD2,LEN_REALHD2,                                 COMPARE1.265    
     &  LEN1_LEVDEPC2,LEN2_LEVDEPC2,LEN1_ROWDEPC2,                         COMPARE1.266    
     &  LEN2_ROWDEPC2,LEN1_COLDEPC2,LEN2_COLDEPC2,                         COMPARE1.267    
     &  LEN1_FLDDEPC2,LEN2_FLDDEPC2,LEN_EXTCNST2,                          COMPARE1.268    
     &  LEN_DUMPHIST2,LEN_CFI12,LEN_CFI22,LEN_CFI32,                       COMPARE1.269    
     &  LEN1_LOOKUP2,LEN2_LOOKUP2,LEN_DATA2,P_FIELD2                       COMPARE1.270    
     & ,NFTIN1,NFTIN2,MAX_FIELD_SIZE1,MAX_FIELD_SIZE2,                     UBC3F402.7      
     & wgdos_expand)                                                       UBC3F402.8      
                                                                           COMPARE1.272    
                                                                           COMPARE1.273    
      STOP                                                                 COMPARE1.274    
      END                                                                  COMPARE1.275    
C*L  Arguments:-------------------------------------------------------     COMPARE1.276    

      SUBROUTINE COMPARE(LEN_FIXHD1,LEN_INTHD1,LEN_REALHD1,                 1,41COMPARE1.277    
     &  LEN1_LEVDEPC1,LEN2_LEVDEPC1,LEN1_ROWDEPC1,                         COMPARE1.278    
     &  LEN2_ROWDEPC1,LEN1_COLDEPC1,LEN2_COLDEPC1,                         COMPARE1.279    
     &  LEN1_FLDDEPC1,LEN2_FLDDEPC1,LEN_EXTCNST1,                          COMPARE1.280    
     &  LEN_DUMPHIST1,LEN_CFI11,LEN_CFI21,LEN_CFI31,                       COMPARE1.281    
     &  LEN1_LOOKUP1,LEN2_LOOKUP1,LEN_DATA1,P_FIELD1,                      COMPARE1.282    
     &  LEN_FIXHD2,LEN_INTHD2,LEN_REALHD2,                                 COMPARE1.283    
     &  LEN1_LEVDEPC2,LEN2_LEVDEPC2,LEN1_ROWDEPC2,                         COMPARE1.284    
     &  LEN2_ROWDEPC2,LEN1_COLDEPC2,LEN2_COLDEPC2,                         COMPARE1.285    
     &  LEN1_FLDDEPC2,LEN2_FLDDEPC2,LEN_EXTCNST2,                          COMPARE1.286    
     &  LEN_DUMPHIST2,LEN_CFI12,LEN_CFI22,LEN_CFI32,                       COMPARE1.287    
     &  LEN1_LOOKUP2,LEN2_LOOKUP2,LEN_DATA2,P_FIELD2                       COMPARE1.288    
     & ,NFTIN1,NFTIN2,MAX_FIELD_SIZE1,MAX_FIELD_SIZE2,                     UBC3F402.9      
     & wgdos_expand)                                                       UBC3F402.10     
                                                                           COMPARE1.290    
      IMPLICIT NONE                                                        COMPARE1.291    
                                                                           COMPARE1.292    
      INTEGER                                                              COMPARE1.293    
     & LEN_FIXHD1   !IN Length of fixed length header on file 1            COMPARE1.294    
     &,LEN_INTHD1   !IN Length of integer header on file 1                 COMPARE1.295    
     &,LEN_REALHD1  !IN Length of real header on file 1                    COMPARE1.296    
     &,LEN1_LEVDEPC1!IN 1st dim of lev dependent consts on file 1          COMPARE1.297    
     &,LEN2_LEVDEPC1!IN 2nd dim of lev dependent consts on file 1          COMPARE1.298    
     &,LEN1_ROWDEPC1!IN 1st dim of row dependent consts on file 1          COMPARE1.299    
     &,LEN2_ROWDEPC1!IN 2nd dim of row dependent consts on file 1          COMPARE1.300    
     &,LEN1_COLDEPC1!IN 1st dim of col dependent consts on file 1          COMPARE1.301    
     &,LEN2_COLDEPC1!IN 2nd dim of col dependent consts on file 1          COMPARE1.302    
     &,LEN1_FLDDEPC1!IN 1st dim of field dependent consts on file 1        COMPARE1.303    
     &,LEN2_FLDDEPC1!IN 2nd dim of field dependent consts on file 1        COMPARE1.304    
     &,LEN_EXTCNST1 !IN Length of extra consts on file 1                   COMPARE1.305    
     &,LEN_DUMPHIST1!IN Length of history header on file 1                 COMPARE1.306    
     &,LEN_CFI11    !IN Length of index1 on file 1                         COMPARE1.307    
     &,LEN_CFI21    !IN Length of index2 on file 1                         COMPARE1.308    
     &,LEN_CFI31    !IN Length of index3 on file 1                         COMPARE1.309    
     &,LEN1_LOOKUP1 !IN 1st dim of LOOKUP on file 1                        COMPARE1.310    
     &,LEN2_LOOKUP1 !IN 2nd dim of LOOKUP on file 1                        COMPARE1.311    
     &,LEN_DATA1    !IN Length of data on file 1                           COMPARE1.312    
     &,P_FIELD1     !IN No of p-points per level on file 1                 COMPARE1.313    
     &,MAX_FIELD_SIZE1 !IN Maximum field size on file 1                    AD311093.45     
     &,wgdos_expand ! IN set to 1 to expand WGDOS Fields for comparison    UBC3F402.11     
c                                                                          UBC3F402.12     
      integer lblrec_1, lblrec_2, length_changed                           UBC3F402.13     
                                                                           COMPARE1.314    
      INTEGER                                                              COMPARE1.315    
     & LEN_FIXHD2   !IN Length of fixed length header on file 2            COMPARE1.316    
     &,LEN_INTHD2   !IN Length of integer header on file 2                 COMPARE1.317    
     &,LEN_REALHD2  !IN Length of real header on file 2                    COMPARE1.318    
     &,LEN1_LEVDEPC2!IN 1st dim of lev dependent consts on file 2          COMPARE1.319    
     &,LEN2_LEVDEPC2!IN 2nd dim of lev dependent consts on file 2          COMPARE1.320    
     &,LEN1_ROWDEPC2!IN 1st dim of row dependent consts on file 2          COMPARE1.321    
     &,LEN2_ROWDEPC2!IN 2nd dim of row dependent consts on file 2          COMPARE1.322    
     &,LEN1_COLDEPC2!IN 1st dim of col dependent consts on file 2          COMPARE1.323    
     &,LEN2_COLDEPC2!IN 2nd dim of col dependent consts on file 2          COMPARE1.324    
     &,LEN1_FLDDEPC2!IN 1st dim of field dependent consts on file 2        COMPARE1.325    
     &,LEN2_FLDDEPC2!IN 2nd dim of field dependent consts on file 2        COMPARE1.326    
     &,LEN_EXTCNST2 !IN Length of extra consts on file 2                   COMPARE1.327    
     &,LEN_DUMPHIST2!IN Length of history header on file 2                 COMPARE1.328    
     &,LEN_CFI12    !IN Length of index1 on file 2                         COMPARE1.329    
     &,LEN_CFI22    !IN Length of index2 on file 2                         COMPARE1.330    
     &,LEN_CFI32    !IN Length of index3 on file 2                         COMPARE1.331    
     &,LEN1_LOOKUP2 !IN 1st dim of LOOKUP on file 2                        COMPARE1.332    
     &,LEN2_LOOKUP2 !IN 2nd dim of LOOKUP on file 2                        COMPARE1.333    
     &,LEN_DATA2    !IN Length of data on file 2                           COMPARE1.334    
     &,P_FIELD2     !IN No of p-points per level on file 2                 COMPARE1.335    
     &,MAX_FIELD_SIZE2 !IN Maximum field size on file 2                    AD311093.46     
                                                                           COMPARE1.336    
      INTEGER                                                              COMPARE1.337    
     & NFTIN1       !IN Unit number for file 1                             COMPARE1.338    
     &,NFTIN2       !IN Unit number for file 2                             COMPARE1.339    
                                                                           COMPARE1.340    
                                                                           COMPARE1.341    
C Comdecks: ------------------------------------------------------------   COMPARE1.342    
*CALL CSUBMODL                                                             GDG0F401.143    
*CALL CPPXREF                                                              GDG0F401.144    
*CALL PPXLOOK                                                              GDG0F401.145    
*CALL CLOOKADD                                                             GBC7F404.4      
*CALL C_MDI                                                                GBC7F404.5      
*CALL CSTASH                                                               GDG0F401.146    
                                                                           COMPARE1.344    
C Local arrays:---------------------------------------------------------   COMPARE1.345    
      INTEGER                                                              COMPARE1.346    
     & FIXHD1(LEN_FIXHD1),                       !                         COMPARE1.347    
     & INTHD1(LEN_INTHD1),                       !\                        COMPARE1.348    
     & CFI11(LEN_CFI11+1),CFI21(LEN_CFI21+1),    ! > file 1 headers        COMPARE1.349    
     & CFI31(LEN_CFI31+1),                       !/                        COMPARE1.350    
     & LOOKUP1(LEN1_LOOKUP1,LEN2_LOOKUP1)        !                         COMPARE1.351    
                                                                           COMPARE1.352    
      INTEGER                                                              COMPARE1.353    
     & FIXHD2(LEN_FIXHD2),                       !                         COMPARE1.354    
     & INTHD2(LEN_INTHD2),                       !\                        COMPARE1.355    
     & CFI12(LEN_CFI12+1),CFI22(LEN_CFI22+1),    ! > file 2 headers        COMPARE1.356    
     & CFI32(LEN_CFI32+1),                       !/                        COMPARE1.357    
     & LOOKUP2(LEN1_LOOKUP2,LEN2_LOOKUP2)        !                         COMPARE1.358    
                                                                           COMPARE1.359    
      REAL                                                                 COMPARE1.360    
     & REALHD1(LEN_REALHD1),                     !                         COMPARE1.361    
     & LEVDEPC1(1+LEN1_LEVDEPC1*LEN2_LEVDEPC1),  !                         COMPARE1.362    
     & ROWDEPC1(1+LEN1_ROWDEPC1*LEN2_ROWDEPC1),  !\                        COMPARE1.363    
     & COLDEPC1(1+LEN1_COLDEPC1*LEN2_COLDEPC1),  ! > file 1 headers        COMPARE1.364    
     & FLDDEPC1(1+LEN1_FLDDEPC1*LEN2_FLDDEPC1),  !/                        COMPARE1.365    
     & EXTCNST1(LEN_EXTCNST1+1),                 !                         COMPARE1.366    
     & DUMPHIST1(LEN_DUMPHIST1+1),               !                         COMPARE1.367    
     & R_D1(MAX_FIELD_SIZE1) ! REAL Array for field on file 1              GPB2F401.10     
                                                                           GPB2F401.11     
      INTEGER                                                              GPB2F401.12     
     & I_D1(MAX_FIELD_SIZE1) ! INTEGER Array for field on file 1           GPB2F401.13     
                                                                           GPB2F401.14     
      LOGICAL                                                              GPB2F401.15     
     & L_D1(MAX_FIELD_SIZE1) ! LOGICAL Array for field on file 1           GPB2F401.16     
                                                                           COMPARE1.369    
      REAL                                                                 COMPARE1.370    
     & REALHD2(LEN_REALHD2),                     !                         COMPARE1.371    
     & LEVDEPC2(1+LEN1_LEVDEPC2*LEN2_LEVDEPC2),  !                         COMPARE1.372    
     & ROWDEPC2(1+LEN1_ROWDEPC2*LEN2_ROWDEPC2),  !\                        COMPARE1.373    
     & COLDEPC2(1+LEN1_COLDEPC2*LEN2_COLDEPC2),  ! > file 2 headers        COMPARE1.374    
     & FLDDEPC2(1+LEN1_FLDDEPC2*LEN2_FLDDEPC2),  !/                        COMPARE1.375    
     & EXTCNST2(LEN_EXTCNST2+1),                 !                         COMPARE1.376    
     & DUMPHIST2(LEN_DUMPHIST2+1),               !                         COMPARE1.377    
     & R_D2(MAX_FIELD_SIZE2) ! REAL Array for field on file 2              GPB2F401.17     
                                                                           GPB2F401.18     
      INTEGER                                                              GPB2F401.19     
     & I_D2(MAX_FIELD_SIZE1) ! INTEGER Array for field on file 2           GPB2F401.20     
                                                                           GPB2F401.21     
      LOGICAL                                                              GPB2F401.22     
     & L_D2(MAX_FIELD_SIZE1) ! LOGICAL Array for field on file 2           GPB2F401.23     
                                                                           COMPARE1.379    
      INTEGER                                                              COMPARE1.380    
     * PP_XREF(PPXREF_CODELEN)  !PPXREF codes for a given section/item     COMPARE1.381    
                                                                           COMPARE1.382    
C External subroutines called:------------------------------------------   COMPARE1.383    
      EXTERNAL ABORT,ABORT_IO,READHEAD,READFLDS,HDPPXRF,GETPPX             GDG0F401.147    
C*----------------------------------------------------------------------   COMPARE1.385    
C*L  Local variables:---------------------------------------------------   COMPARE1.386    
      REAL                                                                 COMPARE1.387    
     * MAX_DIFF  ! Maximum difference between two real fields              DR221193.12     
     *,RD1,RD2   ! Real variables to equivalent with LD1/ID1 & LD2/ID2     DR221193.13     
      REAL DIFF_PER,RMS_F1,RMS_F2,RMS_DIFF                                 GPB2F401.6      
                                                                           GPB2F401.7      
*IF DEF,T3E                                                                GBC7F404.141    
                                                                           COMPARE1.389    
      integer jrc_nan                                                      UDG2F402.5      
c                                                                          UDG2F402.6      
      integer jrc_mask                                                     UDG2F402.7      
      integer deb_mask                                                     UDG2F402.8      
c                                                                          UDG2F402.9      
      data jrc_mask/X'7FF0000000000000'/                                   UDG2F402.10     
      data deb_mask/X'FFF0000000000000'/                                   UDG2F402.11     
c                                                                          UDG2F402.12     
*ENDIF                                                                     GBC7F404.142    
      INTEGER                                                              COMPARE1.390    
     & ICODE        ! Error return code from subroutines                   COMPARE1.391    
     &,START_BLOCK  ! READHEAD argument (not used)                         COMPARE1.392    
     &,I,J,K,L,M,N    ! Loop indices                                       UDG2F405.14     
     &,JMIN         ! Minimum length of two headers                        COMPARE1.394    
     &,S_ITEM_CODE  ! STASH item code                                      GBC7F404.6      
     &,SECTION      ! STASH section number                                 COMPARE1.396    
     &,ID1,ID2      ! Integer variables to equivalent with RD1 and RD2     DR221193.14     
     &,N_DIFF       ! No of differences to be listed                       DR221193.15     
     *,IMAX_DIFF    ! Maximum difference between two integer fields        DR221193.16     
     *,PACK_CODE1   ! Packing code for LOOKUP table 1                      DR221193.17     
     *,PACK_CODE2   ! Packing code for LOOKUP table 2                      DR221193.18     
     &,MAX_J        ! Location of max.diff                                 UDG1F403.21     
       INTEGER RowNumber                                                   GDG0F401.148    
      INTEGER MODEL              !Internal model number                    UDG2F305.10     
      INTEGER LEN_FIELD          !Number of points in field to be          UDG1F400.5      
                                 !compared                                 UDG1F400.6      
      INTEGER N1,N2                                                        UDG2F405.15     
      INTEGER OFFSET1                                                      UDG2F405.16     
      INTEGER OFFSET2                                                      UDG2F405.17     
      INTEGER NUMREC1                                                      UDG2F405.18     
      INTEGER NUMREC2                                                      UDG2F405.19     
      INTEGER NMISSING1                                                    UDG2F405.20     
      INTEGER NMISSING2                                                    UDG2F405.21     
      INTEGER IROWDEPC1                                                    UDG2F405.22     
      INTEGER IROWDEPC2                                                    UDG2F405.23     
      INTEGER INDEX(LEN2_LOOKUP1)                                          UDG2F405.24     
      INTEGER NDIFFER(LEN2_LOOKUP1)                                        UDG2F405.25     
      LOGICAL LMISSING1(LEN2_LOOKUP1)                                      UDG2F405.26     
      LOGICAL LMISSING2(LEN2_LOOKUP2)                                      UDG2F405.27     
       INTEGER      EXPPXI                                                 GDG0F401.149    
       CHARACTER*36 EXPPXC                                                 GDG0F401.150    
                                                                           DR221193.19     
      LOGICAL                                                              DR221193.20     
     & LD1,LD2      ! Logical variables to equivalent with RD1 and RD2     DR221193.21     
                                                                           COMPARE1.397    
      CHARACTER                                                            COMPARE1.398    
     & CMESSAGE*100 ! Character string returned if ICODE .ne. 0            COMPARE1.399    
     *,PHRASE*(PPXREF_CHARLEN) ! Name of field                             COMPARE1.400    
      CHARACTER*1 DIFF(MAX_FIELD_SIZE1)                                    GPB2F401.8      
      CHARACTER*200 KEY                                                    GPB2F401.9      
      CHARACTER*80 FILENAME ! Name of output file                          GGH4F401.1      
                                                                           DR221193.22     
      EQUIVALENCE (RD1,ID1,LD1) , (RD2,ID2,LD2)                            DR221193.23     
                                                                           DR221193.24     
      PARAMETER (N_DIFF=10)                                                DR221193.25     
      INTEGER NFT1,NFT2                                                    GDG0F401.141    
      PARAMETER (NFT1=22, NFT2=2)                                          GDG0F401.142    
C*----------------------------------------------------------------------   COMPARE1.401    
                                                                           COMPARE1.402    
!  0. Open PPXREF file                                                     UDG2F305.13     
                                                                           UDG2F305.14     
      ppxRecs=1                                                            GDG0F401.151    
      RowNumber=0                                                          GDG0F401.152    
      cmessage = ' '                                                       GDW1F404.163    
      ICODE=0                                                              UDG9F404.5      
      CALL HDPPXRF(NFT1,'STASHmaster_A',ppxRecs,ICODE,CMESSAGE)            GDG0F401.153    
      IF(ICODE.GT.0)THEN                                                   UDG9F404.6      
        WRITE(6,*) 'Error reading STASHmaster_A'                           UDG9F404.7      
        WRITE(6,*) CMESSAGE                                                UDG9F404.8      
        CALL ABORT                                                         UDG9F404.9      
      END IF                                                               UDG9F404.10     
      CALL HDPPXRF(NFT1,'STASHmaster_O',ppxRecs,ICODE,CMESSAGE)            GDG0F401.154    
      IF(ICODE.GT.0)THEN                                                   UDG9F404.11     
        WRITE(6,*) 'Error reading STASHmaster_O'                           UDG9F404.12     
        WRITE(6,*) CMESSAGE                                                UDG9F404.13     
        CALL ABORT                                                         UDG9F404.14     
      END IF                                                               UDG9F404.15     
      CALL HDPPXRF(NFT1,'STASHmaster_S',ppxRecs,ICODE,CMESSAGE)            GDG0F401.155    
      IF(ICODE.GT.0)THEN                                                   UDG9F404.16     
        WRITE(6,*) 'Error reading STASHmaster_S'                           UDG9F404.17     
        WRITE(6,*) CMESSAGE                                                UDG9F404.18     
        CALL ABORT                                                         UDG9F404.19     
      END IF                                                               UDG9F404.20     
      CALL HDPPXRF(NFT1,'STASHmaster_W',ppxRecs,ICODE,CMESSAGE)            GDG0F401.156    
      IF(ICODE.GT.0)THEN                                                   GDW1F404.164    
        WRITE(6,*) 'Error reading STASHmaster_W'                           UDG9F404.21     
        WRITE(6,*) CMESSAGE                                                GDG0F401.158    
        CALL ABORT                                                         GDG0F401.159    
      ENDIF                                                                GDG0F401.160    
                                                                           GDG0F401.161    
      CALL GETPPX(NFT1,NFT2,'STASHmaster_A',RowNumber,                     GDG0F401.162    
*CALL ARGPPX                                                               GDG0F401.163    
     &            ICODE,CMESSAGE)                                          GDG0F401.164    
      CALL GETPPX(NFT1,NFT2,'STASHmaster_O',RowNumber,                     GDG0F401.165    
*CALL ARGPPX                                                               GDG0F401.166    
     &            ICODE,CMESSAGE)                                          GDG0F401.167    
      CALL GETPPX(NFT1,NFT2,'STASHmaster_S',RowNumber,                     GDG0F401.168    
*CALL ARGPPX                                                               GDG0F401.169    
     &            ICODE,CMESSAGE)                                          GDG0F401.170    
      CALL GETPPX(NFT1,NFT2,'STASHmaster_W',RowNumber,                     GDG0F401.171    
*CALL ARGPPX                                                               GDG0F401.172    
     &            ICODE,CMESSAGE)                                          GDG0F401.173    
      IF(ICODE.NE.0)THEN                                                   GDG0F401.174    
        WRITE(6,*) CMESSAGE                                                GDG0F401.175    
        CALL ABORT                                                         GDG0F401.176    
      ENDIF                                                                GDG0F401.177    
                                                                           GDG0F401.178    
!User STASHmaster                                                          GDG0F401.179    
      CALL HDPPXRF(0,' ',ppxRecs,ICODE,CMESSAGE)                           GDG0F401.180    
      IF(ICODE.NE.0)THEN                                                   GDG0F401.181    
        WRITE(6,*) CMESSAGE                                                GDG0F401.182    
        CALL ABORT                                                         GDG0F401.183    
      ENDIF                                                                GDG0F401.184    
      CALL GETPPX(0,NFT2,' ',RowNumber,                                    GDG0F401.185    
*CALL ARGPPX                                                               GDG0F401.186    
     &            ICODE,CMESSAGE)                                          GDG0F401.187    
      IF(ICODE.NE.0)THEN                                                   GDG0F401.188    
        WRITE(6,*) CMESSAGE                                                GDG0F401.189    
        CALL ABORT                                                         GDG0F401.190    
      ENDIF                                                                GDG0F401.191    
! 1: Open output files                                                     UDG2F405.28     
!                                                                          UDG2F405.29     
! Open up unit 7: Summary part one                                         UDG2F405.30     
      CALL GET_FILE(7,FILENAME,80,ICODE)                                   UDG2F405.31     
      OPEN(7,FILE=FILENAME,STATUS='NEW',IOSTAT=ICODE)                      UDG2F405.32     
      IF (ICODE.NE.0) THEN                                                 UDG2F405.33     
        WRITE(6,*) 'Can not write to ',FILENAME                            UDG2F405.34     
      ELSE                                                                 UDG2F405.35     
        WRITE(6,*) 'OPEN: 7:',FILENAME,'has been created'                  UDG2F405.36     
      ENDIF                                                                UDG2F405.37     
      WRITE(7,*)' COMPARE - SUMMARY MODE'                                  UDG2F405.38     
      WRITE(7,*)'-----------------------'                                  UDG2F405.39     
      WRITE(7,*)' '                                                        UDG2F405.40     
                                                                           UDG2F405.41     
! Open up unit 8: Summary part two                                         UDG2F405.42     
      CALL GET_FILE(8,FILENAME,80,ICODE)                                   UDG2F405.43     
      OPEN(8,FILE=FILENAME,STATUS='NEW',IOSTAT=ICODE)                      UDG2F405.44     
      IF (ICODE.NE.0) THEN                                                 UDG2F405.45     
        WRITE(6,*) 'Can not write to ',FILENAME                            UDG2F405.46     
      ELSE                                                                 UDG2F405.47     
        WRITE(6,*) 'OPEN: 8:',FILENAME,'has been created'                  UDG2F405.48     
      ENDIF                                                                UDG2F405.49     
                                                                           UDG2F405.50     
 ! Open up unit 10                                                         UDG2F405.51     
      CALL GET_FILE(10,FILENAME,80,ICODE)                                  UDG2F405.52     
      OPEN(10,FILE=FILENAME,STATUS='NEW',IOSTAT=ICODE)                     UDG2F405.53     
      IF (ICODE.NE.0) THEN                                                 UDG2F405.54     
        WRITE(6,*) 'Can not write to ',FILENAME                            UDG2F405.55     
      ELSE                                                                 UDG2F405.56     
        WRITE(6,*) 'OPEN: 10:',FILENAME,'has been created'                 UDG2F405.57     
      ENDIF                                                                UDG2F405.58     
      WRITE(10,*)' COMPARE - DIFFERENCE CHARTS'                            UDG2F405.59     
      WRITE(10,*)'----------------------------'                            UDG2F405.60     
      WRITE(10,*)' '                                                       UDG2F405.61     
                                                                           COMPARE1.404    
      WRITE(6,*)' '                                                        COMPARE1.405    
      WRITE(6,*)'          FILE 1'                                         COMPARE1.406    
      WRITE(6,*)'          ------'                                         COMPARE1.407    
      CALL READHEAD(NFTIN1,FIXHD1,LEN_FIXHD1,                              COMPARE1.408    
     &                INTHD1,LEN_INTHD1,                                   COMPARE1.409    
     &                REALHD1,LEN_REALHD1,                                 COMPARE1.410    
     &                LEVDEPC1,LEN1_LEVDEPC1,LEN2_LEVDEPC1,                COMPARE1.411    
     &                ROWDEPC1,LEN1_ROWDEPC1,LEN2_ROWDEPC1,                COMPARE1.412    
     &                COLDEPC1,LEN1_COLDEPC1,LEN2_COLDEPC1,                COMPARE1.413    
     &                FLDDEPC1,LEN1_FLDDEPC1,LEN2_FLDDEPC1,                COMPARE1.414    
     &                EXTCNST1,LEN_EXTCNST1,                               COMPARE1.415    
     &                DUMPHIST1,LEN_DUMPHIST1,                             COMPARE1.416    
     &                CFI11,LEN_CFI11,                                     COMPARE1.417    
     &                CFI21,LEN_CFI21,                                     COMPARE1.418    
     &                CFI31,LEN_CFI31,                                     COMPARE1.419    
     &                LOOKUP1,LEN1_LOOKUP1,LEN2_LOOKUP1,                   COMPARE1.420    
     &                LEN_DATA1,                                           COMPARE1.421    
*CALL ARGPPX                                                               GDG0F401.192    
     &                START_BLOCK,ICODE,CMESSAGE)                          COMPARE1.422    
                                                                           COMPARE1.423    
      IF(ICODE.NE.0)THEN                                                   COMPARE1.424    
        WRITE(6,*)CMESSAGE,ICODE                                           COMPARE1.425    
        CALL ABORT                                                         COMPARE1.426    
      ENDIF                                                                COMPARE1.427    
                                                                           COMPARE1.428    
CL 2. Read in file 2 header                                                COMPARE1.429    
                                                                           COMPARE1.430    
      WRITE(6,*)' '                                                        COMPARE1.431    
      WRITE(6,*)'          FILE 2'                                         COMPARE1.432    
      WRITE(6,*)'          ------'                                         COMPARE1.433    
      CALL READHEAD(NFTIN2,FIXHD2,LEN_FIXHD2,                              COMPARE1.434    
     &                INTHD2,LEN_INTHD2,                                   COMPARE1.435    
     &                REALHD2,LEN_REALHD2,                                 COMPARE1.436    
     &                LEVDEPC2,LEN1_LEVDEPC2,LEN2_LEVDEPC2,                COMPARE1.437    
     &                ROWDEPC2,LEN1_ROWDEPC2,LEN2_ROWDEPC2,                COMPARE1.438    
     &                COLDEPC2,LEN1_COLDEPC2,LEN2_COLDEPC2,                COMPARE1.439    
     &                FLDDEPC2,LEN1_FLDDEPC2,LEN2_FLDDEPC2,                COMPARE1.440    
     &                EXTCNST2,LEN_EXTCNST2,                               COMPARE1.441    
     &                DUMPHIST2,LEN_DUMPHIST2,                             COMPARE1.442    
     &                CFI12,LEN_CFI12,                                     COMPARE1.443    
     &                CFI22,LEN_CFI22,                                     COMPARE1.444    
     &                CFI32,LEN_CFI32,                                     COMPARE1.445    
     &                LOOKUP2,LEN1_LOOKUP2,LEN2_LOOKUP2,                   COMPARE1.446    
     &                LEN_DATA2,                                           COMPARE1.447    
*CALL ARGPPX                                                               GDG0F401.193    
     &                START_BLOCK,ICODE,CMESSAGE)                          COMPARE1.448    
                                                                           COMPARE1.449    
                                                                           COMPARE1.450    
      IF(ICODE.NE.0)THEN                                                   COMPARE1.451    
        WRITE(6,*)CMESSAGE,ICODE                                           COMPARE1.452    
        CALL ABORT                                                         COMPARE1.453    
      ENDIF                                                                COMPARE1.454    
                                                                           COMPARE1.455    
CL 3. Compare fixed length headers                                         COMPARE1.456    
                                                                           COMPARE1.457    
      IF(FIXHD1(5).NE.FIXHD2(5))THEN                                       UDG2F405.62     
        WRITE(6,'(''WARNING: FIXHD1(5)  = '',I3,'' FIXHD2(5)  = '',I3)')   UDG2F405.63     
     &    FIXHD1(5),FIXHD2(5)                                              UDG2F405.64     
        WRITE(7,'(''WARNING: FIXHD1(5)  = '',I3,'' FIXHD2(5)  = '',I3)')   UDG2F405.65     
     &    FIXHD1(5),FIXHD2(5)                                              UDG2F405.66     
        WRITE(6,'(''         File types are different'')')                 UDG2F405.67     
        WRITE(7,'(''         File types are different'')')                 UDG2F405.68     
      END IF                                                               UDG2F405.69     
      WRITE(6,*)' '                                                        COMPARE1.458    
      WRITE(6,*)'FIXED LENGTH HEADER:'                                     COMPARE1.459    
                                                                           UDG2F405.70     
! Check length of fixed length headers                                     UDG2F405.71     
      JMIN=MIN0(LEN_FIXHD1,LEN_FIXHD2)                                     UDG2F405.72     
      IF(LEN_FIXHD1.NE.LEN_FIXHD2)THEN                                     UDG2F405.73     
        WRITE(6,'(''WARNING: LEN_FIXHD1 = '',I3,'' LEN_FIXHD2 = '',I3)')   UDG2F405.74     
     &    LEN_FIXHD1,LEN_FIXHD2                                            UDG2F405.75     
        WRITE(7,'(''WARNING: LEN_FIXHD1 = '',I3,'' LEN_FIXHD2 = '',I3)')   UDG2F405.76     
     &    LEN_FIXHD1,LEN_FIXHD2                                            UDG2F405.77     
        WRITE(6,'(''         Fixed length headers have different '',       UDG2F405.78     
     &            ''lengths'')')                                           UDG2F405.79     
        WRITE(7,'(''         Fixed length headers have different '',       UDG2F405.80     
     &            ''lengths'')')                                           UDG2F405.81     
        WRITE(6,'(''         Comparing first '',I3,''elements only'')')    UDG2F405.82     
     &    JMIN                                                             UDG2F405.83     
        WRITE(7,'(''         Comparing first '',I3,''elements only'')')    UDG2F405.84     
     &    JMIN                                                             UDG2F405.85     
      END IF                                                               UDG2F405.86     
                                                                           UDG2F405.87     
! Check fixed length header                                                UDG2F405.88     
      IF(FIXHD1(152).EQ.FIXHD2(152))THEN                                   UDG2F405.89     
        IF(FIXHD1(160).NE.FIXHD2(160))THEN                                 UDG2F405.90     
          WRITE(6,'(''WARNING: LEN1 = '',i9,'' and LEN2 = '',i9)')         PXCOMP.1      
     &      FIXHD1(160),FIXHD2(160)                                        UDG2F405.92     
          WRITE(7,'(''WARNING: LEN1 = '',i9,'' and LEN2 = '',i9)')         PXCOMP.2      
     &      FIXHD1(160),FIXHD2(160)                                        UDG2F405.94     
          WRITE(6,'(''         Data start address differs'')')             UDG2F405.95     
          WRITE(7,'(''         Data start address differs'')')             UDG2F405.96     
          WRITE(6,'(''         Possibly due to comparing old and new '',   UDG2F405.97     
     &              ''format UM dumps or fieldsfiles'')')                  UDG2F405.98     
          WRITE(7,'(''         Possibly due to comparing old and new '',   UDG2F405.99     
     &              ''format UM dumps or fieldsfiles'')')                  UDG2F405.100    
        ELSE IF(FIXHD1(161).NE.FIXHD2(161))THEN                            UDG2F405.101    
          WRITE(6,'(''WARNING: LEN1 = '',i9,'' and LEN2 = '',i9)')         PXCOMP.3      
     &      FIXHD1(161),FIXHD2(161)                                        UDG2F405.103    
          WRITE(7,'(''WARNING: LEN1 = '',i9,'' and LEN2 = '',i9)')         PXCOMP.4      
     &      FIXHD1(161),FIXHD2(161)                                        UDG2F405.105    
          WRITE(6,'(''         Length of data differs'')')                 UDG2F405.106    
          WRITE(7,'(''         Length of data differs'')')                 UDG2F405.107    
          WRITE(6,'(''         Possibly due to comparing old and new '',   UDG2F405.108    
     &              ''format UM dumps or fieldsfiles'')')                  UDG2F405.109    
          WRITE(7,'(''         Possibly due to comparing old and new '',   UDG2F405.110    
     &              ''format UM dumps or fieldsfiles'')')                  UDG2F405.111    
        END IF                                                             UDG2F405.112    
      END IF                                                               UDG2F405.113    
                                                                           UDG2F405.114    
      K = 0                                                                UDG2F405.115    
      length_changed=0                                                     UBC3F402.14     
      DO I=1,JMIN                                                          COMPARE1.464    
        IF(FIXHD1(I).NE.FIXHD2(I))THEN                                     COMPARE1.465    
        WRITE(6,'(''ITEM = '',i4,''  Values = '',i7,'' and '',i7)')        UDG2F405.116    
     &    i, fixhd1(i), fixhd2(i)                                          UDG2F405.117    
        K = K + 1                                                          UDG2F405.118    
        ENDIF                                                              COMPARE1.467    
      ENDDO                                                                COMPARE1.468    
                                                                           UDG2F405.119    
      IF(K.EQ.0) WRITE(6,*) 'OK'                                           UDG2F405.120    
      WRITE(8,*) 'FIXED LENGTH HEADER:        ',                           UDG2F405.121    
     &           'Number of differences = ',K                              UDG2F405.122    
                                                                           COMPARE1.469    
CL 4. Compare integer headers                                              COMPARE1.470    
                                                                           COMPARE1.471    
      IF(LEN_INTHD1.GT.0.OR.LEN_INTHD2.GT.0)THEN                           COMPARE1.472    
        WRITE(6,*)' '                                                      COMPARE1.473    
        WRITE(6,*)'INTEGER HEADER:'                                        COMPARE1.474    
        IF(LEN_INTHD1.NE.LEN_INTHD2)THEN                                   COMPARE1.475    
          WRITE(6,*)'WARNING LEN1=',LEN_INTHD1,' LEN2=',LEN_INTHD2         COMPARE1.476    
        ENDIF                                                              COMPARE1.477    
        JMIN=MIN0(LEN_INTHD1,LEN_INTHD2)                                   COMPARE1.478    
        K=0                                                                COMPARE1.479    
        DO I=1,JMIN                                                        COMPARE1.480    
          IF(INTHD1(I).NE.INTHD2(I))THEN                                   COMPARE1.481    
            K=K+1                                                          COMPARE1.482    
            WRITE(6,*)'ITEM=',I,INTHD1(I),INTHD2(I)                        COMPARE1.483    
          ENDIF                                                            COMPARE1.484    
        ENDDO                                                              COMPARE1.485    
      ENDIF                                                                COMPARE1.486    
                                                                           UDG2F405.123    
      IF(K.EQ.0) WRITE(6,*) 'OK'                                           UDG2F405.124    
      WRITE(8,*) 'INTEGER HEADER:             ',                           UDG2F405.125    
     &           'Number of differences = ',K                              UDG2F405.126    
      L=K                                                                  COMPARE1.488    
                                                                           COMPARE1.489    
CL 5. Compare real headers                                                 COMPARE1.490    
                                                                           COMPARE1.491    
      IF(LEN_REALHD1.GT.0.OR.LEN_REALHD2.GT.0)THEN                         COMPARE1.492    
        WRITE(6,*)' '                                                      COMPARE1.493    
        WRITE(6,*)'REAL HEADER:'                                           COMPARE1.494    
        IF(LEN_REALHD1.NE.LEN_REALHD2)THEN                                 COMPARE1.495    
          WRITE(6,*)'WARNING LEN1=',LEN_REALHD1,' LEN2=',LEN_REALHD2       COMPARE1.496    
        ENDIF                                                              COMPARE1.497    
        JMIN=MIN0(LEN_REALHD1,LEN_REALHD2)                                 COMPARE1.498    
        K=0                                                                COMPARE1.499    
        DO I=1,JMIN                                                        COMPARE1.500    
*IF DEF,T3E                                                                GAV0F405.15     
          IF(XOR(REALHD1(I),REALHD2(I)).NE.0) THEN                         GAV0F405.16     
*ELSE                                                                      GAV0F405.17     
          IF(REALHD1(I).NE.REALHD2(I))THEN                                 GAV0F405.18     
*ENDIF                                                                     GAV0F405.19     
            K=K+1                                                          COMPARE1.502    
            WRITE(6,*)'ITEM=',I,REALHD1(I),REALHD2(I)                      COMPARE1.503    
          ENDIF                                                            COMPARE1.504    
        ENDDO                                                              COMPARE1.505    
      ENDIF                                                                COMPARE1.506    
                                                                           UDG2F405.127    
      IF(K.EQ.0) WRITE(6,*) 'OK'                                           UDG2F405.128    
      WRITE(8,*) 'REAL HEADER:                ',                           UDG2F405.129    
     &           'Number of differences = ',K                              UDG2F405.130    
      L=L+K                                                                COMPARE1.508    
                                                                           COMPARE1.509    
CL 6. Compare level dependent constants                                    COMPARE1.510    
                                                                           COMPARE1.511    
      WRITE(6,*)' '                                                        UDR2F304.3      
      WRITE(6,*)'LEVEL DEPENDENT CONSTS:'                                  UDR2F304.4      
      IF(FIXHD1(110).GT.0 .AND. FIXHD2(110).GT.0) THEN                     UDR2F304.5      
      IF(LEN1_LEVDEPC1.NE.LEN1_LEVDEPC2)THEN                               COMPARE1.512    
        WRITE(6,*)'ERROR : different number of levels'                     UDR2F304.6      
        WRITE(6,*)'LEV1=',LEN1_LEVDEPC1,' LEV2=',LEN1_LEVDEPC2             COMPARE1.514    
        CALL ABORT                                                         COMPARE1.515    
      ELSEIF(LEN2_LEVDEPC1.GT.0.OR.LEN2_LEVDEPC2.GT.0)THEN                 UDR2F304.7      
        IF(LEN2_LEVDEPC1.NE.LEN2_LEVDEPC2)THEN                             COMPARE1.520    
          WRITE(6,*)'WARNING LEN1=',LEN2_LEVDEPC1,' LEN2=',LEN2_LEVDEPC2   COMPARE1.521    
        ENDIF                                                              COMPARE1.522    
        JMIN=MIN0(LEN2_LEVDEPC1,LEN2_LEVDEPC2)                             COMPARE1.523    
        K=0                                                                COMPARE1.524    
        DO I=1,JMIN                                                        COMPARE1.525    
          DO J=1,LEN1_LEVDEPC1                                             COMPARE1.526    
*IF DEF,T3E                                                                GAV0F405.20     
            IF(XOR(LEVDEPC1((I-1)*LEN1_LEVDEPC1+J),                        GAV0F405.21     
     &        LEVDEPC2((I-1)*LEN1_LEVDEPC1+J)).NE.0)THEN                   GAV0F405.22     
*ELSE                                                                      GAV0F405.23     
            IF(LEVDEPC1((I-1)*LEN1_LEVDEPC1+J).NE.                         GAV0F405.24     
     &        LEVDEPC2((I-1)*LEN1_LEVDEPC1+J))THEN                         GAV0F405.25     
*ENDIF                                                                     GAV0F405.26     
              K=K+1                                                        COMPARE1.529    
              WRITE(6,*)'LEVEL=',J,'ITEM=',I,                              COMPARE1.530    
     &        LEVDEPC1((I-1)*LEN1_LEVDEPC1+J),                             COMPARE1.531    
     &        LEVDEPC2((I-1)*LEN1_LEVDEPC1+J)                              COMPARE1.532    
           ENDIF                                                           COMPARE1.533    
          ENDDO                                                            COMPARE1.534    
        ENDDO                                                              COMPARE1.535    
                                                                           UDG2F405.131    
        IF(K.EQ.0) WRITE(6,*) 'OK'                                         UDG2F405.132    
        WRITE(8,*) 'LEVEL DEPENDENT CONSTANTS:  ',                         UDG2F405.133    
     &             'Number of differences = ',K                            UDG2F405.134    
        L=L+K                                                              COMPARE1.537    
      ENDIF                                                                COMPARE1.538    
      ELSE                                                                 UDR2F304.8      
        WRITE(6,*)'No comparison done'                                     UDR2F304.9      
        IF (FIXHD1(110).LE.0) WRITE(6,*)'No array in FILE 1'               UDR2F304.10     
        IF (FIXHD2(110).LE.0) WRITE(6,*)'No array in FILE 2'               UDR2F304.11     
      ENDIF                                                                UDR2F304.12     
                                                                           COMPARE1.539    
CL 7. Compare row dependent constants                                      COMPARE1.540    
                                                                           COMPARE1.541    
      WRITE(6,*)' '                                                        UDR2F304.13     
      WRITE(6,*)'ROW DEPENDENT CONSTS:'                                    UDR2F304.14     
      IF(FIXHD1(115).GT.0 .AND. FIXHD2(115).GT.0) THEN                     UDR2F304.15     
      IF(LEN1_ROWDEPC1.NE.LEN1_ROWDEPC2)THEN                               COMPARE1.542    
        WRITE(6,*)'ERROR : different number of rows'                       UDR2F304.16     
        WRITE(6,*)'ROW1=',LEN1_ROWDEPC1,' ROW2=',LEN1_ROWDEPC2             COMPARE1.544    
        CALL ABORT                                                         COMPARE1.545    
      ELSEIF(LEN2_ROWDEPC1.GT.0.OR.LEN2_ROWDEPC2.GT.0)THEN                 UDR2F304.17     
        IF(LEN2_ROWDEPC1.NE.LEN2_ROWDEPC2)THEN                             COMPARE1.550    
          WRITE(6,*)'WARNING different second dimension'                   UDR2F304.18     
          WRITE(6,*)'LEN1=',LEN2_ROWDEPC1,' LEN2=',LEN2_ROWDEPC2           UDR2F304.19     
        ENDIF                                                              COMPARE1.552    
        JMIN=MIN0(LEN2_ROWDEPC1,LEN2_ROWDEPC2)                             COMPARE1.553    
        K=0                                                                COMPARE1.554    
        DO I=1,JMIN                                                        COMPARE1.555    
          DO J=1,LEN1_ROWDEPC1                                             COMPARE1.556    
*IF DEF,T3E                                                                GAV0F405.27     
            IF(XOR(ROWDEPC1((I-1)*LEN1_ROWDEPC1+J),                        GAV0F405.28     
     &         ROWDEPC2((I-1)*LEN1_ROWDEPC1+J)).NE.0)THEN                  GAV0F405.29     
*ELSE                                                                      GAV0F405.30     
            IF(ROWDEPC1((I-1)*LEN1_ROWDEPC1+J).NE.                         GAV0F405.31     
     &         ROWDEPC2((I-1)*LEN1_ROWDEPC1+J))THEN                        GAV0F405.32     
*ENDIF                                                                     GAV0F405.33     
              K=K+1                                                        COMPARE1.559    
              WRITE(6,*)'ROW=',I,'ITEM=',J,                                COMPARE1.560    
     &        ROWDEPC1((I-1)*LEN1_ROWDEPC1+J),                             COMPARE1.561    
     &        ROWDEPC2((I-1)*LEN1_ROWDEPC1+J)                              COMPARE1.562    
            ENDIF                                                          COMPARE1.563    
          ENDDO                                                            COMPARE1.564    
        ENDDO                                                              COMPARE1.565    
                                                                           UDG2F405.135    
        IF(K.EQ.0) WRITE(6,*) 'OK'                                         UDG2F405.136    
        WRITE(8,*) 'ROW DEPENDENT CONSTANTS:    ',                         UDG2F405.137    
     &             'Number of differences = ',K                            UDG2F405.138    
        L=L+K                                                              COMPARE1.567    
      ENDIF                                                                COMPARE1.568    
      ELSE                                                                 UDR2F304.20     
        WRITE(6,*)'No comparison done'                                     UDR2F304.21     
        IF (FIXHD1(115).LE.0) WRITE(6,*)'No array in FILE 1'               UDR2F304.22     
        IF (FIXHD2(115).LE.0) WRITE(6,*)'No array in FILE 2'               UDR2F304.23     
      ENDIF                                                                UDR2F304.24     
                                                                           COMPARE1.569    
CL 8. Compare column dependent constants                                   COMPARE1.570    
                                                                           COMPARE1.571    
      WRITE(6,*)' '                                                        UDR2F304.25     
      WRITE(6,*)'COLUMN DEPENDENT CONSTS:'                                 UDR2F304.26     
      IF(FIXHD1(120).GT.0 .AND. FIXHD2(120).GT.0) THEN                     UDR2F304.27     
      IF(LEN1_COLDEPC1.NE.LEN1_COLDEPC2)THEN                               COMPARE1.572    
        WRITE(6,*)'ERROR : different number of columns.'                   UDR2F304.28     
        WRITE(6,*)'COL1=',LEN1_COLDEPC1,' COL2=',LEN1_COLDEPC2             UDR2F304.29     
        CALL ABORT                                                         COMPARE1.575    
      ELSEIF(LEN2_COLDEPC1.GT.0.OR.LEN2_COLDEPC2.GT.0)THEN                 UDR2F304.30     
        IF(LEN2_COLDEPC1.NE.LEN2_COLDEPC2)THEN                             COMPARE1.580    
          WRITE(6,*)'WARNING LEN1=',LEN2_COLDEPC1,' LEN2=',LEN2_COLDEPC2   COMPARE1.581    
        ENDIF                                                              COMPARE1.582    
        JMIN=MIN0(LEN2_COLDEPC1,LEN2_COLDEPC2)                             COMPARE1.583    
        K=0                                                                COMPARE1.584    
        DO I=1,JMIN                                                        COMPARE1.585    
          DO J=1,LEN1_COLDEPC1                                             COMPARE1.586    
*IF DEF,T3E                                                                GAV0F405.34     
            IF(XOR(COLDEPC1((I-1)*LEN1_COLDEPC1+J),                        GAV0F405.35     
     &        COLDEPC2((I-1)*LEN1_COLDEPC1+J)).NE.0) THEN                  GAV0F405.36     
*ELSE                                                                      GAV0F405.37     
            IF(COLDEPC1((I-1)*LEN1_COLDEPC1+J).NE.                         GAV0F405.38     
     &        COLDEPC2((I-1)*LEN1_COLDEPC1+J))THEN                         GAV0F405.39     
*ENDIF                                                                     GAV0F405.40     
              K=K+1                                                        COMPARE1.589    
              WRITE(6,*)'COL=',I,'ITEM=',J,                                COMPARE1.590    
     &        COLDEPC1((I-1)*LEN1_COLDEPC1+J),                             COMPARE1.591    
     &        COLDEPC2((I-1)*LEN1_COLDEPC1+J)                              COMPARE1.592    
            ENDIF                                                          COMPARE1.593    
          ENDDO                                                            COMPARE1.594    
        ENDDO                                                              COMPARE1.595    
                                                                           UDG2F405.139    
        IF(K.EQ.0) WRITE(6,*) 'OK'                                         UDG2F405.140    
        WRITE(8,*) 'COLUMN DEPENDENT CONSTANTS: ',                         UDG2F405.141    
     &             'Number of differences = ',K                            UDG2F405.142    
        L=L+K                                                              COMPARE1.597    
      ENDIF                                                                COMPARE1.598    
      ELSE                                                                 UDR2F304.31     
        WRITE(6,*)'No comparison done'                                     UDR2F304.32     
        IF (FIXHD1(120).LE.0) WRITE(6,*)'No array in FILE 1'               UDR2F304.33     
        IF (FIXHD2(120).LE.0) WRITE(6,*)'No array in FILE 2'               UDR2F304.34     
      ENDIF                                                                UDR2F304.35     
                                                                           COMPARE1.599    
CL 9. Compare field dependent constants                                    COMPARE1.600    
                                                                           COMPARE1.601    
      WRITE(6,*)' '                                                        UDR2F304.36     
      WRITE(6,*)'FIELD DEPENDENT CONSTS:'                                  UDR2F304.37     
      IF(FIXHD1(125).GT.0 .AND. FIXHD2(125).GT.0) THEN                     UDR2F304.38     
      IF(LEN1_FLDDEPC1.NE.LEN1_FLDDEPC2)THEN                               COMPARE1.602    
        WRITE(6,*)'ERROR : different number of fields.'                    UDR2F304.39     
        WRITE(6,*)'FLD1=',LEN1_FLDDEPC1,' FLD2=',LEN1_FLDDEPC2             COMPARE1.604    
        CALL ABORT                                                         COMPARE1.605    
      ELSEIF(LEN2_FLDDEPC1.GT.0.OR.LEN2_FLDDEPC2.GT.0)THEN                 UDR2F304.40     
        IF(LEN2_FLDDEPC1.NE.LEN2_FLDDEPC2)THEN                             COMPARE1.610    
          WRITE(6,*)'WARNING LEN1=',LEN2_FLDDEPC1,' LEN2=',LEN2_FLDDEPC2   COMPARE1.611    
        ENDIF                                                              COMPARE1.612    
        JMIN=MIN0(LEN2_FLDDEPC1,LEN2_FLDDEPC2)                             COMPARE1.613    
        K=0                                                                COMPARE1.614    
        DO I=1,JMIN                                                        COMPARE1.615    
          DO J=1,LEN1_FLDDEPC1                                             COMPARE1.616    
*IF DEF,T3E                                                                GAV0F405.41     
            IF(XOR(FLDDEPC1((I-1)*LEN1_FLDDEPC1+J),                        GAV0F405.42     
     &        FLDDEPC2((I-1)*LEN1_FLDDEPC1+J)).NE.0) THEN                  GAV0F405.43     
*ELSE                                                                      GAV0F405.44     
            IF(FLDDEPC1((I-1)*LEN1_FLDDEPC1+J).NE.                         GAV0F405.45     
     &        FLDDEPC2((I-1)*LEN1_FLDDEPC1+J))THEN                         GAV0F405.46     
*ENDIF                                                                     GAV0F405.47     
             K=K+1                                                         COMPARE1.619    
             WRITE(6,*)'FIELD=',J,'ITEM=',I,                               COMPARE1.620    
     &       FLDDEPC1((I-1)*LEN1_FLDDEPC1+J),                              COMPARE1.621    
     &       FLDDEPC2((I-1)*LEN1_FLDDEPC1+J)                               COMPARE1.622    
           ENDIF                                                           COMPARE1.623    
          ENDDO                                                            COMPARE1.624    
        ENDDO                                                              COMPARE1.625    
                                                                           UDG2F405.143    
        IF(K.EQ.0) WRITE(6,*) 'OK'                                         UDG2F405.144    
        WRITE(8,*) 'FIELD DEPENDENT CONSTANTS:  ',                         UDG2F405.145    
     &             'Number of differences = ',K                            UDG2F405.146    
                                                                           UDG2F405.147    
        L=L+K                                                              COMPARE1.627    
      ENDIF                                                                COMPARE1.628    
      ELSE                                                                 UDR2F304.41     
        WRITE(6,*)'No comparison done'                                     UDR2F304.42     
        IF (FIXHD1(125).LE.0) WRITE(6,*)'No array in FILE 1'               UDR2F304.43     
        IF (FIXHD2(125).LE.0) WRITE(6,*)'No array in FILE 2'               UDR2F304.44     
      ENDIF                                                                UDR2F304.45     
                                                                           COMPARE1.629    
CL 10. Compare extra constants                                             COMPARE1.630    
                                                                           COMPARE1.631    
      WRITE(6,*)' '                                                        UDR2F304.46     
      WRITE(6,*)'EXTRA CONSTANTS:'                                         UDR2F304.47     
      IF(FIXHD1(130).GT.0 .AND. FIXHD2(130).GT.0) THEN                     UDR2F304.48     
      IF(LEN_EXTCNST1.GT.0.OR.LEN_EXTCNST2.GT.0)THEN                       COMPARE1.632    
        IF(LEN_EXTCNST1.NE.LEN_EXTCNST2)THEN                               COMPARE1.635    
          WRITE(6,*)'WARNING LEN1=',LEN_EXTCNST1,' LEN2=',LEN_EXTCNST2     COMPARE1.636    
        ENDIF                                                              COMPARE1.637    
        JMIN=MIN0(LEN_EXTCNST1,LEN_EXTCNST2)                               COMPARE1.638    
        K=0                                                                COMPARE1.639    
        DO I=1,JMIN                                                        COMPARE1.640    
*IF DEF,T3E                                                                GAV0F405.48     
          IF(XOR(EXTCNST1(I),EXTCNST2(I)).NE.0) THEN                       GAV0F405.49     
*ELSE                                                                      GAV0F405.50     
          IF(EXTCNST1(I).NE.EXTCNST2(I))THEN                               GAV0F405.51     
*ENDIF                                                                     GAV0F405.52     
            K=K+1                                                          COMPARE1.642    
            WRITE(6,*)'ITEM=',I,EXTCNST1(I),EXTCNST2(I)                    COMPARE1.643    
          ENDIF                                                            COMPARE1.644    
        ENDDO                                                              COMPARE1.645    
                                                                           UDG2F405.148    
        IF(K.EQ.0) WRITE(6,*) 'OK'                                         UDG2F405.149    
        WRITE(8,*) 'EXTRA CONSTANTS:            ',                         UDG2F405.150    
     &             'Number of differences = ',K                            UDG2F405.151    
                                                                           UDG2F405.152    
        L=L+K                                                              COMPARE1.647    
      ENDIF                                                                COMPARE1.648    
      ELSE                                                                 UDR2F304.49     
        WRITE(6,*)'No comparison done'                                     UDR2F304.50     
        IF (FIXHD1(130).LE.0) WRITE(6,*)'No array in FILE 1'               UDR2F304.51     
        IF (FIXHD2(130).LE.0) WRITE(6,*)'No array in FILE 2'               UDR2F304.52     
      ENDIF                                                                UDR2F304.53     
                                                                           COMPARE1.649    
CL 11. Compare dump history                                                COMPARE1.650    
                                                                           COMPARE1.651    
      WRITE(6,*)' '                                                        UDR2F304.54     
      WRITE(6,*)'HISTORY BLOCK:'                                           UDR2F304.55     
      IF(FIXHD1(135).GT.0 .AND. FIXHD2(135).GT.0) THEN                     UDR2F304.56     
      IF(LEN_DUMPHIST1.GT.0.OR.LEN_DUMPHIST2.GT.0)THEN                     COMPARE1.652    
        IF(LEN_DUMPHIST1.NE.LEN_DUMPHIST2)THEN                             COMPARE1.655    
          WRITE(6,*)'WARNING LEN1=',LEN_DUMPHIST1,' LEN2=',LEN_DUMPHIST2   COMPARE1.656    
        ENDIF                                                              COMPARE1.657    
        JMIN=MIN0(LEN_DUMPHIST1,LEN_DUMPHIST2)                             COMPARE1.658    
        K=0                                                                COMPARE1.659    
        DO I=1,JMIN                                                        COMPARE1.660    
*IF DEF,T3E                                                                GAV0F405.53     
          IF(XOR(DUMPHIST1(I),DUMPHIST2(I)).NE.0) THEN                     GAV0F405.54     
*ELSE                                                                      GAV0F405.55     
          IF(DUMPHIST1(I).NE.DUMPHIST2(I))THEN                             GAV0F405.56     
*ENDIF                                                                     GAV0F405.57     
            K=K+1                                                          COMPARE1.662    
            WRITE(6,*)'ITEM=',I,DUMPHIST1(I),DUMPHIST2(I)                  COMPARE1.663    
          ENDIF                                                            COMPARE1.664    
        ENDDO                                                              COMPARE1.665    
                                                                           UDG2F405.153    
        IF(K.EQ.0) WRITE(6,*) 'OK'                                         UDG2F405.154    
        WRITE(8,*) 'HISTORY BLOCK:              ',                         UDG2F405.155    
     &             'Number of differences = ',K                            UDG2F405.156    
        L=L+K                                                              COMPARE1.667    
      ENDIF                                                                COMPARE1.668    
      ELSE                                                                 UDR2F304.57     
        WRITE(6,*)'No comparison done'                                     UDR2F304.58     
        IF (FIXHD1(135).LE.0) WRITE(6,*)'No array in FILE 1'               UDR2F304.59     
        IF (FIXHD2(135).LE.0) WRITE(6,*)'No array in FILE 2'               UDR2F304.60     
      ENDIF                                                                UDR2F304.61     
                                                                           COMPARE1.669    
CL 12. Compare compressed index 1                                          COMPARE1.670    
                                                                           COMPARE1.671    
      WRITE(6,*)' '                                                        UDR2F304.62     
      WRITE(6,*)'COMPRESSED INDEX 1:'                                      UDR2F304.63     
      IF(FIXHD1(140).GT.0 .AND. FIXHD2(140).GT.0) THEN                     UDR2F304.64     
      IF(LEN_CFI11.GT.0.OR.LEN_CFI12.GT.0)THEN                             COMPARE1.672    
        IF(LEN_CFI11.NE.LEN_CFI12)THEN                                     COMPARE1.675    
          WRITE(6,*)'WARNING LEN1=',LEN_CFI11,' LEN2=',LEN_CFI12           COMPARE1.676    
        ENDIF                                                              COMPARE1.677    
        JMIN=MIN0(LEN_CFI11,LEN_CFI12)                                     COMPARE1.678    
        K=0                                                                COMPARE1.679    
        DO I=1,JMIN                                                        COMPARE1.680    
*IF DEF,T3E                                                                GAV0F405.58     
          IF(XOR(CFI11(I),CFI12(I)).NE.0) THEN                             GAV0F405.59     
*ELSE                                                                      GAV0F405.60     
          IF(CFI11(I).NE.CFI12(I))THEN                                     GAV0F405.61     
*ENDIF                                                                     GAV0F405.62     
            K=K+1                                                          COMPARE1.682    
            WRITE(6,*)'ITEM=',I,CFI11(I),CFI12(I)                          COMPARE1.683    
          ENDIF                                                            COMPARE1.684    
        ENDDO                                                              COMPARE1.685    
                                                                           UDG2F405.157    
        IF(K.EQ.0) WRITE(6,*) 'OK'                                         UDG2F405.158    
        WRITE(8,*) 'COMPRESSED INDEX 1:         ',                         UDG2F405.159    
     &             'Number of differences = ',K                            UDG2F405.160    
        L=L+K                                                              COMPARE1.687    
      ENDIF                                                                COMPARE1.688    
      ELSE                                                                 UDR2F304.65     
        WRITE(6,*)'No comparison done'                                     UDR2F304.66     
        IF (FIXHD1(140).LE.0) WRITE(6,*)'No array in FILE 1'               UDR2F304.67     
        IF (FIXHD2(140).LE.0) WRITE(6,*)'No array in FILE 2'               UDR2F304.68     
      ENDIF                                                                UDR2F304.69     
                                                                           COMPARE1.689    
CL 13. Compare compressed index 2                                          COMPARE1.690    
                                                                           COMPARE1.691    
      WRITE(6,*)' '                                                        UDR2F304.70     
      WRITE(6,*)'COMPRESSED INDEX 2:'                                      UDR2F304.71     
      IF(FIXHD1(142).GT.0 .AND. FIXHD2(142).GT.0) THEN                     UDR2F304.72     
      IF(LEN_CFI21.GT.0.OR.LEN_CFI22.GT.0)THEN                             COMPARE1.692    
        IF(LEN_CFI21.NE.LEN_CFI22)THEN                                     COMPARE1.695    
          WRITE(6,*)'WARNING LEN1=',LEN_CFI21,' LEN2=',LEN_CFI22           COMPARE1.696    
        ENDIF                                                              COMPARE1.697    
        JMIN=MIN0(LEN_CFI21,LEN_CFI22)                                     COMPARE1.698    
        K=0                                                                COMPARE1.699    
        DO I=1,JMIN                                                        COMPARE1.700    
*IF DEF,T3E                                                                GAV0F405.63     
          IF(XOR(CFI21(I),CFI22(I)).NE.0) THEN                             GAV0F405.64     
*ELSE                                                                      GAV0F405.65     
          IF(CFI21(I).NE.CFI22(I))THEN                                     GAV0F405.66     
*ENDIF                                                                     GAV0F405.67     
            K=K+1                                                          COMPARE1.702    
            WRITE(6,*)'ITEM=',I,CFI21(I),CFI22(I)                          COMPARE1.703    
          ENDIF                                                            COMPARE1.704    
        ENDDO                                                              COMPARE1.705    
                                                                           UDG2F405.161    
        IF(K.EQ.0) WRITE(6,*) 'OK'                                         UDG2F405.162    
        WRITE(8,*) 'COMPRESSED INDEX 2:         ',                         UDG2F405.163    
     &             'Number of differences = ',K                            UDG2F405.164    
        L=L+K                                                              COMPARE1.707    
      ENDIF                                                                COMPARE1.708    
      ELSE                                                                 UDR2F304.73     
        WRITE(6,*)'No comparison done'                                     UDR2F304.74     
        IF (FIXHD1(142).LE.0) WRITE(6,*)'No array in FILE 1'               UDR2F304.75     
        IF (FIXHD2(142).LE.0) WRITE(6,*)'No array in FILE 2'               UDR2F304.76     
      ENDIF                                                                UDR2F304.77     
                                                                           COMPARE1.709    
CL 14. Compare compressed index 3                                          COMPARE1.710    
                                                                           COMPARE1.711    
      WRITE(6,*)' '                                                        UDR2F304.78     
      WRITE(6,*)'COMPRESSED INDEX 3:'                                      UDR2F304.79     
      IF(FIXHD1(144).GT.0 .AND. FIXHD2(144).GT.0) THEN                     UDR2F304.80     
      IF(LEN_CFI31.GT.0.OR.LEN_CFI32.GT.0)THEN                             COMPARE1.712    
        IF(LEN_CFI31.NE.LEN_CFI32)THEN                                     COMPARE1.715    
          WRITE(6,*)'WARNING LEN1=',LEN_CFI31,' LEN2=',LEN_CFI32           COMPARE1.716    
        ENDIF                                                              COMPARE1.717    
        JMIN=MIN0(LEN_CFI31,LEN_CFI32)                                     COMPARE1.718    
        K=0                                                                COMPARE1.719    
        DO I=1,JMIN                                                        COMPARE1.720    
*IF DEF,T3E                                                                GAV0F405.68     
          IF(XOR(CFI31(I),CFI32(I)).NE.0) THEN                             GAV0F405.69     
*ELSE                                                                      GAV0F405.70     
          IF(CFI31(I).NE.CFI32(I))THEN                                     GAV0F405.71     
*ENDIF                                                                     GAV0F405.72     
            K=K+1                                                          COMPARE1.722    
            WRITE(6,*)'ITEM=',I,CFI31(I),CFI32(I)                          COMPARE1.723    
          ENDIF                                                            COMPARE1.724    
        ENDDO                                                              COMPARE1.725    
                                                                           UDG2F405.165    
        IF(K.EQ.0) WRITE(6,*) 'OK'                                         UDG2F405.166    
        WRITE(8,*) 'COMPRESSED INDEX 3:         ',                         UDG2F405.167    
     &             'Number of differences = ',K                            UDG2F405.168    
        L=L+K                                                              COMPARE1.727    
      ENDIF                                                                UDR2F304.81     
      ELSE                                                                 UDR2F304.82     
        WRITE(6,*)'No comparison done'                                     UDR2F304.83     
        IF (FIXHD1(144).LE.0) WRITE(6,*)'No array in FILE 1'               UDR2F304.84     
        IF (FIXHD2(144).LE.0) WRITE(6,*)'No array in FILE 2'               UDR2F304.85     
      ENDIF                                                                COMPARE1.728    
                                                                           COMPARE1.729    
CL 15. Compare lookup tables                                               COMPARE1.730    
                                                                           COMPARE1.731    
      IF(LEN1_LOOKUP1.NE.LEN1_LOOKUP2)THEN                                 COMPARE1.732    
        WRITE(6,*)'ERROR first dimensions of lookup tables different'      DR221193.26     
        WRITE(6,*)'LEN1=',LEN1_LOOKUP1,' LEN2=',LEN1_LOOKUP2               COMPARE1.734    
        CALL ABORT                                                         COMPARE1.735    
      ENDIF                                                                COMPARE1.736    
      IF(LEN2_LOOKUP1.GT.0.OR.LEN2_LOOKUP2.GT.0)THEN                       UDG2F405.169    
        WRITE(6,*)' '                                                      UDG2F405.170    
        WRITE(6,*)'LOOKUP:'                                                UDG2F405.171    
                                                                           UDG2F405.172    
! Check length of lookup tables                                            UDG2F405.173    
        IF(FIXHD1(5).EQ.3)THEN                                             UDG2F405.174    
          DO I=1,LEN2_LOOKUP1                                              UDG2F405.175    
            IF(LOOKUP1(1,I).NE.-99)NUMREC1=I                               UDG2F405.176    
          END DO                                                           UDG2F405.177    
          DO I=1,LEN2_LOOKUP2                                              UDG2F405.178    
            IF(LOOKUP2(1,I).NE.-99)NUMREC2=I                               UDG2F405.179    
          END DO                                                           UDG2F405.180    
        ELSE                                                               UDG2F405.181    
          NUMREC1=LEN2_LOOKUP1                                             UDG2F405.182    
          NUMREC2=LEN2_LOOKUP2                                             UDG2F405.183    
        END IF                                                             UDG2F405.184    
                                                                           UDG2F405.185    
        IF(LEN2_LOOKUP1.NE.LEN2_LOOKUP2)THEN                               UDG2F405.186    
           WRITE(6,'(''WARNING LEN1 = '',i9,'' and LEN2 = '',i9)')         PXCOMP.5      
     &       len2_lookup1, len2_lookup2                                    UDG2F405.188    
          IF(FIXHD1(5).EQ.3)THEN                                           UDG2F405.189    
            WRITE(6,'(''Fieldsfile file1 contains '',i5,'' fields '',      UDG2F405.190    
     &                ''and '',I5,'' empty records'')')                    UDG2F405.191    
     &               NUMREC1,LEN2_LOOKUP1-NUMREC1                          UDG2F405.192    
            WRITE(7,'(''Fieldsfile file1 contains '',i5,'' fields '',      UDG2F405.193    
     &                ''and '',I5,'' empty records'')')                    UDG2F405.194    
     &               NUMREC1,LEN2_LOOKUP1-NUMREC1                          UDG2F405.195    
            WRITE(6,'(''Fieldsfile file2 contains '',i5,'' fields '',      UDG2F405.196    
     &                ''and '',I5,'' empty records'')')                    UDG2F405.197    
     &               NUMREC2,LEN2_LOOKUP2-NUMREC2                          UDG2F405.198    
            WRITE(7,'(''Fieldsfile file2 contains '',i5,'' fields '',      UDG2F405.199    
     &                ''and '',I5,'' empty records'')')                    UDG2F405.200    
     &               NUMREC2,LEN2_LOOKUP2-NUMREC2                          UDG2F405.201    
            IF( NUMREC1.EQ.NUMREC2)THEN                                    UDG2F405.202    
              WRITE(6,*) 'Files contain same number of fields'             UDG2F405.203    
              WRITE(7,*) 'Files contain same number of fields'             UDG2F405.204    
              IF(LEN2_LOOKUP1.EQ.NUMREC1)THEN                              UDG2F405.205    
                WRITE(6,*) 'Empty records at the end of file1 ',           UDG2F405.206    
     &                     'have probably been removed by convieee'        UDG2F405.207    
                WRITE(7,*) 'Empty records at the end of file1 ',           UDG2F405.208    
     &                     'have probably been removed by convieee'        UDG2F405.209    
              ELSE IF(LEN2_LOOKUP2.EQ.NUMREC2)THEN                         UDG2F405.210    
                WRITE(6,*) 'Empty records at the end of file2 ',           UDG2F405.211    
     &                     'have probably been removed by convieee'        UDG2F405.212    
                WRITE(7,*) 'Empty records at the end of file2 ',           UDG2F405.213    
     &                     'have probably been removed by convieee'        UDG2F405.214    
              END IF                                                       UDG2F405.215    
            END IF                                                         UDG2F405.216    
          END IF                                                           UDG2F405.217    
        END IF                                                             UDG2F405.218    
                                                                           UDG2F405.219    
! Build cross reference index                                              UDG2F405.220    
        OFFSET1=0                                                          UDG2F405.221    
        OFFSET2=0                                                          UDG2F405.222    
        DO I=1,LEN2_LOOKUP1                                                UDG2F405.223    
          INDEX(I)    = 0                                                  UDG2F405.224    
          LMISSING1(I) = .TRUE.                                            UDG2F405.225    
        END DO                                                             UDG2F405.226    
        DO I=1,LEN2_LOOKUP2                                                UDG2F405.227    
          LMISSING2(I) = .TRUE.                                            UDG2F405.228    
        END DO                                                             UDG2F405.229    
        DO I=1,NUMREC1                                                     UDG2F405.230    
          N1=I+OFFSET1                                                     UDG2F405.231    
          N2=I+OFFSET2                                                     UDG2F405.232    
          IF(LOOKUP1(ITEM_CODE,N1).EQ.LOOKUP2(ITEM_CODE,N2))THEN           UDG2F405.233    
            INDEX(I)      =  N2                                            UDG2F405.234    
            LMISSING1(I)  = .FALSE.                                        UDG2F405.235    
            LMISSING2(N2) = .FALSE.                                        UDG2F405.236    
          ELSE                                                             UDG2F405.237    
            DO J=N2+1,NUMREC2                                              UDG2F405.238    
              IF(INDEX(I).EQ.0)THEN                                        UDG2F405.239    
                IF(LOOKUP1(ITEM_CODE,N1).EQ.                               UDG2F405.240    
     &             LOOKUP2(ITEM_CODE,J))THEN                               UDG2F405.241    
                  OFFSET2      =  OFFSET2+J-N2                             UDG2F405.242    
                  INDEX(I)     =  J                                        UDG2F405.243    
                  LMISSING1(I) = .FALSE.                                   UDG2F405.244    
                  LMISSING2(J) = .FALSE.                                   UDG2F405.245    
                END IF                                                     UDG2F405.246    
              END IF                                                       UDG2F405.247    
            END DO                                                         UDG2F405.248    
            IF(INDEX(I).EQ.0)THEN                                          UDG2F405.249    
              OFFSET2=OFFSET2-1                                            UDG2F405.250    
            END IF                                                         UDG2F405.251    
          END IF                                                           UDG2F405.252    
        END DO                                                             UDG2F405.253    
                                                                           UDG2F405.254    
        NMISSING1=0                                                        UDG2F405.255    
        DO I=1,LEN2_LOOKUP1                                                UDG2F405.256    
          IF(LMISSING1(I).AND.LOOKUP1(1,I).NE.-99)THEN                     UDG2F405.257    
            NMISSING1=NMISSING1+1                                          UDG2F405.258    
            WRITE(6,'(''WARNING: Field '',I5,'' of file1 '',               UDG2F405.259    
     &                            ''has no match in file2'')') I           UDG2F405.260    
          END IF                                                           UDG2F405.261    
        END DO                                                             UDG2F405.262    
        NMISSING2=0                                                        UDG2F405.263    
        DO I=1,LEN2_LOOKUP2                                                UDG2F405.264    
          IF(LMISSING2(I).AND.LOOKUP2(1,I).NE.-99)THEN                     UDG2F405.265    
            NMISSING2=NMISSING2+1                                          UDG2F405.266    
            WRITE(6,'(''WARNING: Field '',I5,'' of file2 '',               UDG2F405.267    
     &                            ''has no match in file1'')') I           UDG2F405.268    
          END IF                                                           UDG2F405.269    
        END DO                                                             UDG2F405.270    
                                                                           UDG2F405.271    
        K=0                                                                UDG2F405.272    
        DO I=1,NUMREC1                                                     UDG2F405.273    
          IF(.NOT.LMISSING1(I).AND.LOOKUP1(1,I).NE.-99)THEN                UDG2F405.274    
            DO J=1,LEN1_LOOKUP1                                            UDG2F405.275    
              IF(LOOKUP1(J,I).NE.LOOKUP2(J,INDEX(I)))THEN                  UDG2F405.276    
                K=K+1                                                      UDG2F405.277    
                ID1=LOOKUP1(J,I)                                           UDG2F405.278    
                ID2=LOOKUP2(J,INDEX(I))                                    UDG2F405.279    
                IF (J.GE.46 .AND. J.LE.64) THEN                            UDG2F405.280    
                  WRITE(6,'(''Header1: '',I5,'' Header2: '',I5,            UDG2F405.281    
     &                      '' Item: '',I3,'' Values: '',F12.5,F12.5)')    UDG2F405.282    
     &                   I,INDEX(I),J,RD1,RD2                              UDG2F405.283    
                ELSE                                                       UDG2F405.284    
                  WRITE(6,'(''Header1: '',I5,'' Header2: '',I5,            UDG2F405.285    
     &                    '' Item: '',I3,'' Values: '',I8,I8)')            UDG2F405.286    
     &                   I,INDEX(I),J,ID1,ID2                              UDG2F405.287    
                END IF                                                     UDG2F405.288    
              END IF                                                       UDG2F405.289    
            END DO                                                         UDG2F405.290    
          END IF                                                           UDG2F405.291    
        END DO                                                             UDG2F405.292    
                                                                           UDG2F405.293    
        IF(K.EQ.0) WRITE(6,*) 'OK'                                         UDG2F405.294    
        WRITE(7,'(''Number of fields in file 1 = '',I5)') NUMREC1          UDG2F405.295    
        WRITE(7,'(''Number of fields in file 2 = '',I5)') NUMREC2          UDG2F405.296    
        WRITE(7,'(''Number of fields compared  = '',I5)')                  UDG2F405.297    
     &        NUMREC1-NMISSING1                                            UDG2F405.298    
        IF(NMISSING1.NE.0)THEN                                             UDG2F405.299    
          WRITE(7,'(''Number of fields from file 1 omitted from '',        UDG2F405.300    
     &              ''comparison = '',I5)') NMISSING1                      UDG2F405.301    
        END IF                                                             UDG2F405.302    
        IF(NMISSING2.NE.0)THEN                                             UDG2F405.303    
          WRITE(7,'(''Number of fields from file 2 omitted from '',        UDG2F405.304    
     &              ''comparison = '',I5)') NMISSING2                      UDG2F405.305    
        END IF                                                             UDG2F405.306    
        WRITE(8,*) 'LOOKUP:                     ',                         UDG2F405.307    
     &             'Number of differences = ',K                            UDG2F405.308    
        L=L+K                                                              UDG2F405.309    
      END IF                                                               UDG2F405.310    
                                                                           COMPARE1.757    
CL 16. Compare data fields                                                 COMPARE1.758    
                                                                           COMPARE1.759    
                                                                           DR221193.34     
      WRITE(6,*)' '                                                        COMPARE1.760    
      WRITE(6,*)'DATA FIELDS:'                                             COMPARE1.761    
                                                                           DR221193.35     
      M=0                                                                  UDG2F405.311    
      N=0                                                                  UDG2F405.312    
      DO I=1,NUMREC1   ! Begin loop over number of fields in file1         UDG2F405.313    
                                                                           UDG2F405.314    
        S_ITEM_CODE=MOD(LOOKUP1(42,I),1000)                                UDG2F405.315    
        SECTION=(LOOKUP1(42,I)-S_ITEM_CODE)/1000                           UDG2F405.316    
        IF(FIXHD1(12).GE.305)THEN                                          UDG2F405.317    
          MODEL=LOOKUP1(45,I)                                              UDG2F405.318    
        ELSEIF(S_ITEM_CODE.LE.100.OR.                                      UDG2F405.319    
     &        (S_ITEM_CODE.GE.200.AND.S_ITEM_CODE.LE.205))THEN             UDG2F405.320    
          MODEL=1                                                          UDG2F405.321    
        ELSEIF((S_ITEM_CODE.GT.100.AND.S_ITEM_CODE.LE.176).OR.             UDG2F405.322    
     &         (S_ITEM_CODE.GE.180.AND.S_ITEM_CODE.LE.200))THEN            UDG2F405.323    
          MODEL=2                                                          UDG2F405.324    
        ELSEIF((S_ITEM_CODE.GE.177.AND.S_ITEM_CODE.LE.179).OR.             UDG2F405.325    
     &         (S_ITEM_CODE.GE.210.AND.S_ITEM_CODE.LE.212))THEN            UDG2F405.326    
          MODEL=3                                                          UDG2F405.327    
        END IF                                                             UDG2F405.328    
                                                                           UDG2F405.329    
        PHRASE=EXPPXC(MODEL,SECTION,S_ITEM_CODE,                           UDG2F405.330    
*CALL ARGPPX                                                               UDG2F405.331    
     &                ICODE,CMESSAGE)                                      UDG2F405.332    
        IF(ICODE.NE.0)THEN                                                 UDG2F405.333    
          WRITE(6,*) CMESSAGE                                              UDG2F405.334    
           PHRASE='NON-STANDARD FIELD'                                     UDG2F405.335    
        END IF                                                             UDG2F405.336    
                                                                           UDG2F405.337    
        IF(.NOT.LMISSING1(I))THEN                                          UDG2F405.338    
           M=INDEX(I)                                                      UDG2F405.339    
                                                                           DR221193.43     
        IF((LOOKUP1(42,I).EQ.28.OR.LOOKUP1(42,I).EQ.29).AND.               UDG1F400.7      
     &     (FIXHD1(12).NE.FIXHD2(12).AND.                                  UDG1F400.8      
     &     (FIXHD1(12).GE.400.OR.FIXHD2(12).GE.400)))THEN                  UDG1F400.9      
         LEN_FIELD=MIN0(LOOKUP1(15,I),LOOKUP2(15,M))                       UDG2F405.340    
        ELSE                                                               UDG1F400.11     
          LEN_FIELD=LOOKUP1(15,I)                                          UDG1F400.12     
        END IF                                                             UDG1F400.13     
        IF(FIXHD1(12).LT.0.AND.FIXHD1(5).NE.3)LOOKUP1(30,I)=0              UDG2F405.341    
        IF(FIXHD2(12).LT.0.AND.FIXHD2(5).NE.3)LOOKUP2(30,M)=0              UDG2F405.342    
        IF (LOOKUP1(1,I).NE.-99 .AND. LOOKUP2(1,M).NE.-99) THEN            UDG2F405.343    
                                                                           DR221193.45     
        PACK_CODE1 = MOD(LOOKUP1(21,I),10)                                 DR221193.46     
        PACK_CODE2 = MOD(LOOKUP2(21,I),10)                                 PXCOMP.6      
                                                                           DR221193.48     
       lblrec_1=lookup1(15, i)                                             UBC3F402.70     
       lblrec_2=lookup2(15, i)                                             UBC3F402.71     
                                                                           UBC3F402.72     
       if ((pack_code1.eq.1 .or. pack_code2.eq.1) .and.                    UBC3F402.73     
     &  wgdos_expand.ne.1) then                                            UBC3F402.74     
                                                                           DR221193.53     
        ELSEIF (PACK_CODE1.EQ.3 .OR. PACK_CODE2.EQ.3) THEN                 DR221193.54     
                                                                           DR221193.55     
          WRITE(6,*)                                                       DR221193.56     
     &    'Field No ',I,' not compared. GRIB data not supported.'          DR221193.57     
                                                                           DR221193.58     
        ELSE                                                               DR221193.59     
                                                                           COMPARE1.772    
      IF((LOOKUP1(39,I).EQ. 1 .AND. LOOKUP2(39,M).EQ. 1).OR.               UDG2F405.345    
     &   (LOOKUP1(39,I).EQ.-1 .AND. LOOKUP2(39,M).EQ.-1))THEN              UDG2F405.346    
! This is a REAL field                                                     GPB2F401.36     
        CALL READFLDS(NFTIN1,1,I,LOOKUP1,LEN1_LOOKUP1,                     GPB2F401.37     
     &               R_D1,MAX_FIELD_SIZE1,FIXHD1,                          GPB2F401.38     
*CALL ARGPPX                                                               GPB2F401.39     
     &               wgdos_expand,icode,cmessage)                          UBC3F402.75     
        IF(ICODE.NE.0)CALL ABORT_IO('COMPARE',CMESSAGE,ICODE,NFTIN1)       GPB2F401.41     
                                                                           GPB2F401.42     
        CALL READFLDS(NFTIN2,1,M,LOOKUP2,LEN1_LOOKUP2,                     UDG2F405.347    
     &                R_D2,MAX_FIELD_SIZE2,FIXHD2,                         GPB2F401.44     
*CALL ARGPPX                                                               GPB2F401.45     
     &               wgdos_expand,icode,cmessage)                          UBC3F402.76     
        IF(ICODE.NE.0)CALL ABORT_IO('COMPARE',CMESSAGE,ICODE,NFTIN1)       GPB2F401.47     
                                                                           GPB2F401.48     
      ELSE IF((LOOKUP1(39,I).EQ. 2 .AND. LOOKUP2(39,M).EQ. 2).OR.          UDG2F405.348    
     &        (LOOKUP1(39,I).EQ.-2 .AND. LOOKUP2(39,M).EQ.-2))THEN         UDG2F405.349    
! This is an INTEGER field                                                 GPB2F401.53     
        CALL READFLDS(NFTIN1,1,I,LOOKUP1,LEN1_LOOKUP1,                     GPB2F401.54     
     &                I_D1,MAX_FIELD_SIZE1,FIXHD1,                         GPB2F401.55     
*CALL ARGPPX                                                               GPB2F401.56     
     &               wgdos_expand,icode,cmessage)                          UBC3F402.77     
        IF(ICODE.NE.0)CALL ABORT_IO('COMPARE',CMESSAGE,ICODE,NFTIN1)       GPB2F401.58     
                                                                           GPB2F401.59     
       CALL READFLDS(NFTIN2,1,M,LOOKUP2,LEN1_LOOKUP2,                      UDG2F405.350    
     &                I_D2,MAX_FIELD_SIZE2,FIXHD2,                         GPB2F401.61     
*CALL ARGPPX                                                               GPB2F401.62     
     &               wgdos_expand,icode,cmessage)                          UBC3F402.78     
        IF(ICODE.NE.0)CALL ABORT_IO('COMPARE',CMESSAGE,ICODE,NFTIN1)       GPB2F401.64     
                                                                           GPB2F401.65     
      ELSE IF((LOOKUP1(39,I).EQ. 3 .AND. LOOKUP2(39,M).EQ. 3).OR.          UDG2F405.351    
     &        (LOOKUP1(39,I).EQ.-3 .AND. LOOKUP2(39,M).EQ.-3))THEN         UDG2F405.352    
! This is an LOGICAL field                                                 GPB2F401.70     
        CALL READFLDS(NFTIN1,1,I,LOOKUP1,LEN1_LOOKUP1,                     GPB2F401.71     
     &                L_D1,MAX_FIELD_SIZE1,FIXHD1,                         GPB2F401.72     
*CALL ARGPPX                                                               GPB2F401.73     
     &               wgdos_expand,icode,cmessage)                          UBC3F402.79     
        IF(ICODE.NE.0)CALL ABORT_IO('COMPARE',CMESSAGE,ICODE,NFTIN1)       GPB2F401.75     
                                                                           GPB2F401.76     
       CALL READFLDS(NFTIN2,1,M,LOOKUP2,LEN1_LOOKUP2,                      UDG2F405.353    
     &                L_D2,MAX_FIELD_SIZE2,FIXHD2,                         GPB2F401.78     
*CALL ARGPPX                                                               GPB2F401.79     
     &               wgdos_expand,icode,cmessage)                          UBC3F402.80     
        IF(ICODE.NE.0)CALL ABORT_IO('COMPARE',CMESSAGE,ICODE,NFTIN1)       GPB2F401.81     
                                                                           GPB2F401.82     
      ELSE                                                                 GPB2F401.83     
! This is an unrecognized field                                            GPB2F401.84     
          WRITE(6,*)                                                       UDG2F402.27     
     &     'Field No ',I,' not compared. Unrecognized type.'               UDG2F402.28     
                                                                           GPB2F401.87     
      ENDIF                                                                GPB2F401.88     
       if ((pack_code1.eq.1 .or. pack_code2.eq.1) .and.                    UDG1F403.14     
     &  wgdos_expand.eq.1) then                                            UDG1F403.15     
         LEN_FIELD=LOOKUP1(15,I)                                           UDG1F403.16     
       endif                                                               UDG1F403.17     
       lookup1(15, i)=lblrec_1                                             UBC3F402.81     
       lookup2(15, M)=lblrec_2                                             UDG2F405.354    
                                                                           UDG2F405.355    
                                                                           COMPARE1.796    
        WRITE(6,*)' '                                                      COMPARE1.797    
        WRITE(6,*)LOOKUP1(42,I),': ',PHRASE,':'                            COMPARE1.798    
        write(10,'(/''Field '',i5,'' : Stash Code '',i5,                   UDG2F402.29     
     &   '' : '',a)') i, lookup1(42,i), phrase                             UDG2F402.30     
                                                                           GPB2F401.91     
        RMS_F1=0.0                                                         GPB2F401.92     
        RMS_F2=0.0                                                         GPB2F401.93     
        RMS_DIFF=0.0                                                       GPB2F401.94     
        K=0                                                                COMPARE1.799    
*IF DEF,T3E                                                                GBC7F404.143    
        jrc_nan=0                                                          UDG2F402.31     
*ENDIF                                                                     GBC7F404.144    
C       Real                                                               DR221193.60     
        IF (LOOKUP1(39,I).EQ.1 .AND. LOOKUP2(39,M).EQ.1) THEN              UDG2F405.356    
          MAX_DIFF=0.                                                      DR221193.62     
          DO J=1,LEN_FIELD                                                 UDG1F400.14     
            DIFF(J)='.'                                                    GPB2F401.95     
*IF DEF,T3E                                                                GAV0F405.73     
            IF(XOR(R_D1(J),R_D2(J)).NE.0) THEN                             GAV0F405.74     
*ELSE                                                                      GAV0F405.75     
            IF(R_D1(J).NE.R_D2(J))THEN                                     GAV0F405.76     
*ENDIF                                                                     GAV0F405.77     
              k=k+1                                                        UDG2F402.33     
              if(k.le.10) then                                             UDG2F402.34     
                write(6,'(a,i6,2(e25.15,'' ('',z16,'')''))')               UDG2F402.35     
     &            'ITEM=',j,r_d1(j),r_d1(j),r_d2(j),r_d2(j)                UDG2F402.36     
              endif                                                        UDG2F402.37     
*IF DEF,T3E                                                                GBC7F404.145    
              if((xor(and(r_d1(j),jrc_mask),jrc_mask).ne.0) .and.          UDG2F402.38     
     &         (xor(and(r_d2(j),jrc_mask),jrc_mask).ne.0)   .and.          UDG2F402.39     
     &         (and(r_d1(j),deb_mask).ne.0.or.                             UDG2F402.40     
     &          xor(r_d1(j),0).eq.0).and.                                  UDG2F402.41     
     &         (and(r_d2(j),deb_mask).ne.0.or.                             UDG2F402.42     
     &          xor(r_d2(j),0).eq.0))then                                  UDG2F402.43     
*ENDIF                                                                     GBC7F404.146    
                RD1=R_D1(J)                                                UDG2F402.44     
                RD2=R_D2(J)                                                UDG2F402.45     
                MAX_DIFF=MAX(MAX_DIFF,ABS(RD1-RD2))                        UDG2F402.46     
                IF(MAX_DIFF.EQ.ABS(RD1-RD2)) MAX_J = J                     UDG1F403.25     
                if(rd1.eq.0.) then                                         UDG2F402.47     
                  if(rd2.eq.0.) then                                       UDG2F402.48     
                    diff_per=0.                                            UDG2F402.49     
                  else                                                     UDG2F402.50     
                    diff_per=(abs(rd1-rd2)/abs(rd2))*100                   UDG2F402.51     
                  endif                                                    UDG2F402.52     
                else                                                       UDG2F402.53     
                  diff_per=(abs(rd1-rd2)/abs(rd1))*100                     UDG2F402.54     
                endif                                                      UDG2F402.55     
              IF (DIFF_PER .GT. 10.0) DIFF(J)="#"                          GPB2F401.111    
              IF (DIFF_PER .LT. 10.0) DIFF(J)="X"                          GPB2F401.112    
              IF (DIFF_PER .LT. 1.0) DIFF(J)="O"                           GPB2F401.113    
              IF (DIFF_PER .LT. 0.1) DIFF(J)="o"                           GPB2F401.114    
              IF (DIFF_PER .LT. 0.01) DIFF(J)=":"                          GPB2F401.115    
                RMS_F1=RMS_F1+(R_D1(J)*R_D1(J))                            UDG2F402.56     
                RMS_F2=RMS_F2+(R_D2(J)*R_D2(J))                            UDG2F402.57     
                RMS_DIFF=RMS_DIFF+(R_D1(J)-R_D2(J))*(R_D1(J)-R_D2(J))      UDG2F402.58     
*IF DEF,T3E                                                                GBC7F404.147    
              else                                                         UDG2F402.59     
                jrc_nan=jrc_nan+1                                          UDG2F402.60     
              endif                                                        UDG2F402.61     
*ENDIF                                                                     GBC7F404.148    
            else                                                           UDG2F402.62     
*IF DEF,T3E                                                                GBC7F404.149    
              if((xor(and(r_d1(j),jrc_mask),jrc_mask).ne.0) .and.          UDG2F402.63     
     &         (xor(and(r_d2(j),jrc_mask),jrc_mask).ne.0)   .and.          UDG2F402.64     
     &         (and(r_d1(j),deb_mask).ne.0.or.                             UDG2F402.65     
     &       xor(r_d1(j),0).eq.0).and.                                     UDG2F402.66     
     &         (and(r_d2(j),deb_mask).ne.0.or.                             UDG2F402.67     
     &       xor(r_d2(j),0).eq.0))then                                     UDG2F402.68     
*ENDIF                                                                     GBC7F404.150    
                RMS_F1=RMS_F1+(R_D1(J)*R_D1(J))                            UDG2F402.69     
                RMS_F2=RMS_F2+(R_D2(J)*R_D2(J))                            UDG2F402.70     
                RMS_DIFF=RMS_DIFF+(R_D1(J)-R_D2(J))*(R_D1(J)-R_D2(J))      UDG2F402.71     
*IF DEF,T3E                                                                GBC7F404.151    
              else                                                         UDG2F402.72     
                jrc_nan=jrc_nan+1                                          UDG2F402.73     
              endif                                                        UDG2F402.74     
*ENDIF                                                                     GBC7F404.152    
            endif                                                          UDG2F402.75     
          ENDDO                                                            DR221193.69     
          IF (K.NE.0) THEN                                                 DR221193.70     
            WRITE(6,*)'NUMBER OF DIFFERENT VALUES = ',K                    DR221193.71     
            WRITE(6,*)'MAXIMUM DIFFERENCE= ',MAX_DIFF,' AT PT. ',MAX_J     UDG1F403.22     
            RMS_F1=SQRT(RMS_F1/LEN_FIELD)                                  UDG1F403.18     
            RMS_F2=SQRT(RMS_F2/LEN_FIELD)                                  UDG1F403.19     
            RMS_DIFF=SQRT(RMS_DIFF/LEN_FIELD)                              UDG1F403.20     
            WRITE(6,*) 'RMS FIELD1 : ',RMS_F1                              GPB2F401.120    
            WRITE(6,*) 'RMS FIELD2 : ',RMS_F2                              GPB2F401.121    
            DIFF_PER=ABS(RMS_F1-RMS_F2)                                    GPB2F401.122    
            WRITE(6,*) 'Difference: ',DIFF_PER                             GPB2F401.123    
     &                ,' RMS_difference: ',RMS_DIFF                        UDG9F404.100    
            rd1=diff_per                                                   UDG2F402.76     
            if(rms_f1.ne.0.) then                                          UDG2F402.77     
              diff_per=(diff_per/rms_f1)*100                               UDG2F402.78     
              write(6,'(''Field '',i5,'' has a Difference between'',       UDG2F402.79     
     &         '' the RMS Values of '',e10.5,'' which is '',f10.3,         UDG2F402.80     
     &         '' Percent of Field 1, whose RMS Value is '',e10.5)')       UDG2F402.81     
     &         i, rd1, diff_per, rms_f1                                    UDG2F402.82     
              write(6,*) 'Difference as % of RMS FIELD1= ',DIFF_PER        UDG2F402.83     
            else if(rms_f2.ne.0.) then                                     UDG2F402.84     
              diff_per=(diff_per/rms_f2)*100                               UDG2F402.85     
              write(6,'(''Field '',i5,'' has a Difference between'',       UDG2F402.86     
     &         '' the RMS Values of '',e10.5,'' which is '',f10.3,         UDG2F402.87     
     &         '' Percent of Field 2, whose RMS Value is '',e10.5)')       UDG2F402.88     
     &         i, rd1, diff_per, rms_f2                                    UDG2F402.89     
              write(6,*) 'Difference as % of RMS FIELD2= ',DIFF_PER        UDG2F402.90     
*IF DEF,T3E                                                                GBC7F404.153    
            else                                                           UDG2F402.91     
              if(jrc_nan.eq.0) write(6,'(''Field '',i5,                    UDG2F402.92     
     &         '' - the Fields in Both Files have RMS Values of Zero''     UDG2F402.93     
     &         )') i                                                       UDG2F402.94     
*ENDIF                                                                     GBC7F404.154    
            endif                                                          UDG2F402.95     
c                                                                          UDG2F402.96     
*IF DEF,T3E                                                                GBC7F404.155    
            if (diff_per .gt. 5 .or. jrc_nan.ne.0) THEN                    UDG2F402.97     
*ELSE                                                                      GBC7F404.156    
            if (diff_per .gt. 5) THEN                                      GBC7F404.157    
*ENDIF                                                                     GBC7F404.158    
              WRITE(6,*)                                                   GPB2F401.129    
              WRITE(6,*)                                                   GPB2F401.130    
*IF DEF,T3E                                                                GBC7F404.159    
              if(jrc_nan.ne.0) then                                        UDG2F402.98     
                write(6,*) '********** NaN Values Detected **********',    UDG2F402.99     
     &           '**'                                                      UDG2F402.100    
              endif                                                        UDG2F402.101    
*ENDIF                                                                     GBC7F404.160    
              WRITE(6,*) '************** WARNING ********************'     GPB2F401.131    
              WRITE(6,*) '***** LARGE DIFFERENCE ENCOUNTERED ********'     GPB2F401.132    
              WRITE(6,*) '*******************************************'     GPB2F401.133    
              WRITE(6,*)                                                   GPB2F401.134    
            ENDIF                                                          GPB2F401.135    
                                                                           GPB2F401.136    
            KEY='# d>10%  ;  X 10%>d>1%  ;  O 1%>d>0.1%  ; '//             GPB2F401.137    
     &          'o 0.1%>d>0.01%  ;  : d<0.01%  ;  . d=0%'                  GPB2F401.138    
                                                                           GPB2F401.139    
            IF ( MOD(LOOKUP1(16,I),100) .LT. 21) THEN                      UDG1F403.34     
! Only certain grid types are suitable for difference maps                 GPB2F401.141    
              CALL PRINT_DIF_MAP(DIFF,LOOKUP1(18,I),LOOKUP1(19,I),KEY)     GPB2F401.142    
            ELSE                                                           UDG1F403.35     
              write(6,*) 'Difference map not printed'                      UDG1F403.36     
              write(6,*) 'Grid Type not suitable for difference maps'      UDG1F403.37     
              write(6,*) 'Grid Type = ',LOOKUP1(16,I)                      UDG1F403.38     
            ENDIF                                                          GPB2F401.143    
                                                                           GPB2F401.144    
          ELSE                                                             DR221193.73     
            WRITE(6,*)'OK'                                                 DR221193.74     
            WRITE(10,*)'OK'                                                GPB2F401.145    
          ENDIF                                                            COMPARE1.806    
C       Integer                                                            DR221193.75     
        ELSE IF (LOOKUP1(39,I).EQ.2 .AND. LOOKUP2(39,M).EQ.2) THEN         UDG2F405.357    
          IMAX_DIFF=0                                                      DR221193.77     
          DO J=1,LEN_FIELD                                                 UDG1F400.15     
            DIFF(J)='.'                                                    GPB2F401.146    
*IF DEF,T3E                                                                GAV0F405.78     
            IF (XOR(I_D1(J),I_D2(J)).NE.0) THEN                            GAV0F405.79     
*ELSE                                                                      GAV0F405.80     
            IF(I_D1(J).NE.I_D2(J))THEN                                     GAV0F405.81     
*ENDIF                                                                     GAV0F405.82     
              K=K+1                                                        GPB2F401.148    
              if (k.le.n_diff) write(6,*)'item=',j,i_d1(j),i_d2(j)         UDG2F402.103    
*IF DEF,T3E                                                                GBC7F404.161    
              if((xor(and(r_d1(j),jrc_mask),jrc_mask).ne.0) .and.          UDG2F402.104    
     &         (xor(and(r_d2(j),jrc_mask),jrc_mask).ne.0)) then            UDG2F402.105    
*ENDIF                                                                     GBC7F404.162    
                ID1=I_D1(J)                                                UDG2F402.106    
                ID2=I_D2(J)                                                UDG2F402.107    
                IMAX_DIFF=MAX(IMAX_DIFF,ABS(ID1-ID2))                      UDG2F402.108    
                                                                           UDG2F402.109    
                IF (ID1 .EQ. 0) THEN                                       UDG2F402.110    
                  IF (ID1 .EQ. ID2) THEN                                   UDG2F402.111    
                    DIFF_PER=0.0                                           UDG2F402.112    
                  ELSE                                                     UDG2F402.113    
                    DIFF_PER=100.0                                         UDG2F402.114    
                  ENDIF                                                    UDG2F402.115    
                ELSE                                                       UDG1F403.11     
                  DIFF_PER=(REAL(ABS(ID1-ID2))/REAL(ABS(ID1)))*100.0       UDG2F402.116    
                ENDIF                                                      UDG2F402.117    
              IF (DIFF_PER .GT. 10.0) DIFF(J)="#"                          GPB2F401.159    
              IF (DIFF_PER .LT. 10.0) DIFF(J)="X"                          GPB2F401.160    
              IF (DIFF_PER .LT. 1.0) DIFF(J)="O"                           GPB2F401.161    
              IF (DIFF_PER .LT. 0.1) DIFF(J)="o"                           GPB2F401.162    
              IF (DIFF_PER .LT. 0.01) DIFF(J)=":"                          GPB2F401.163    
*IF DEF,T3E                                                                GBC7F404.163    
              else                                                         UDG2F402.118    
                jrc_nan=jrc_nan+1                                          UDG2F402.119    
              endif                                                        UDG2F402.120    
*ENDIF                                                                     GBC7F404.164    
            ENDIF                                                          DR221193.85     
          ENDDO                                                            DR221193.86     
          IF (K.NE.0) THEN                                                 DR221193.87     
            write(6,'(''Field '',i5,'' has '',i5,                          UDG2F402.121    
     &       '' INTEGER Differences'',                                     UDG2F402.122    
     &       '' with a Maximum Difference of '',i20)') i, k, imax_diff     UDG2F402.123    
            WRITE(6,*)'NUMBER OF DIFFERENT VALUES = ',K                    DR221193.88     
*IF DEF,T3E                                                                GBC7F404.165    
     &      ,' (',jrc_nan,') NaN Values Detected)'                         UDG2F402.124    
*ENDIF                                                                     GBC7F404.166    
            WRITE(6,*)'MAXIMUM DIFFERENCE= ',IMAX_DIFF                     DR221193.89     
            KEY='# d>10%  ;  X 10%>d>1%  ;  O 1%>d>0.1%  ; '//             GPB2F401.164    
     &          'o 0.1%>d>0.01%  ;  : d<0.01%  ;  . d=0%'                  GPB2F401.165    
                                                                           GPB2F401.166    
            IF ( LOOKUP1(16,I) .LT. 21) THEN                               GPB2F401.167    
! Only certain grid types are suitable for difference maps                 GPB2F401.168    
              CALL PRINT_DIF_MAP(DIFF,LOOKUP1(18,I),LOOKUP1(19,I),KEY)     GPB2F401.169    
            ENDIF                                                          GPB2F401.170    
                                                                           GPB2F401.171    
          ELSE                                                             DR221193.90     
           write(6,'(''Field '',i5,                                        UDG2F402.125    
     &       '' has '',i5,'' INTEGER Differences'')') i, k                 UDG2F402.126    
            write (6,*) 'OK'                                               UDG2F402.127    
            WRITE(6,*)'OK'                                                 DR221193.91     
            WRITE(10,*)'OK'                                                GPB2F401.172    
          ENDIF                                                            DR221193.92     
C       Logical                                                            DR221193.93     
        ELSE IF (LOOKUP1(39,I).EQ.3 .AND. LOOKUP2(39,M).EQ.3) THEN         UDG2F405.358    
          DO J=1,LEN_FIELD                                                 UDG1F400.16     
            DIFF(J)='.'                                                    GPB2F401.173    
            IF (L_D1(J).NEQV.L_D2(J)) THEN                                 GPB2F401.174    
              K=K+1                                                        GPB2F401.175    
              LD1=L_D1(J)                                                  GPB2F401.176    
              LD2=L_D2(J)                                                  GPB2F401.177    
              IF (K.LE.N_DIFF) WRITE(6,*)'ITEM=',J,LD1,LD2                 GPB2F401.178    
              DIFF(J)="#"                                                  GPB2F401.179    
            ENDIF                                                          DR221193.101    
          ENDDO                                                            DR221193.102    
          IF (K.NE.0) THEN                                                 DR221193.103    
            write(6,'(''Field '',i5,'' has '',i5,                          UDG2F402.128    
     &       '' LOGICAL Differences'')') i, k                              UDG2F402.129    
            WRITE(6,*)'NUMBER OF DIFFERENT VALUES = ',K                    DR221193.104    
            KEY='# Different values  ;  . identical'                       GPB2F401.180    
                                                                           GPB2F401.181    
            IF ( LOOKUP1(16,I) .LT. 21) THEN                               GPB2F401.182    
! Only certain grid types are suitable for difference maps                 GPB2F401.183    
              CALL PRINT_DIF_MAP(DIFF,LOOKUP1(18,I),LOOKUP1(19,I),KEY)     GPB2F401.184    
            ENDIF                                                          GPB2F401.185    
          ELSE                                                             DR221193.105    
           write(6,'(''Field '',i5,'' has '',i5,                           UDG2F402.130    
     &       '' LOGICAL Differences'')') i, k                              UDG2F402.131    
            write (6,*) 'OK'                                               UDG2F402.132    
            WRITE(6,*)'OK'                                                 DR221193.106    
            WRITE(10,*)'OK'                                                GPB2F401.186    
          ENDIF                                                            DR221193.107    
C       Real Timeseries                                                    UDG9F304.4      
        ELSE IF (LOOKUP1(39,I).EQ.-1 .AND. LOOKUP2(39,M).EQ.-1) THEN       UDG2F405.359    
          MAX_DIFF=0.                                                      UDG9F304.6      
          DO J=1,LEN_FIELD                                                 UDG1F400.17     
*IF DEF,T3E                                                                GAV0F405.83     
            IF(XOR(R_D1(J),R_D2(J)).NE.0) THEN                             GAV0F405.84     
*ELSE                                                                      GAV0F405.85     
            IF(R_D1(J).NE.R_D2(J))THEN                                     GAV0F405.86     
*ENDIF                                                                     GAV0F405.87     
              MAX_DIFF=AMAX1(MAX_DIFF,ABS(R_D1(J)-R_D2(J)))                GPB2F401.188    
              K=K+1                                                        UDG9F304.10     
              IF(K.LE.10)WRITE(6,*)'ITEM=',J,R_D1(J),R_D2(J)               GPB2F401.189    
            ENDIF                                                          UDG9F304.12     
          ENDDO                                                            UDG9F304.13     
          IF (K.NE.0) THEN                                                 UDG9F304.14     
            WRITE(6,*)'NUMBER OF DIFFERENT VALUES = ',K                    UDG9F304.15     
            WRITE(6,*)'MAXIMUM DIFFERENCE= ',MAX_DIFF                      UDG9F304.16     
          ELSE                                                             UDG9F304.17     
            WRITE(6,*)'OK'                                                 UDG9F304.18     
          ENDIF                                                            UDG9F304.19     
C       Integer Timeseries                                                 UDG9F304.20     
        ELSE IF (LOOKUP1(39,I).EQ.-2 .AND. LOOKUP2(39,M).EQ.-2) THEN       UDG2F405.360    
          IMAX_DIFF=0                                                      UDG9F304.22     
          DO J=1,LEN_FIELD                                                 UDG1F400.18     
            IF (I_D1(J).NE.I_D2(J)) THEN                                   GPB2F401.190    
              K=K+1                                                        UDG9F304.25     
              ID1=I_D1(J)                                                  GPB2F401.191    
              ID2=I_D2(J)                                                  GPB2F401.192    
              IMAX_DIFF=MAX(IMAX_DIFF,IABS(ID1-ID2))                       UDG9F304.28     
              IF (K.LE.N_DIFF) WRITE(6,*)'ITEM=',J,ID1,ID2                 UDG9F304.29     
            ENDIF                                                          UDG9F304.30     
          ENDDO                                                            UDG9F304.31     
          IF (K.NE.0) THEN                                                 UDG9F304.32     
            WRITE(6,*)'NUMBER OF DIFFERENT VALUES = ',K                    UDG9F304.33     
            WRITE(6,*)'MAXIMUM DIFFERENCE= ',IMAX_DIFF                     UDG9F304.34     
          ELSE                                                             UDG9F304.35     
            WRITE(6,*)'OK'                                                 UDG9F304.36     
          ENDIF                                                            UDG9F304.37     
C       Logical Timeseries                                                 UDG9F304.38     
        ELSE IF (LOOKUP1(39,I).EQ.-3 .AND. LOOKUP2(39,M).EQ.-3) THEN       UDG2F405.361    
          DO J=1,LEN_FIELD                                                 UDG1F400.19     
            IF (L_D1(J).NEQV.L_D2(J)) THEN                                 GPB2F401.193    
              K=K+1                                                        UDG9F304.42     
              LD1=L_D1(J)                                                  GPB2F401.194    
              LD2=L_D2(J)                                                  GPB2F401.195    
              IF (K.LE.N_DIFF) WRITE(6,*)'ITEM=',J,LD1,LD2                 UDG9F304.45     
            ENDIF                                                          UDG9F304.46     
          ENDDO                                                            UDG9F304.47     
          IF (K.NE.0) THEN                                                 UDG9F304.48     
            WRITE(6,*)'NUMBER OF DIFFERENT VALUES = ',K                    UDG9F304.49     
          ELSE                                                             UDG9F304.50     
            WRITE(6,*)'OK'                                                 UDG9F304.51     
          ENDIF                                                            UDG9F304.52     
        ELSE                                                               COMPARE1.811    
          WRITE(6,*)                                                       DR221193.108    
     &    'Field No ',I,' not compared. Different Data Type Numbers ?'     DR221193.109    
        ENDIF                                                              COMPARE1.813    
        WRITE(6,*)' '                                                      DR221193.110    
        IF(K.NE.0)THEN                                                     UDG2F405.362    
          NDIFFER(I)=K                                                     UDG2F405.363    
          N=N+1                                                            UDG2F405.364    
        END IF                                                             UDG2F405.365    
        L=L+K                                                              COMPARE1.814    
        END IF                                                             UDG2F405.366    
                                                                           COMPARE1.815    
      ENDIF                                                                DR221193.111    
      ENDIF                                                                DR221193.112    
      ENDDO     !End loop over number of fields                            COMPARE1.816    
                                                                           DR221193.113    
! Output remainder of summary information                                  UDG2F405.367    
      WRITE(8,*) 'DATA FIELDS:                ',                           UDG2F405.368    
     &             'Number of fields with differences = ',N                UDG2F405.369    
      DO I = 1,NUMREC1   ! Begin loop over number of fields in file1       UDG2F405.370    
        IF(LOOKUP1(1,I).NE.-99)THEN                                        UDG2F405.371    
          S_ITEM_CODE=MOD(LOOKUP1(42,I),1000)                              UDG2F405.372    
          SECTION=(LOOKUP1(42,I)-S_ITEM_CODE)/1000                         UDG2F405.373    
          IF(FIXHD2(12).GE.305)THEN                                        UDG2F405.374    
            MODEL=LOOKUP1(45,I)                                            UDG2F405.375    
          ELSEIF(S_ITEM_CODE.LE.100.OR.                                    UDG2F405.376    
     &          (S_ITEM_CODE.GE.200.AND.S_ITEM_CODE.LE.205))THEN           UDG2F405.377    
            MODEL=1                                                        UDG2F405.378    
          ELSEIF((S_ITEM_CODE.GT.100.AND.S_ITEM_CODE.LE.176).OR.           UDG2F405.379    
     &           (S_ITEM_CODE.GE.180.AND.S_ITEM_CODE.LE.200))THEN          UDG2F405.380    
            MODEL=2                                                        UDG2F405.381    
          ELSEIF((S_ITEM_CODE.GE.177.AND.S_ITEM_CODE.LE.179).OR.           UDG2F405.382    
     &           (S_ITEM_CODE.GE.210.AND.S_ITEM_CODE.LE.212))THEN          UDG2F405.383    
            MODEL=3                                                        UDG2F405.384    
          END IF                                                           UDG2F405.385    
                                                                           UDG2F405.386    
          PHRASE=EXPPXC(MODEL,SECTION,S_ITEM_CODE,                         UDG2F405.387    
*CALL ARGPPX                                                               UDG2F405.388    
     &                  ICODE,CMESSAGE)                                    UDG2F405.389    
          IF(ICODE.NE.0)THEN                                               UDG2F405.390    
            WRITE(6,*) CMESSAGE                                            UDG2F405.391    
             PHRASE='NON-STANDARD FIELD'                                   UDG2F405.392    
          END IF                                                           UDG2F405.393    
          IF(LMISSING1(I))THEN                                             UDG2F405.394    
            WRITE(8,'(/''Field '',i5,'' : Stash Code '',i5,'' : '',a,      UDG2F405.395    
     &                 '' : No equivalent in file2'')')                    UDG2F405.396    
     &        I,LOOKUP1(42,I),PHRASE                                       UDG2F405.397    
          ELSE IF(NDIFFER(I).NE.0)THEN                                     UDG2F405.398    
            WRITE(8,'(/''Field '',I5,'' : Stash Code '',I5,                UDG2F405.399    
     &                 '' : '',A,'' : Number of differences = '',I8)')     UDG2F405.400    
     &        I, LOOKUP1(42,I), PHRASE, NDIFFER(I)                         UDG2F405.401    
          END IF                                                           UDG2F405.402    
        END IF                                                             UDG2F405.403    
      END DO                                                               UDG2F405.404    
      DO I = 1,NUMREC2   ! Begin loop over number of fields in file2       UDG2F405.405    
        IF(LMISSING2(I).AND.LOOKUP2(1,I).NE.-99)THEN                       UDG2F405.406    
          S_ITEM_CODE=MOD(LOOKUP2(42,I),1000)                              UDG2F405.407    
          SECTION=(LOOKUP2(42,I)-S_ITEM_CODE)/1000                         UDG2F405.408    
          IF(FIXHD2(12).GE.305)THEN                                        UDG2F405.409    
            MODEL=LOOKUP2(45,I)                                            UDG2F405.410    
          ELSEIF(S_ITEM_CODE.LE.100.OR.                                    UDG2F405.411    
     &          (S_ITEM_CODE.GE.200.AND.S_ITEM_CODE.LE.205))THEN           UDG2F405.412    
            MODEL=1                                                        UDG2F405.413    
          ELSEIF((S_ITEM_CODE.GT.100.AND.S_ITEM_CODE.LE.176).OR.           UDG2F405.414    
     &           (S_ITEM_CODE.GE.180.AND.S_ITEM_CODE.LE.200))THEN          UDG2F405.415    
            MODEL=2                                                        UDG2F405.416    
          ELSEIF((S_ITEM_CODE.GE.177.AND.S_ITEM_CODE.LE.179).OR.           UDG2F405.417    
     &           (S_ITEM_CODE.GE.210.AND.S_ITEM_CODE.LE.212))THEN          UDG2F405.418    
            MODEL=3                                                        UDG2F405.419    
          END IF                                                           UDG2F405.420    
                                                                           UDG2F405.421    
          PHRASE=EXPPXC(MODEL,SECTION,S_ITEM_CODE,                         UDG2F405.422    
*CALL ARGPPX                                                               UDG2F405.423    
     &                  ICODE,CMESSAGE)                                    UDG2F405.424    
          IF(ICODE.NE.0)THEN                                               UDG2F405.425    
            WRITE(6,*) CMESSAGE                                            UDG2F405.426    
             PHRASE='NON-STANDARD FIELD'                                   UDG2F405.427    
          END IF                                                           UDG2F405.428    
          WRITE(8,'(/''Field '',i5,'' : Stash Code '',i5,'' : '',a,        UDG2F405.429    
     &               '' : No equivalent in file1'')')                      UDG2F405.430    
     &      I,LOOKUP2(42,I),PHRASE                                         UDG2F405.431    
        ENDIF                                                              UDG2F405.432    
      END DO                                                               UDG2F405.433    
      CLOSE(10)                                                            GPB2F401.196    
      IF(L.EQ.0)THEN                                                       UDG2F405.434    
        WRITE(8,*)' files compare (ignoring Fixed Length Header)'          UDG2F405.435    
      ELSE                                                                 COMPARE1.823    
        WRITE(8,*)' files DO NOT compare'                                  UDG2F405.436    
      ENDIF                                                                COMPARE1.825    
      WRITE(7,*)' '                                                        COMPARE1.826    
      CLOSE(7)                                                             GGH4F401.13     
                                                                           COMPARE1.827    
      RETURN                                                               COMPARE1.828    
      END                                                                  COMPARE1.829    
                                                                           GPB2F401.197    

      SUBROUTINE PRINT_DIF_MAP(DIFF,ROWS,COLS,KEY)                          3GPB2F401.198    
!LL Writes out a map of the differences between two fields - with one      GPB2F401.199    
!LL character per point. This allows points in two fields which are        GPB2F401.200    
!LL different to be quickly identified.                                    GPB2F401.201    
!LL Writes to UNIT10 - opened in COMPARE - filename must be supplied       GPB2F401.202    
!LL by UNIT10 environment variable via the cumf script                     GPB2F401.203    
                                                                           GPB2F401.204    
      IMPLICIT NONE                                                        GPB2F401.205    
                                                                           GPB2F401.206    
      INTEGER                                                              GPB2F401.207    
     &  ROWS  ! IN : number of rows in field                               GPB2F401.208    
     &, COLS  ! IN : number of cols in field                               GPB2F401.209    
                                                                           GPB2F401.210    
      CHARACTER*1                                                          GPB2F401.211    
     &  DIFF(ROWS*COLS)  ! IN : difference map field to be output          GPB2F401.212    
                                                                           GPB2F401.213    
      CHARACTER*(*)                                                        UDG2F402.134    
     &  KEY  ! IN : key to difference map                                  GPB2F401.215    
                                                                           GPB2F401.216    
! Local variables                                                          GPB2F401.217    
      INTEGER X,Y,Z                                                        GPB2F401.218    
      integer i ,j                                                         UDG2F402.135    
                                                                           UDG2F402.136    
      character*1 numb(10), blank                                          UDG2F402.137    
                                                                           UDG2F402.138    
      data numb/'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'/          UDG2F402.139    
      data blank /' '/                                                     UDG2F402.140    
                                                                           UDG2F402.141    
      WRITE(10,'(/a/)') KEY                                                UDG2F402.142    
                                                                           GPB2F401.221    
*IF DEF,LFOK                                                               GPB2F401.222    
                                                                           UDG2F402.143    
      write(10,'(6x,120a1)') ((blank, j=1,9),                              UDG2F402.144    
     2 numb(mod((i+10)/10, 10)+1), i=1, cols, 10)                          UDG2F402.145    
c                                                                          UDG2F402.146    
      write(10,'(6x,120a1)') (numb(mod(i, 10)+1), i=1,cols)                UDG2F402.147    
                                                                           UDG2F402.148    
      do y=1,rows                                                          UDG2F402.149    
        z=(y-1)*cols                                                       UDG2F402.150    
        if(cols.eq.120) then                                               UDG2F402.151    
          write(10,123) y,(diff(x+z),x=1,cols)                             UDG2F402.152    
 123      format(1x,i3,'->',120a1)                                         UDG2F402.153    
        else                                                               UDG2F402.154    
          write(10,124) y,(diff(x+z),x=1,cols)                             UDG2F402.155    
 124      format(1x,i3,'->',120a1/(6x,120a1))                              UDG2F402.156    
        endif                                                              UDG2F402.157    
      enddo                                                                UDG2F402.158    
*ELSE                                                                      GPB2F401.250    
      WRITE(6,*) 'Difference maps not supported on this platform'          GPB2F401.251    
*ENDIF                                                                     GPB2F401.252    
                                                                           GPB2F401.253    
      RETURN                                                               GPB2F401.254    
      END                                                                  GPB2F401.255    
*ENDIF                                                                     COMPARE1.830