C
C  Version 1.1  vjp  5/04/99
C

      SUBROUTINE COMPARE61(DIR1,DIR2,TOL)
C
C---------------------------------------------------------------------------C
C                     (  Serial Version  3/28/98  )                         C 
C  Compare data at the elevation stations from two different directories.   C
C  This version is compatible with ADCIRC version 33.04                     C
C                                                                           C
C  Input Parameters:                                                        C
C                                                                           C
C    DIR1  =  pathname of first directory                                   C
C    DIR2  =  pathname of second directory                                  C
C    TOL   =  user supplied relative error tolerance                        C
C                                                                           C
C---------------------------------------------------------------------------C
C
      USE POST_GLOBAL
      INTEGER I,J,K,L,IPROC,IDUM
      INTEGER NTRSPE1,NTRSPE2
      INTEGER NSTEMP1,NSTEMP2
      INTEGER ITSE1,ITSE2
      INTEGER ITEMPE1,ITEMPE2
      INTEGER NSTAE1,NSTAE2 
      INTEGER NUMSTNS1, NUMSTNS2
      INTEGER NSPOOLE1,NSPOOLE2 
      INTEGER IREC1,IREC2
      INTEGER LEN1,LEN2
      REAL(SZ) DTE1,DTE2
      REAL(8) TIMEOUTSE1,TIMEOUTSE2
      REAL(SZ) TOL,ERR !jgf45.07 ERR is a fortran keyword...
      CHARACTER*80  DIR1,DIR2,FNAME1,FNAME2,FNAME3
      CHARACTER*85  INLINE
      CHARACTER*4 RDES4(8),RID4(6),AID4(6)
      CHARACTER*8 RDES8(8),RID8(6),AID8(6)
      LOGICAL FOUND1,FOUND2

      REAL(8),ALLOCATABLE ::  ETA1(:),ETA2(:)
      ALLOCATE ( ETA1(MNSTAE),ETA2(MNSTAE))
C
C--Construct File Names
C
      DO I=1, LEN(DIR1)
         IF (DIR1(I:I).EQ.' ') THEN
           LEN1 = I-1
           GO TO 100
         ENDIF
      ENDDO
100   CONTINUE
      DO I=1, LEN(DIR2)
         IF (DIR2(I:I).EQ.' ') THEN
           LEN2 = I-1
           GO TO 200
         ENDIF
      ENDDO
200   CONTINUE
C
      FNAME1 = DIR1(1:LEN1)//'/fort.61'
      FNAME2 = DIR2(1:LEN2)//'/fort.61'
      FNAME3 = 'diffs.61'
C
C--Determine whether Unit 61 is Sequential Formatted or Direct Access Binary
C
      IF (ABS(NOUTE).EQ.1) THEN
        GO TO 1000
      ELSE
        GO TO 2000
      ENDIF
C
1000  CONTINUE
C
C--Open Both Global Sequential Formatted fort.61 files
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(UNIT=51,FILE=FNAME1)
        OPEN(UNIT=61,FILE=FNAME2)
        OPEN(UNIT=71,FILE=FNAME3)
      ELSE
        print *, "No fort.61 files found"
        RETURN
      ENDIF
C
      READ (51,'(A85)') INLINE
c     WRITE(71,'(A85)')  INLINE
      READ (61,'(A85)') INLINE
c     WRITE(71,'(A85)')  INLINE
C
      READ (51,3645) NTRSPE1,NSTAE1,DTE1,NSPOOLE1,ITEMPE1
      READ (61,3645) NTRSPE2,NSTAE2,DTE2,NSPOOLE2,ITEMPE2
C
      IF (NTRSPE1.NE.NTRSPE2) THEN
         WRITE(71,*) "NTRSPE1 not equal to NSTRSPE2"
         RETURN
      ENDIF
C
      IF (NSTAE1.NE.NSTAE2) THEN
        WRITE(71,*) "NSTAE1 not equal to NSTAE2"
        RETURN
      ENDIF
C
      IF (ABS(DTE1-DTE2).GT.1.0E-5) THEN
        WRITE(71,*) "DTE1 not equal to DTE2"
        RETURN
      ENDIF
C
      IF (NSPOOLE1.NE.NSPOOLE2) THEN
        WRITE(71,*) "NSPOOLE1 not equal to NSPOOLE2"
        RETURN
      ENDIF
      IF (ITEMPE1.NE.ITEMPE2) THEN
        WRITE(71,*) "ITEMPE1 not equal to ITEMPE2"
        RETURN
      ENDIF
C
c     WRITE(71,*) NTRSPE1,NSTAE1,DTE1,NSPOOLE1,ITEMPE1
C
      DO J=1,NTRSPE1
C
         READ(51,2120) TIMEOUTSE1,ITSE1
         READ(61,2120) TIMEOUTSE2,ITSE2
C
         IF (ABS(TIMEOUTSE1-TIMEOUTSE2).GT.1.0E-5) THEN
           WRITE(71,*) "TIMEOUTSE1 not equal to TIMEOUTSE2"
           RETURN
         ENDIF
C
        IF (ITSE1.NE.ITSE2) THEN
          WRITE(71,*) "ITSE1 not equal to ITSE2"
          RETURN
        ENDIF
C
C       WRITE(71,*) TIMEOUTSE1,ITSE1
C
         DO I=1, NSTAE1
            READ(51,*) IDUM,ETA1(I)
            READ(61,*) IDUM,ETA2(I)
            ERR = ABS(ETA1(I)-ETA2(I))
            IF (ERR.GT.TOL) WRITE(71,*) TIMEOUTSE1,I,ETA1(I),ETA2(I)
         ENDDO
C
      ENDDO                 
      GO TO 9999
C 
2000  CONTINUE
C
C--Open Both Global Direct Access Binary fort.61 files
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(51,FILE=FNAME1,ACCESS='DIRECT',RECL=NBYTE)
        OPEN(61,FILE=FNAME2,ACCESS='DIRECT',RECL=NBYTE)
        OPEN(UNIT=71,FILE=FNAME3)
      ELSE
        print *, "No fort.61 files found"
        RETURN
      ENDIF
C
C--Read RUNDES RUNID and AGRID from 1st Global File
C
      IREC1 = 0
      IF (NBYTE.EQ.4) THEN
        DO I=1,8
           READ(51,REC=IREC1+I) RDES4(I)
        ENDDO
        IREC1=IREC1+8
        DO I=1,6
           READ(51,REC=IREC1+I) RID4(I)
        ENDDO
        IREC1=IREC1+6
        DO I=1,6
           READ(51,REC=IREC1+I) AID4(I)
        ENDDO
        IREC1=IREC1+6
      ENDIF
      IF (NBYTE.EQ.8) THEN
        DO I=1,4
           READ(51,REC=IREC1+I) RDES8(I)
        ENDDO
        IREC1=IREC1+4
        DO I=1,3
           READ(51,REC=IREC1+I) RID8(I)
        ENDDO
        IREC1=IREC1+3
        DO I=1,3
           READ(51,REC=IREC1+I) AID8(I)
        ENDDO
        IREC1=IREC1+3
      ENDIF
C
C--Read RUNDES RUNID and AGRID from 2nd Global File
C
      IREC2 = 0
      IF (NBYTE.EQ.4) THEN
        DO I=1,8
           READ(61,REC=IREC2+I) RDES4(I)
        ENDDO
        IREC2=IREC2+8
        DO I=1,6
           READ(61,REC=IREC2+I) RID4(I)
        ENDDO
        IREC2=IREC2+6
        DO I=1,6
           READ(61,REC=IREC2+I) AID4(I)
        ENDDO
        IREC2=IREC2+6
      ENDIF
      IF (NBYTE.EQ.8) THEN
        DO I=1,4
           READ(61,REC=IREC2+I) RDES8(I)
        ENDDO
        IREC2=IREC2+4
        DO I=1,3
           READ(61,REC=IREC2+I) RID8(I)
        ENDDO
        IREC2=IREC2+3
        DO I=1,3
           READ(61,REC=IREC2+I) AID8(I)
        ENDDO
        IREC2=IREC2+3
      ENDIF
C
c     IF (NBYTE.EQ.4) THEN
c       WRITE(71,*) RDES4
c       WRITE(71,*) RID4
c       WRITE(71,*) AID4
c     ELSE
c       WRITE(71,*) RDES8
c       WRITE(71,*) RID8
c       WRITE(71,*) AID8
c     ENDIF
C
C--Read NTRSPE, NSTAE, DT*NSPOOLE from both files
C  and then close both files to flush file buffers
C
      READ(51,REC=IREC1+1) NTRSPE1
      READ(51,REC=IREC1+2) NSTAE1
      READ(51,REC=IREC1+3) DTE1
      READ(51,REC=IREC1+4) NSPOOLE1
      READ(51,REC=IREC1+5) ITEMPE1
      IREC1 = IREC1+5
C
      READ(61,REC=IREC2+1) NTRSPE2
      READ(61,REC=IREC2+2) NSTAE2
      READ(61,REC=IREC2+3) DTE2
      READ(61,REC=IREC2+4) NSPOOLE2
      READ(61,REC=IREC2+5) ITEMPE2
      IREC2 = IREC2+5
C
      CLOSE(51)         ! Flush File Buffer for file 1
      CLOSE(61)         ! Flush File buffer for file 2
      OPEN(51,FILE=FNAME1,ACCESS='DIRECT',RECL=NBYTE)
      OPEN(61,FILE=FNAME2,ACCESS='DIRECT',RECL=NBYTE)
C
      DO J=1,NTRSPE1
C
         READ(51,REC=IREC1+1) TIMEOUTSE1
         READ(51,REC=IREC1+2) ITSE1
         IREC1 = IREC1+2
C
         READ(61,REC=IREC2+1) TIMEOUTSE2
         READ(61,REC=IREC2+2) ITSE2
         IREC2 = IREC2+2
C
         DO I=1, NSTAE1
            READ(51,REC=IREC1+I) ETA1(I)
            READ(61,REC=IREC2+I) ETA2(I)
            ERR = ABS(ETA1(I)-ETA2(I))
            IF (ERR.GT.TOL) WRITE(71,*) TIMEOUTSE1,I,ETA1(I),ETA2(I)
         ENDDO
         IREC1 = IREC1 + NSTAE1
         IREC2 = IREC2 + NSTAE2
C
      ENDDO                 
C
C--Close both Global fort.61 Files
C
9999  CONTINUE
      CLOSE(51)
      CLOSE(61)
      CLOSE(71)
C
   80 FORMAT(A40)
 2120 FORMAT(2X,E20.10,5X,I10)
 3645 FORMAT(1X,I10,1X,I10,1X,E15.7,1X,I5,1X,I5)
C
      RETURN
      END

      SUBROUTINE COMPARE62(DIR1,DIR2,TOL)
C
C---------------------------------------------------------------------------C
C                     (  Serial Version  3/28/98  )                         C 
C  Compare data at the velocity stations from two different directories.    C
C  This version is compatible with ADCIRC version 33.04                     C
C                                                                           C
C  Input Parameters:                                                        C
C                                                                           C
C    DIR1  =  pathname of first directory                                   C
C    DIR2  =  pathname of second directory                                  C
C    TOL   =  user supplied relative error tolerance                        C
C                                                                           C
C---------------------------------------------------------------------------C
C
      USE POST_GLOBAL
      INTEGER I,J,K,L,IPROC,IDUM
      INTEGER NTRSPV1,NTRSPV2
      INTEGER NSTEMP1,NSTEMP2
      INTEGER ITSV1,ITSV2
      INTEGER ITEMPV1,ITEMPV2
      INTEGER NSTAV1,NSTAV2 
      INTEGER NUMSTNS1, NUMSTNS2
      INTEGER NSPOOLV1,NSPOOLV2 
      INTEGER IREC1,IREC2
      INTEGER LEN1,LEN2
      REAL(SZ) DTV1,DTV2
      REAL(8) TIMEOUTSV1,TIMEOUTSV2
      REAL(SZ) TOL,ERR
      CHARACTER*80  DIR1,DIR2,FNAME1,FNAME2,FNAME3
      CHARACTER*85  INLINE
      CHARACTER*4 RDES4(8),RID4(6),AID4(6)
      CHARACTER*8 RDES8(8),RID8(6),AID8(6)
      LOGICAL FOUND1,FOUND2

      REAL(8),ALLOCATABLE  ::  UU1(:),VV1(:)
      REAL(8),ALLOCATABLE  ::  UU2(:),VV2(:)
      ALLOCATE ( UU1(MNSTAV),VV1(MNSTAV))
      ALLOCATE ( UU2(MNSTAV),VV2(MNSTAV))
C
C--Construct File Names
C
      DO I=1, LEN(DIR1)
         IF (DIR1(I:I).EQ.' ') THEN
           LEN1 = I-1
           GO TO 100
         ENDIF
      ENDDO
100   CONTINUE
      DO I=1, LEN(DIR2)
         IF (DIR2(I:I).EQ.' ') THEN
           LEN2 = I-1
           GO TO 200
         ENDIF
      ENDDO
200   CONTINUE
C
      FNAME1 = DIR1(1:LEN1)//'/fort.62'
      FNAME2 = DIR2(1:LEN2)//'/fort.62'
      FNAME3 = 'diffs.62'
C
C--Determine whether Unit 61 is Sequential Formatted or Direct Access Binary
C
      IF (ABS(NOUTV).EQ.1) THEN
        GO TO 1000
      ELSE
        GO TO 2000
      ENDIF
C
1000  CONTINUE
C
C--Open Both Global Sequential Formatted fort.62 files
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(UNIT=52,FILE=FNAME1)
        OPEN(UNIT=62,FILE=FNAME2)
        OPEN(UNIT=72,FILE=FNAME3)
      ELSE
        print *, "No fort.62 files found"
        RETURN
      ENDIF
C
      READ (52,'(A85)') INLINE
c     WRITE(72,'(A85)')  INLINE
      READ (62,'(A85)') INLINE
c     WRITE(72,'(A85)')  INLINE
C
      READ (52,3645) NTRSPV1,NSTAV1,DTV1,NSPOOLV1,ITEMPV1
      READ (62,3645) NTRSPV2,NSTAV2,DTV2,NSPOOLV2,ITEMPV2
C
      IF (NTRSPV1.NE.NTRSPV2) THEN
         WRITE(72,*) "NTRSPV1 not equal to NSTRSPV2"
         RETURN
      ENDIF
C
      IF (NSTAV1.NE.NSTAV2) THEN
        WRITE(72,*) "NSTAV1 not equal to NSTAV2"
        RETURN
      ENDIF
C
      IF (ABS(DTV1-DTV2).GT.1.0E-5) THEN
        WRITE(72,*) "DTV1 not equal to DTV2"
        RETURN
      ENDIF
C
      IF (NSPOOLV1.NE.NSPOOLV2) THEN
        WRITE(72,*)  "NSPOOLV1 not equal to NSPOOLV2"
        RETURN
      ENDIF
C
      IF (ITEMPV1.NE.ITEMPV2) THEN
        WRITE(72,*) "ITEMPV1 not equal to ITEMPV2"
        RETURN
      ENDIF
C
c     WRITE(72,*) NTRSPV1,NSTAV1,DTV1,NSPOOLV1,ITEMPV1
C
      DO J=1,NTRSPV1
C
         READ(52,2120) TIMEOUTSV1,ITSV1
         READ(62,2120) TIMEOUTSV2,ITSV2
C
         IF (ABS(TIMEOUTSV1-TIMEOUTSV2).GT.1.0E-5) THEN
           WRITE(72,*) "TIMEOUTSV1 not equal to TIMEOUTSV2"
           RETURN
         ENDIF
C
        IF (ITSV1.NE.ITSV2) THEN
          WRITE(72,*) "ITSV1 not equal to ITSV2"
          RETURN
        ENDIF
C
C       WRITE(72,*) TIMEOUTSV1,ITSV1
C
         DO I=1, NSTAV1
            READ(52,*) IDUM,UU1(I),VV1(I)
            READ(62,*) IDUM,UU2(I),VV2(I)
            ERR = SQRT(((UU1(I)-UU2(I))**2+(VV1(I)-VV2(I))**2))
            IF (ERR.GT.TOL) WRITE(72,*) TIMEOUTSV1,
     &        I,UU1(I),UU2(I),VV1(I),VV2(I)
         ENDDO
C
      ENDDO                 
      GO TO 9999
C 
2000  CONTINUE
C
C--Open Both Global Direct Access Binary fort.62 files
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(52,FILE=FNAME1,ACCESS='DIRECT',RECL=NBYTE)
        OPEN(62,FILE=FNAME2,ACCESS='DIRECT',RECL=NBYTE)
        OPEN(UNIT=72,FILE=FNAME3)
      ELSE
        print *, "No fort.61 files found"
        RETURN
      ENDIF
C
C--Read RUNDES RUNID and AGRID from 1st Global File
C
      IREC1 = 0
      IF (NBYTE.EQ.4) THEN
        DO I=1,8
           READ(52,REC=IREC1+I) RDES4(I)
        ENDDO
        IREC1=IREC1+8
        DO I=1,6
           READ(52,REC=IREC1+I) RID4(I)
        ENDDO
        IREC1=IREC1+6
        DO I=1,6
           READ(52,REC=IREC1+I) AID4(I)
        ENDDO
        IREC1=IREC1+6
      ENDIF
      IF (NBYTE.EQ.8) THEN
        DO I=1,4
           READ(52,REC=IREC1+I) RDES8(I)
        ENDDO
        IREC1=IREC1+4
        DO I=1,3
           READ(52,REC=IREC1+I) RID8(I)
        ENDDO
        IREC1=IREC1+3
        DO I=1,3
           READ(52,REC=IREC1+I) AID8(I)
        ENDDO
        IREC1=IREC1+3
      ENDIF
C
C--Read RUNDES RUNID and AGRID from 2nd Global File
C
      IREC2 = 0
      IF (NBYTE.EQ.4) THEN
        DO I=1,8
           READ(62,REC=IREC2+I) RDES4(I)
        ENDDO
        IREC2=IREC2+8
        DO I=1,6
           READ(62,REC=IREC2+I) RID4(I)
        ENDDO
        IREC2=IREC2+6
        DO I=1,6
           READ(62,REC=IREC2+I) AID4(I)
        ENDDO
        IREC2=IREC2+6
      ENDIF
      IF (NBYTE.EQ.8) THEN
        DO I=1,4
           READ(62,REC=IREC2+I) RDES8(I)
        ENDDO
        IREC2=IREC2+4
        DO I=1,3
           READ(62,REC=IREC2+I) RID8(I)
        ENDDO
        IREC2=IREC2+3
        DO I=1,3
           READ(62,REC=IREC2+I) AID8(I)
        ENDDO
        IREC2=IREC2+3
      ENDIF
C
c     IF (NBYTE.EQ.4) THEN
c       WRITE(72,*) RDES4
c       WRITE(72,*) RID4
c       WRITE(72,*) AID4
c     ELSE
c       WRITE(72,*) RDES8
c       WRITE(72,*) RID8
c       WRITE(72,*) AID8
c     ENDIF
C
C--Read NTRSPE, NSTAE, DT*NSPOOLE from both files
C  and then close both files to flush file buffers
C
      READ(52,REC=IREC1+1) NTRSPV1
      READ(52,REC=IREC1+2) NSTAV1
      READ(52,REC=IREC1+3) DTV1
      READ(52,REC=IREC1+4) NSPOOLV1
      READ(52,REC=IREC1+5) ITEMPV1
      IREC1 = IREC1+5
C
      READ(62,REC=IREC2+1) NTRSPV2
      READ(62,REC=IREC2+2) NSTAV2
      READ(62,REC=IREC2+3) DTV2
      READ(62,REC=IREC2+4) NSPOOLV2
      READ(62,REC=IREC2+5) ITEMPV2
      IREC2 = IREC2+5
C
      CLOSE(52)         ! Flush File Buffer for file 1
      CLOSE(62)         ! Flush File buffer for file 2
      OPEN(52,FILE=FNAME1,ACCESS='DIRECT',RECL=NBYTE)
      OPEN(62,FILE=FNAME2,ACCESS='DIRECT',RECL=NBYTE)
C
      DO J=1,NTRSPV1
C
         READ(52,REC=IREC1+1) TIMEOUTSV1
         READ(52,REC=IREC1+2) ITSV1
         IREC1 = IREC1+2
C
         READ(62,REC=IREC2+1) TIMEOUTSV2
         READ(62,REC=IREC2+2) ITSV2
         IREC2 = IREC2+2
C
         DO I=1, NSTAV1
            READ(52,REC=IREC1+2*I-1) UU1(I)
            READ(52,REC=IREC1+2*I)   VV1(I)
            READ(62,REC=IREC2+2*I-1) UU2(I)
            READ(62,REC=IREC2+2*I)   VV2(I)
            ERR = SQRT(((UU1(I)-UU2(I))**2+(VV1(I)-VV2(I))**2))
            IF (ERR.GT.TOL) WRITE(72,*) TIMEOUTSV1,
     &        I,UU1(I),UU2(I),VV1(I),VV2(I)
         ENDDO
         IREC1 = IREC1 + 2*NSTAV1
         IREC2 = IREC2 + 2*NSTAV2
C
      ENDDO                 
C
C--Close both Global fort.61 Files
C
9999  CONTINUE
      CLOSE(52)
      CLOSE(62)
      CLOSE(72)
C
   80 FORMAT(A40)
 2120 FORMAT(2X,E20.10,5X,I10)
 3645 FORMAT(1X,I10,1X,I10,1X,E15.7,1X,I5,1X,I5)
C
      RETURN
      END

      SUBROUTINE COMPARE63(DIR1,DIR2,TOL)
C
C---------------------------------------------------------------------------C
C                     (  Serial Version  3/28/98  )                         C 
C  Compare elevation data at all nodes from two different directories.      C
C  This version is compatible with ADCIRC version 33.04                     C
C                                                                           C
C  Input Parameters:                                                        C
C                                                                           C
C    DIR1  =  pathname of first directory                                   C
C    DIR2  =  pathname of second directory                                  C
C    TOL   =  user supplied relative error tolerance                        C
C                                                                           C
C---------------------------------------------------------------------------C
C
      USE POST_GLOBAL
      INTEGER I,J,K,L,IPROC,IDUM
      INTEGER NDSETGE1,NDSETGE2
      INTEGER NP1,NP2
      INTEGER NSTEMP1,NSTEMP2
      INTEGER ITEMPE1,ITEMPE2
      INTEGER ITE1,ITE2
      INTEGER IREC1,IREC2
      INTEGER LEN1,LEN2
      REAL(SZ) DTE1,DTE2
      REAL(SZ) TOL,ERR
      REAL(8)  TIMEOUTE1,TIMEOUTE2
      CHARACTER*80  DIR1,DIR2,FNAME1,FNAME2,FNAME3
      CHARACTER*85  INLINE
      CHARACTER*4 RDES4(8),RID4(6),AID4(6)
      CHARACTER*8 RDES8(8),RID8(6),AID8(6)
      LOGICAL FOUND1,FOUND2

      REAL(8),ALLOCATABLE  ::   ETA1(:),ETA2(:)
      ALLOCATE ( ETA1(MNP),ETA2(MNP))
C
C--Construct File Names
C
      DO I=1, LEN(DIR1)
         IF (DIR1(I:I).EQ.' ') THEN
           LEN1 = I-1
           GO TO 100
         ENDIF
      ENDDO
100   CONTINUE
      DO I=1, LEN(DIR2)
         IF (DIR2(I:I).EQ.' ') THEN
           LEN2 = I-1
           GO TO 200
         ENDIF
      ENDDO
200   CONTINUE
C
      FNAME1 = DIR1(1:LEN1)//'/fort.63'
      FNAME2 = DIR2(1:LEN2)//'/fort.63'
      FNAME3 = 'diffs.63'
C
C--Determine whether Unit 63 is Sequential Formatted or Direct Access Binary
C
      IF (ABS(NOUTGE).EQ.1) THEN
        GO TO 1000
      ELSE
        GO TO 2000
      ENDIF
C
1000  CONTINUE
C
C--Open Both Global Sequential Formatted fort.63 files
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(UNIT=53,FILE=FNAME1)
        OPEN(UNIT=63,FILE=FNAME2)
        OPEN(UNIT=73,FILE=FNAME3)
      ELSE
        print *, "No fort.63 files found"
        RETURN
      ENDIF
C
      READ (53,'(A85)') INLINE
c     WRITE(73,'(A85)')  INLINE
      READ (63,'(A85)') INLINE
c     WRITE(73,'(A85)')  INLINE
C
      READ (53,3645) NDSETGE1,NP1,DTE1,NSTEMP1,ITEMPE1
      READ (63,3645) NDSETGE2,NP2,DTE2,NSTEMP2,ITEMPE2
C
      IF (NDSETGE1.NE.NDSETGE2) THEN
         WRITE(73,*) "NDSETGE1 not equal to NDSETGE2"
         RETURN
      ENDIF
C
      IF (NP1.NE.NP2) THEN
        WRITE(73,*) "NP1 not equal to NP2"
        RETURN
      ENDIF
C
      IF (ABS(DTE1-DTE2).GT.1.0E-5) THEN
        WRITE(73,*) "DTE1 not equal to DTE2"
        RETURN
      ENDIF
C
      IF (NSTEMP1.NE.NSTEMP2) THEN
        WRITE(73,*) "NSTEMP1 not equal to NSTEMP2"
        RETURN
      ENDIF
      IF (ITEMPE1.NE.ITEMPE2) THEN
        WRITE(73,*) "ITEMPE1 not equal to ITEMPE2"
        RETURN
      ENDIF
C
c     WRITE(73,*) NDSETGE1,NP1,DTE1,NSTEMP1,ITEMPE1
C
      DO J=1,NDSETGE1
C
         READ(53,2120) TIMEOUTE1,ITE1
         READ(63,2120) TIMEOUTE2,ITE2
C
         IF (ABS(TIMEOUTE1-TIMEOUTE2).GT.1.0E-5) THEN
           WRITE(73,*) "TIMEOUTE1 not equal to TIMEOUTE2"
           RETURN
         ENDIF
C
        IF (ITE1.NE.ITE2) THEN
          WRITE(73,*) "ITE1 not equal to ITE2"
          RETURN
        ENDIF
C
C       WRITE(73,*) TIMEOUTE1,ITE1
C
         DO I=1, NNODG
            READ(53,*) IDUM,ETA1(I)
            READ(63,*) IDUM,ETA2(I)
            ERR = ABS(ETA1(I)-ETA2(I))
            IF (ERR.GT.TOL) WRITE(73,*) TIMEOUTE1,I,ETA1(I),ETA2(I)
         ENDDO
C
      ENDDO                 
      GO TO 9999
C 
2000  CONTINUE
C
C--Open Both Global Direct Access Binary fort.63 files
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(53,FILE=FNAME1,ACCESS='DIRECT',RECL=NBYTE)
        OPEN(63,FILE=FNAME2,ACCESS='DIRECT',RECL=NBYTE)
        OPEN(UNIT=73,FILE=FNAME3)
      ELSE
        print *, "No fort.63 files found"
        RETURN
      ENDIF
C
C--Read RUNDES RUNID and AGRID from 1st Global File
C
      IREC1 = 0
      IF (NBYTE.EQ.4) THEN
        DO I=1,8
           READ(53,REC=IREC1+I) RDES4(I)
        ENDDO
        IREC1=IREC1+8
        DO I=1,6
           READ(53,REC=IREC1+I) RID4(I)
        ENDDO
        IREC1=IREC1+6
        DO I=1,6
           READ(53,REC=IREC1+I) AID4(I)
        ENDDO
        IREC1=IREC1+6
      ENDIF
      IF (NBYTE.EQ.8) THEN
        DO I=1,4
           READ(53,REC=IREC1+I) RDES8(I)
        ENDDO
        IREC1=IREC1+4
        DO I=1,3
           READ(53,REC=IREC1+I) RID8(I)
        ENDDO
        IREC1=IREC1+3
        DO I=1,3
           READ(53,REC=IREC1+I) AID8(I)
        ENDDO
        IREC1=IREC1+3
      ENDIF
C
C--Read RUNDES RUNID and AGRID from 2nd Global File
C
      IREC2 = 0
      IF (NBYTE.EQ.4) THEN
        DO I=1,8
           READ(63,REC=IREC2+I) RDES4(I)
        ENDDO
        IREC2=IREC2+8
        DO I=1,6
           READ(63,REC=IREC2+I) RID4(I)
        ENDDO
        IREC2=IREC2+6
        DO I=1,6
           READ(63,REC=IREC2+I) AID4(I)
        ENDDO
        IREC2=IREC2+6
      ENDIF
      IF (NBYTE.EQ.8) THEN
        DO I=1,4
           READ(63,REC=IREC2+I) RDES8(I)
        ENDDO
        IREC2=IREC2+4
        DO I=1,3
           READ(63,REC=IREC2+I) RID8(I)
        ENDDO
        IREC2=IREC2+3
        DO I=1,3
           READ(63,REC=IREC2+I) AID8(I)
        ENDDO
        IREC2=IREC2+3
C
      ENDIF
C
c     IF (NBYTE.EQ.4) THEN
c       WRITE(73,*) RDES4
c       WRITE(73,*) RID4
c       WRITE(73,*) AID4
c     ELSE
c       WRITE(73,*) RDES8
c       WRITE(73,*) RID8
c       WRITE(73,*) AID8
c     ENDIF
C
C--Read NTRSPE, NSTAE, DT*NSPOOLE from both files
C  and then close both files to flush file buffers
C
      READ(53,REC=IREC1+1) NDSETGE1
      READ(53,REC=IREC1+2) NP1
      READ(53,REC=IREC1+3) DTE1
      READ(53,REC=IREC1+4) NSTEMP1
      READ(53,REC=IREC1+5) ITEMPE1
      IREC1 = IREC1+5
C
      READ(63,REC=IREC2+1) NDSETGE2
      READ(63,REC=IREC2+2) NP2
      READ(63,REC=IREC2+3) DTE2
      READ(63,REC=IREC2+4) NSTEMP2
      READ(63,REC=IREC2+5) ITEMPE2
      IREC2 = IREC2+5
C
      CLOSE(53)         ! Flush File Buffer for file 1
      CLOSE(63)         ! Flush File buffer for file 2
      OPEN(53,FILE=FNAME1,ACCESS='DIRECT',RECL=NBYTE)
      OPEN(63,FILE=FNAME2,ACCESS='DIRECT',RECL=NBYTE)
C
      DO J=1,NDSETGE1
C
         READ(53,REC=IREC1+1) TIMEOUTE1
         READ(53,REC=IREC1+2) ITE1
         IREC1 = IREC1+2
C
         READ(63,REC=IREC2+1) TIMEOUTE2
         READ(63,REC=IREC2+2) ITE2
         IREC2 = IREC2+2
C
         DO I=1, NNODG
            READ(53,REC=IREC1+I) ETA1(I)
            READ(63,REC=IREC2+I) ETA2(I)
            ERR = ABS(ETA1(I)-ETA2(I))
            IF (ERR.GT.TOL) WRITE(73,*) TIMEOUTE1,I,ETA1(I),ETA2(I)
         ENDDO
         IREC1 = IREC1 + NNODG
         IREC2 = IREC2 + NNODG
C
      ENDDO                 
C
C--Close both Global fort.63 Files
C
9999  CONTINUE
      CLOSE(53)
      CLOSE(63)
      CLOSE(73)
C
   80 FORMAT(A40)
 2120 FORMAT(2X,E20.10,5X,I10)
 3645 FORMAT(1X,I10,1X,I10,1X,E15.7,1X,I5,1X,I5)
C
      RETURN
      END

      SUBROUTINE COMPARE64(DIR1,DIR2,TOL)
C
C---------------------------------------------------------------------------C
C                     (  Serial Version  3/28/98  )                         C 
C  Compare velocity data at all nodes from two different directories.       C
C  This version is compatible with ADCIRC version 33.04                     C
C                                                                           C
C  Input Parameters:                                                        C
C                                                                           C
C    DIR1  =  pathname of first directory                                   C
C    DIR2  =  pathname of second directory                                  C
C    TOL   =  user supplied relative error tolerance                        C
C                                                                           C
C---------------------------------------------------------------------------C
C
      USE POST_GLOBAL
      INTEGER I,J,K,L,IPROC,IDUM
      INTEGER NDSETGV1,NDSETGV2
      INTEGER NSTEMP1,NSTEMP2
      INTEGER ITV1,ITV2
      INTEGER ITEMPV1,ITEMPV2
      INTEGER NP1,NP2 
      INTEGER IREC1,IREC2
      INTEGER LEN1,LEN2
      REAL(SZ) DTV1,DTV2
      REAL(8) TIMEOUTV1,TIMEOUTV2
      REAL(SZ) TOL,ERR !jgf45.07 ERR is a fortran keyword...
      CHARACTER*80  DIR1,DIR2,FNAME1,FNAME2,FNAME3
      CHARACTER*85  INLINE
      CHARACTER*4 RDES4(8),RID4(6),AID4(6)
      CHARACTER*8 RDES8(8),RID8(6),AID8(6)
      LOGICAL FOUND1,FOUND2

      REAL(8),ALLOCATABLE :: UU1(:),VV1(:)
      REAL(8),ALLOCATABLE :: UU2(:),VV2(:)

      ALLOCATE ( UU1(MNP),VV1(MNP))
      ALLOCATE ( UU2(MNP),VV2(MNP))
C
C--Construct File Names
C
      DO I=1, LEN(DIR1)
         IF (DIR1(I:I).EQ.' ') THEN
           LEN1 = I-1
           GO TO 100
         ENDIF
      ENDDO
100   CONTINUE
      DO I=1, LEN(DIR2)
         IF (DIR2(I:I).EQ.' ') THEN
           LEN2 = I-1
           GO TO 200
         ENDIF
      ENDDO
200   CONTINUE
C
      FNAME1 = DIR1(1:LEN1)//'/fort.64'
      FNAME2 = DIR2(1:LEN2)//'/fort.64'
      FNAME3 = 'diffs.64'
C
C--Determine whether Unit 64 is Sequential Formatted or Direct Access Binary
C
      IF (ABS(NOUTGV).EQ.1) THEN
        GO TO 1000
      ELSE
        GO TO 2000
      ENDIF
C
1000  CONTINUE
C
C--Open Both Global Sequential Formatted fort.64 files
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
         OPEN(UNIT=54,FILE=FNAME1)
        OPEN(UNIT=64,FILE=FNAME2)
        OPEN(UNIT=74,FILE=FNAME3)
      ELSE
        print *, "No fort.64 files found"
        RETURN
      ENDIF
C
      READ (54,'(A85)') INLINE
c     WRITE(74,'(A85)')  INLINE
      READ (64,'(A85)') INLINE
c     WRITE(74,'(A85)')  INLINE
C
      READ (54,3645) NDSETGV1,NP1,DTV1,NSTEMP1,ITEMPV1
      READ (64,3645) NDSETGV2,NP2,DTV2,NSTEMP2,ITEMPV2
C
      IF (NDSETGV1.NE.NDSETGV2) THEN
         WRITE(74,*) "NDSETGV1 not equal to NDSETGV2"
         RETURN
      ENDIF
C
      IF (NP1.NE.NP2) THEN
        WRITE(74,*) "NP1 not equal to NP2"
        RETURN
      ENDIF
C
      IF (ABS(DTV1-DTV2).GT.1.0E-5) THEN
        WRITE(74,*)  "DTV1 not equal to DTV2"
        RETURN
      ENDIF
C
      IF (NSTEMP1.NE.NSTEMP2) THEN
        WRITE(74,*) "NSTEMP1 not equal to NSTEMP2"
        RETURN
      ENDIF
      IF (ITEMPV1.NE.ITEMPV2) THEN
        WRITE(74,*) "ITEMPV1 not equal to ITEMPV2"
        RETURN
      ENDIF
C
c     WRITE(74,*) NDSETGV1,NNODG,DTV1,NSTEMP1,ITEMPV1
C
      DO J=1,NDSETGV1
C
         READ(54,2120) TIMEOUTV1,ITV1
         READ(64,2120) TIMEOUTV2,ITV2
C
         IF (ABS(TIMEOUTV1-TIMEOUTV2).GT.1.0E-5) THEN
           WRITE(74,*) "TIMEOUTV1 not equal to TIMEOUTV2"
           RETURN
         ENDIF
C
        IF (ITV1.NE.ITV2) THEN
          WRITE(74,*) "ITV1 not equal to ITV2"
          RETURN
        ENDIF
C
C       WRITE(74,*) TIMEOUTV1,ITV1
C
         DO I=1, NNODG
            READ(54,*) IDUM,UU1(I),VV1(I)
            READ(64,*) IDUM,UU2(I),VV2(I)
            ERR = SQRT(((UU1(I)-UU2(I))**2+(VV1(I)-VV2(I))**2))
            IF (ERR.GT.TOL) WRITE(74,*) TIMEOUTV1,
     &        I,UU1(I),UU2(I),VV1(I),VV2(I)
         ENDDO
C
      ENDDO                 
      GO TO 9999
C 
2000  CONTINUE
C
C--Open Both Global Direct Access Binary fort.64 files
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(54,FILE=FNAME1,ACCESS='DIRECT',RECL=NBYTE)
        OPEN(64,FILE=FNAME2,ACCESS='DIRECT',RECL=NBYTE)
        OPEN(UNIT=74,FILE=FNAME3)
      ELSE
        print *, "No fort.64 files found"
        RETURN
      ENDIF
C
C--Read RUNDES RUNID and AGRID from 1st Global File
C
      IREC1 = 0
      IF (NBYTE.EQ.4) THEN
        DO I=1,8
           READ(54,REC=IREC1+I) RDES4(I)
        ENDDO
        IREC1=IREC1+8
        DO I=1,6
           READ(54,REC=IREC1+I) RID4(I)
        ENDDO
        IREC1=IREC1+6
        DO I=1,6
           READ(54,REC=IREC1+I) AID4(I)
        ENDDO
        IREC1=IREC1+6
      ENDIF
      IF (NBYTE.EQ.8) THEN
        DO I=1,4
           READ(54,REC=IREC1+I) RDES8(I)
        ENDDO
        IREC1=IREC1+4
        DO I=1,3
           READ(54,REC=IREC1+I) RID8(I)
        ENDDO
        IREC1=IREC1+3
        DO I=1,3
           READ(54,REC=IREC1+I) AID8(I)
        ENDDO
        IREC1=IREC1+3
      ENDIF
C
C--Read RUNDES RUNID and AGRID from 2nd Global File
C
      IREC2 = 0
      IF (NBYTE.EQ.4) THEN
        DO I=1,8
           READ(64,REC=IREC2+I) RDES4(I)
        ENDDO
        IREC2=IREC2+8
        DO I=1,6
           READ(64,REC=IREC2+I) RID4(I)
        ENDDO
        IREC2=IREC2+6
        DO I=1,6
           READ(64,REC=IREC2+I) AID4(I)
        ENDDO
        IREC2=IREC2+6
      ENDIF
      IF (NBYTE.EQ.8) THEN
        DO I=1,4
           READ(64,REC=IREC2+I) RDES8(I)
        ENDDO
        IREC2=IREC2+4
        DO I=1,3
           READ(64,REC=IREC2+I) RID8(I)
        ENDDO
        IREC2=IREC2+3
        DO I=1,3
           READ(64,REC=IREC2+I) AID8(I)
        ENDDO
        IREC2=IREC2+3
      ENDIF
C
c     IF (NBYTE.EQ.4) THEN
c       WRITE(74,*) RDES4
c       WRITE(74,*) RID4
c       WRITE(74,*) AID4
c     ELSE
c       WRITE(74,*) RDES8
c       WRITE(74,*) RID8
c       WRITE(74,*) AID8
c     ENDIF
C
C--Read NTRSPE, NSTAE, DT*NSPOOLE from both files
C  and then close both files to flush file buffers
C
      READ(54,REC=IREC1+1) NDSETGV1
      READ(54,REC=IREC1+2) NP1
      READ(54,REC=IREC1+3) DTV1
      READ(54,REC=IREC1+4) NSTEMP1
      READ(54,REC=IREC1+5) ITEMPV1
      IREC1 = IREC1+5
C
      READ(64,REC=IREC2+1) NDSETGV2
      READ(64,REC=IREC2+2) NP2
      READ(64,REC=IREC2+3) DTV2
      READ(64,REC=IREC2+4) NSTEMP2
      READ(64,REC=IREC2+5) ITEMPV2
      IREC2 = IREC2+5
C
      CLOSE(54)         ! Flush File Buffer for file 1
      CLOSE(64)         ! Flush File buffer for file 2
      OPEN(54,FILE=FNAME1,ACCESS='DIRECT',RECL=NBYTE)
      OPEN(64,FILE=FNAME2,ACCESS='DIRECT',RECL=NBYTE)
C
      DO J=1,NDSETGV1
C
         READ(54,REC=IREC1+1) TIMEOUTV1
         READ(54,REC=IREC1+2) ITV1
         IREC1 = IREC1+2
C
         READ(64,REC=IREC2+1) TIMEOUTV2
         READ(64,REC=IREC2+2) ITV2
         IREC2 = IREC2+2
C
         DO I=1, NNODG
            READ(54,REC=IREC1+2*I-1) UU1(I)
            READ(54,REC=IREC1+2*I)   VV1(I)
            READ(64,REC=IREC2+2*I-1) UU2(I)
            READ(64,REC=IREC2+2*I)   VV2(I)
            ERR = SQRT(((UU1(I)-UU2(I))**2+(VV1(I)-VV2(I))**2))
            IF (ERR.GT.TOL) WRITE(74,*) TIMEOUTV1,
     &        I,UU1(I),UU2(I),VV1(I),VV2(I)
         ENDDO
         IREC1 = IREC1 + 2*NNODG
         IREC2 = IREC2 + 2*NNODG
C
      ENDDO                 
C
C--Close both Global fort.64 Files and Differences Log file
C
9999  CONTINUE
      CLOSE(54)
      CLOSE(64)
      CLOSE(74)
C
   80 FORMAT(A40)
 2120 FORMAT(2X,E20.10,5X,I10)
 3645 FORMAT(1X,I10,1X,I10,1X,E15.7,1X,I5,1X,I5)
C
      RETURN
      END

      SUBROUTINE COMPARE51(DIR1,DIR2,TOL)
C
C---------------------------------------------------------------------------C
C                     (  Serial Version  3/28/98  )                         C 
C  Compare the harmonic data at the elevation stations from two different   C
C  directories.                                                             C
C  This version is compatible with ADCIRC version 33.04                     C
C                                                                           C
C  Input Parameters:                                                        C
C                                                                           C
C    DIR1  =  pathname of first directory                                   C
C    DIR2  =  pathname of second directory                                  C
C    TOL   =  user supplied relative error tolerance                        C
C                                                                           C
C---------------------------------------------------------------------------C
C
      USE POST_GLOBAL
      INTEGER I,J,IPROC,IDUM
      INTEGER NFREQ1,NFREQ2,NUMSTNS
      INTEGER LEN1,LEN2
      REAL(SZ) TOL,ERR !jgf45.07 ERR is a fortran keyword...
      REAL(SZ) MAG1,MAG2,PHAS1,PHAS2
      CHARACTER*80  DIR1,DIR2,FNAME1,FNAME2,FNAME3
      CHARACTER*80  INLINE,HEADER1,HEADER2
      LOGICAL FOUND1,FOUND2

      CHARACTER*80,ALLOCATABLE  ::  HARDAT1(:),HARDAT2(:)
      ALLOCATE ( HARDAT1(MNSTAE),HARDAT2(MNSTAE))
C
C--Construct File Names
C
      DO I=1, LEN(DIR1)
         IF (DIR1(I:I).EQ.' ') THEN
           LEN1 = I-1
           GO TO 100
         ENDIF
      ENDDO
100   CONTINUE
      DO I=1, LEN(DIR2)
         IF (DIR2(I:I).EQ.' ') THEN
           LEN2 = I-1
           GO TO 200
         ENDIF
      ENDDO
200   CONTINUE
C
      FNAME1 = DIR1(1:LEN1)//'/fort.51'
      FNAME2 = DIR2(1:LEN2)//'/fort.51'
      FNAME3 = 'diffs.51'
C
C--Open Global Sequential Formatted fort.51 files and Differences Log file
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(UNIT=51,FILE=FNAME1)
        OPEN(UNIT=61,FILE=FNAME2)
        OPEN(UNIT=71,FILE=FNAME3)
      ELSE
        print *, "No fort.51 files found"
        RETURN
      ENDIF
C
      READ(51,'(A80)')  INLINE
      READ(INLINE,*) NFREQ1
c     WRITE(71,'(A80)') INLINE
      READ(61,'(A80)')  INLINE
      READ(INLINE,*) NFREQ2
c     WRITE(71,'(A80)') INLINE
      IF (NFREQ1.NE.NFREQ2) THEN
        WRITE(71,*) "NFREQ different in the two fort.51 files"
        RETURN
      ELSE
c     WRITE(71,'(A80)') INLINE
      ENDIF
C
      DO I=1, NFREQ1
         READ(51,'(A80)') HEADER1
         READ(61,'(A80)') HEADER2
      ENDDO
      READ(51,*) NUMSTNS
      READ(61,*) NUMSTNS
C
      DO J=1,NSTAE
         READ(51,*) IDUM
         READ(61,*) IDUM
         DO I=1, NFREQ1
            READ(51,'(A80)') HARDAT1(J)
            READ(HARDAT1(J),*) MAG1,PHAS1
            READ(61,'(A80)') HARDAT2(J)
            READ(HARDAT2(J),*) MAG2,PHAS2
            IF ((ABS(MAG1-MAG2).GT.TOL)
     &        .OR.(ABS(PHAS1-PHAS2).GT.TOL)) THEN
              WRITE(71,*)  "difference at elevation station ",J
              WRITE(71,'(A80)') HARDAT1(J)
              WRITE(71,'(A80)') HARDAT2(J)
            ENDIF
         ENDDO
      ENDDO
C
C--Close the Global fort.51 Files and the Differences Log file
C
      CLOSE(51)
      CLOSE(61)
      CLOSE(71)
C
c6635 FORMAT(2X,E16.8,1X,F11.4)

C
      RETURN
      END

      SUBROUTINE COMPARE52(DIR1,DIR2,TOL)
C
C---------------------------------------------------------------------------C
C                     (  Serial Version  3/28/98  )                         C 
C  Compare the harmonic data at the velocity stations from two different    C
C  directories.                                                             C
C  This version is compatible with ADCIRC version 33.04                     C
C                                                                           C
C  Input Parameters:                                                        C
C                                                                           C
C    DIR1  =  pathname of first directory                                   C
C    DIR2  =  pathname of second directory                                  C
C    TOL   =  user supplied relative error tolerance                        C
C                                                                           C
C---------------------------------------------------------------------------C
C
      USE POST_GLOBAL
      INTEGER I,J,IPROC,IDUM
      INTEGER NFREQ1,NFREQ2,NUMSTNS
      INTEGER LEN1,LEN2
      REAL(SZ) TOL,ERR !jgf45.07 ERR is a fortran keyword...
      REAL(SZ) UMAG1,UMAG2,VMAG1,VMAG2
      REAL(SZ) UPH1,UPH2,VPH1,VPH2
      CHARACTER*80  DIR1,DIR2,FNAME1,FNAME2,FNAME3
      CHARACTER*80  INLINE,HEADER1,HEADER2
      LOGICAL FOUND1,FOUND2

      CHARACTER*80,ALLOCATABLE  ::  HARDAT1(:),HARDAT2(:)
      ALLOCATE ( HARDAT1(MNSTAE),HARDAT2(MNSTAE))
C
C--Construct File Names
C
      DO I=1, LEN(DIR1)
         IF (DIR1(I:I).EQ.' ') THEN
           LEN1 = I-1
           GO TO 100
         ENDIF
      ENDDO
100   CONTINUE
      DO I=1, LEN(DIR2)
         IF (DIR2(I:I).EQ.' ') THEN
           LEN2 = I-1
           GO TO 200
         ENDIF
      ENDDO
200   CONTINUE
C
      FNAME1 = DIR1(1:LEN1)//'/fort.52'
      FNAME2 = DIR2(1:LEN2)//'/fort.52'
      FNAME3 = 'diffs.52'
C
C--Open Global Sequential Formatted fort.52 files and Differences Log file
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(UNIT=52,FILE=FNAME1)    
        OPEN(UNIT=62,FILE=FNAME2)    
        OPEN(UNIT=72,FILE=FNAME3)    
      ELSE
        print *, "No fort.52 files found"
        RETURN
      ENDIF
C
      READ(52,'(A80)')  INLINE
      READ(INLINE,*) NFREQ1
c     WRITE(72,'(A80)') INLINE
      READ(62,'(A80)')  INLINE
      READ(INLINE,*) NFREQ2
c     WRITE(72,'(A80)') INLINE
      IF (NFREQ1.NE.NFREQ2) THEN
        WRITE(72,*) "NFREQ different in the two fort.52 files"
        RETURN
      ELSE
c     WRITE(72,'(A80)') INLINE
      ENDIF
C
      DO I=1, NFREQ1
         READ(52,'(A80)') HEADER1
         READ(62,'(A80)') HEADER2
      ENDDO
C
      READ(52,*) NUMSTNS
      READ(62,*) NUMSTNS
C
      DO J=1,NSTAV
         READ(52,*) IDUM
         READ(62,*) IDUM
         DO I=1, NFREQ1
            READ(52,'(A80)') HARDAT1(J)
            READ(HARDAT1(J),*) UMAG1,UPH1,VMAG1,VPH1
            READ(62,'(A80)') HARDAT2(J)
            READ(HARDAT2(J),*) UMAG2,UPH2,VMAG2,VPH2
            IF ((ABS(UMAG1-UMAG2).GT.TOL)
     &       .OR.(ABS(UPH1-UPH2).GT.TOL)
     &       .OR.(ABS(VMAG1-VMAG2).GT.TOL)
     &       .OR.(ABS(VPH1-VPH2).GT.TOL)) THEN
             WRITE(72,*) "difference at velocity station ",J
             WRITE(72,'(A80)') HARDAT1(J)
             WRITE(72,'(A80)') HARDAT2(J)
            ENDIF
         ENDDO
      ENDDO
C
C--Close the Global fort.52 Files and the Differences Log file
C
      CLOSE(52)
      CLOSE(62)
      CLOSE(72)
C
c3679 FORMAT(1X,E20.10,1X,F10.7,1X,F12.8,1X,A10)
c6636 format(2x,e16.8,1x,f11.4,2x,e16.8,1x,f11.4)
C
      RETURN
      END

      SUBROUTINE COMPARE53(DIR1,DIR2,TOL)
C
C---------------------------------------------------------------------------C
C                     (  Serial Version  3/28/98  )                         C 
C  Compare the harmonic constituent elevations at all nodes from two        C
C  different directories.                                                   C
C  This version is compatible with ADCIRC version 33.04                     C
C                                                                           C
C  Input Parameters:                                                        C
C                                                                           C
C    DIR1  =  pathname of first directory                                   C
C    DIR2  =  pathname of second directory                                  C
C    TOL   =  user supplied relative error tolerance                        C
C                                                                           C
C---------------------------------------------------------------------------C
C
      USE POST_GLOBAL
      INTEGER I,J,IPROC,IDUM
      INTEGER NFREQ1,NFREQ2,NP1,NP2
      INTEGER LEN1,LEN2
      REAL(SZ) TOL,ERR !jgf45.07 ERR is a fortran keyword...
      REAL(SZ) MAG1,MAG2,PHAS1,PHAS2
      CHARACTER*80  DIR1,DIR2,FNAME1,FNAME2,FNAME3
      CHARACTER*80  INLINE,HEADER1,HEADER2
      LOGICAL FOUND1,FOUND2

      CHARACTER*80,ALLOCATABLE  ::   HARDAT1(:),HARDAT2(:)
      ALLOCATE (HARDAT1(MNP),HARDAT2(MNP))
C
C--Construct File Names
C
      DO I=1, LEN(DIR1)
         IF (DIR1(I:I).EQ.' ') THEN
           LEN1 = I-1
           GO TO 100
         ENDIF
      ENDDO
100   CONTINUE
      DO I=1, LEN(DIR2)
         IF (DIR2(I:I).EQ.' ') THEN
           LEN2 = I-1
           GO TO 200
         ENDIF
      ENDDO
200   CONTINUE
C
      FNAME1 = DIR1(1:LEN1)//'/fort.53'
      FNAME2 = DIR2(1:LEN2)//'/fort.53'
      FNAME3 = 'diffs.53'
C
C--Open Global Sequential Formatted fort.53 files and Differences Log file
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(UNIT=53,FILE=FNAME1)    
        OPEN(UNIT=63,FILE=FNAME2)    
        OPEN(UNIT=73,FILE=FNAME3)    
      ELSE
        print *, "No fort.53 files found"
        RETURN
      ENDIF
C
      READ(53,'(A80)')  INLINE
      READ(INLINE,*) NFREQ1
c     WRITE(73,'(A80)') INLINE
      READ(63,'(A80)')  INLINE
      READ(INLINE,*) NFREQ2
c     WRITE(73,'(A80)') INLINE
      IF (NFREQ1.NE.NFREQ2) THEN
        WRITE(73,*) "NFREQ different in the two fort.53 files"
        RETURN
      ELSE
c     WRITE(73,'(A80)') INLINE
      ENDIF
C
      DO I=1, NFREQ1
         READ(53,'(A80)') HEADER1
         READ(63,'(A80)') HEADER2
      ENDDO
      READ(53,*) NP1     
      READ(63,*) NP2 
C
      DO J=1,NNODG
         READ(53,*) IDUM
         READ(63,*) IDUM
         DO I=1, NFREQ1
            READ(53,'(A80)') HARDAT1(J)
            READ(HARDAT1(J),*) MAG1,PHAS1
            READ(63,'(A80)') HARDAT2(J)
            READ(HARDAT2(J),*) MAG2,PHAS2
            IF ((ABS(MAG1-MAG2).GT.TOL)
     &        .OR.(ABS(PHAS1-PHAS2).GT.TOL)) THEN
              WRITE(73,*) "elevation difference at node ",J
              WRITE(73,'(A80)') HARDAT1(J)
              WRITE(73,'(A80)') HARDAT2(J)
            ENDIF
         ENDDO
      ENDDO
C
C--Close the Global fort.53 Files and the Differences Log file
C
      CLOSE(53)
      CLOSE(63)
      CLOSE(73)
C
c3679 FORMAT(1X,E20.10,1X,F10.7,1X,F12.8,1X,A10)
C
      RETURN
      END


      SUBROUTINE COMPARE54(DIR1,DIR2,TOL)
C
C---------------------------------------------------------------------------C
C                     (  Serial Version  3/28/98  )                         C 
C  Compare the harmonic constituent velocities at all nodes from two        C
C  different directories.                                                   C
C  This version is compatible with ADCIRC version 33.04                     C
C                                                                           C
C  Input Parameters:                                                        C
C                                                                           C
C    DIR1  =  pathname of first directory                                   C
C    DIR2  =  pathname of second directory                                  C
C    TOL   =  user supplied relative error tolerance                        C
C                                                                           C
C---------------------------------------------------------------------------C
C
      USE POST_GLOBAL
      INTEGER I,J,IPROC,IDUM
      INTEGER NFREQ1,NFREQ2,NP1,NP2
      INTEGER LEN1,LEN2
      REAL(SZ) TOL,ERR !jgf45.07 ERR is a fortran keyword...
      REAL(SZ) UMAG1,UMAG2,VMAG1,VMAG2
      REAL(SZ) UPH1,UPH2,VPH1,VPH2
      CHARACTER*80  DIR1,DIR2,FNAME1,FNAME2,FNAME3
      CHARACTER*80  INLINE,HEADER1,HEADER2
      LOGICAL FOUND1,FOUND2

      CHARACTER*80,ALLOCATABLE  ::  HARDAT1(:),HARDAT2(:)
      ALLOCATE ( HARDAT1(MNP),HARDAT2(MNP))
C
C--Construct File Names
C
      DO I=1, LEN(DIR1)
         IF (DIR1(I:I).EQ.' ') THEN
           LEN1 = I-1
           GO TO 100
         ENDIF
      ENDDO
100   CONTINUE
      DO I=1, LEN(DIR2)
         IF (DIR2(I:I).EQ.' ') THEN
           LEN2 = I-1
           GO TO 200
         ENDIF
      ENDDO
200   CONTINUE
C
      FNAME1 = DIR1(1:LEN1)//'/fort.54'
      FNAME2 = DIR2(1:LEN2)//'/fort.54'
      FNAME3 = 'diffs.54'
C
C--Open Global Sequential Formatted fort.54 files and Differences Log file
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(UNIT=54,FILE=FNAME1)    
        OPEN(UNIT=64,FILE=FNAME2)    
        OPEN(UNIT=74,FILE=FNAME3)    
      ELSE
        print *, "No fort.54 files found"
        RETURN
      ENDIF
C
      READ(54,'(A80)')  INLINE
      READ(INLINE,*) NFREQ1
c     WRITE(74,'(A80)') INLINE
      READ(64,'(A80)')  INLINE
      READ(INLINE,*) NFREQ2
c     WRITE(74,'(A80)') INLINE
      IF (NFREQ1.NE.NFREQ2) THEN
        WRITE(74,*) "NFREQ different in the two fort.54 files"
        RETURN
      ELSE
c     WRITE(74,'(A80)') INLINE
      ENDIF
C
      DO I=1, NFREQ1
         READ(54,'(A80)') HEADER1
         READ(64,'(A80)') HEADER2
      ENDDO
C
      READ(54,*) NP1     
      READ(64,*) NP2 
C
      DO J=1,NNODG
         READ(54,*) IDUM
         READ(64,*) IDUM
         DO I=1, NFREQ1
            READ(54,'(A80)') HARDAT1(J)
            READ(HARDAT1(J),*) UMAG1,UPH1,VMAG1,VPH1
            READ(64,'(A80)') HARDAT2(J)
            READ(HARDAT2(J),*) UMAG2,UPH2,VMAG2,VPH2
            IF ((ABS(UMAG1-UMAG2).GT.TOL)
     &        .OR.(ABS(UPH1-UPH2).GT.TOL)
     &        .OR.(ABS(VMAG1-VMAG2).GT.TOL)
     &        .OR.(ABS(VPH1-VPH2).GT.TOL)) THEN
              WRITE(74,*) "velocity difference at node ",J
              WRITE(74,'(A80)') HARDAT1(J)
              WRITE(74,'(A80)') HARDAT2(J)
            ENDIF
         ENDDO
      ENDDO
C
C--Close the Global fort.54 Files and the Differences Log file
C
      CLOSE(54)
      CLOSE(64)
      CLOSE(74)
C
      RETURN
      END

      SUBROUTINE COMPARE55(DIR1,DIR2,TOL)
C
C---------------------------------------------------------------------------C
C                     (  Serial Version  4/13/98  )                         C 
C  Compare the harmonic constituent comparison files from two directories.  C
C  This version is compatible with ADCIRC version 33.04                     C
C                                                                           C
C  Input Parameters:                                                        C
C                                                                           C
C    DIR1  =  pathname of first directory                                   C
C    DIR2  =  pathname of second directory                                  C
C    TOL   =  user supplied relative error tolerance                        C
C                                                                           C
C---------------------------------------------------------------------------C
C
      USE POST_GLOBAL
      INTEGER I,J,IPROC,IDUM
      INTEGER LEN1,LEN2
      INTEGER NP1,NP2
      REAL(SZ) TOL,ERR !jgf45.07 ERR is a fortran keyword
      REAL(SZ) ELAV1,ELAV2
      REAL(SZ) EAV1,EAV2
      REAL(SZ) EAVDIF1,EAVDIF2
      REAL(SZ) ELVA1,ELVA2
      REAL(SZ) ESQ1,ESQ2
      REAL(SZ) EVADIF1,EVADIF2
      REAL(SZ) XVELAV1,XVELAV2
      REAL(SZ) UAV1,UAV2
      REAL(SZ) UAVDIF1,UAVDIF2
      REAL(SZ) XVELVA1,XVELVA2
      REAL(SZ) USQ1,USQ2
      REAL(SZ) UVADIF1,UVADIF2
      REAL(SZ) YVELAV1,YVELAV2
      REAL(SZ) VAV1,VAV2
      REAL(SZ) VAVDIF1,VAVDIF2
      REAL(SZ) YVELVA1,YVELVA2
      REAL(SZ) VSQ1,VSQ2
      REAL(SZ) VVADIF1,VVADIF2
      CHARACTER*80  DIR1,DIR2,FNAME1,FNAME2,FNAME3
      CHARACTER*114 ELEV1,ELEV2
      CHARACTER*114 UU1,VV1,UU2,VV2
      LOGICAL FOUND1,FOUND2
C
C--Construct File Names
C
      DO I=1, LEN(DIR1)
         IF (DIR1(I:I).EQ.' ') THEN
           LEN1 = I-1
           GO TO 100
         ENDIF
      ENDDO
100   CONTINUE
      DO I=1, LEN(DIR2)
         IF (DIR2(I:I).EQ.' ') THEN
           LEN2 = I-1
           GO TO 200
         ENDIF
      ENDDO
200   CONTINUE
C
      FNAME1 = DIR1(1:LEN1)//'/fort.55'
      FNAME2 = DIR2(1:LEN2)//'/fort.55'
      FNAME3 = 'diffs.55'
C
C--Open Global Sequential Formatted fort.55 files and Differences Log file
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(UNIT=55,FILE=FNAME1)    
        OPEN(UNIT=65,FILE=FNAME2)    
        OPEN(UNIT=75,FILE=FNAME3)    
      ELSE
        print *, "No fort.55 files found"
        RETURN
      ENDIF
C
      READ(55,*) NP1     
      READ(65,*) NP2 
C
      DO J=1,NNODG
         READ(55,*) IDUM 
         READ(65,*) IDUM 
C
         READ(55,'(A114)') ELEV1
         READ(ELEV1,*) ELAV1,EAV1,EAVDIF1,ELVA1,ESQ1,EVADIF1
C
         READ(65,'(A114)') ELEV2
         READ(ELEV2,*) ELAV2,EAV2,EAVDIF2,ELVA2,ESQ2,EVADIF2
C
         IF ((ABS(ELAV1-ELAV2).GT.TOL)
     &   .OR.(ABS(EAV1-EAV2).GT.TOL)      
     &   .OR.(ABS(EAVDIF1-EAVDIF2).GT.TOL)
     &   .OR.(ABS(ELVA1-ELVA2).GT.TOL)
     &   .OR.(ABS(ESQ1-ESQ2).GT.TOL)
     &   .OR.(ABS(EVADIF1-EVADIF2).GT.TOL)) THEN
           WRITE(75,*) "elevation difference at node ",J
           WRITE(75,'(A114)') ELEV1       
           WRITE(75,'(A114)') ELEV2       
         ENDIF
      ENDDO
C
      DO J=1,NNODG
         READ(55,*) IDUM
         READ(55,'(A114)') UU1
         READ(55,'(A114)') VV1
         READ(UU1,*) XVELAV1,UAV1,UAVDIF1,XVELVA1,USQ1,UVADIF1
         READ(VV1,*) YVELAV1,VAV1,VAVDIF1,YVELVA1,VSQ1,VVADIF1
C
         READ(65,*) IDUM 
         READ(65,'(A114)') UU2
         READ(65,'(A114)') VV2
         READ(UU2,*) XVELAV2,UAV2,UAVDIF2,XVELVA2,USQ2,UVADIF2
         READ(VV2,*) YVELAV2,VAV2,VAVDIF2,YVELVA2,VSQ2,VVADIF2
C
         IF ((ABS(XVELAV1-XVELAV2).GT.TOL)
     &   .OR.(ABS(UAV1-UAV2).GT.TOL)      
     &   .OR.(ABS(UAVDIF1-UAVDIF2).GT.TOL)
     &   .OR.(ABS(XVELVA1-XVELVA2).GT.TOL)
     &   .OR.(ABS(USQ1-USQ2).GT.TOL)
     &   .OR.(ABS(UVADIF1-UVADIF2).GT.TOL)
C
     &   .OR.(ABS(YVELAV1-YVELAV2).GT.TOL)
     &   .OR.(ABS(VAV1-VAV2).GT.TOL)      
     &   .OR.(ABS(VAVDIF1-VAVDIF2).GT.TOL)
     &   .OR.(ABS(YVELVA1-YVELVA2).GT.TOL)
     &   .OR.(ABS(VSQ1-VSQ2).GT.TOL)
     &   .OR.(ABS(VVADIF1-VVADIF2).GT.TOL)) THEN
C
           WRITE(75,*) "velocity difference at node ",J
           WRITE(75,'(A114)') UU1         
           WRITE(75,'(A114)') VV1         
           WRITE(75,'(A114)') UU2         
           WRITE(75,'(A114)') VV2         
         ENDIF
      ENDDO
C
C
C--Close the Global fort.55 Files and the Differences Log file
C
      CLOSE(55)
      CLOSE(65)
      CLOSE(75)
C
      RETURN
      END

      SUBROUTINE COMPARE74(DIR1,DIR2,TOL)
C
C---------------------------------------------------------------------------C
C                     (  Serial Version  3/28/98  )                         C 
C  Compare Wind Stress data at all nodes from two different directories.    C
C  This version is compatible with ADCIRC version 33.04                     C
C                                                                           C
C  Input Parameters:                                                        C
C                                                                           C
C    DIR1  =  pathname of first directory                                   C
C    DIR2  =  pathname of second directory                                  C
C    TOL   =  user supplied relative error tolerance                        C
C                                                                           C
C---------------------------------------------------------------------------C
C
      USE POST_GLOBAL
      INTEGER I,J,K,L,IPROC,IDUM
      INTEGER NDSETGV1,NDSETGV2
      INTEGER NSTEMP1,NSTEMP2
      INTEGER ITV1,ITV2
      INTEGER ITEMPV1,ITEMPV2
      INTEGER NP1,NP2 
      INTEGER IREC1,IREC2
      INTEGER LEN1,LEN2
      REAL(SZ) DTV1,DTV2
      REAL(8) TIMEOUTV1,TIMEOUTV2
      REAL(SZ) TOL,ERR !jgf45.07 ERR is a fortran keyword...
      CHARACTER*80  DIR1,DIR2,FNAME1,FNAME2,FNAME3
      CHARACTER*85  INLINE
      CHARACTER*4 RDES4(8),RID4(6),AID4(6)
      CHARACTER*8 RDES8(8),RID8(6),AID8(6)
      LOGICAL FOUND1,FOUND2

      REAL(8),ALLOCATABLE :: UU1(:),VV1(:)
      REAL(8),ALLOCATABLE :: UU2(:),VV2(:)

      ALLOCATE ( UU1(MNP),VV1(MNP))
      ALLOCATE ( UU2(MNP),VV2(MNP))
C
C--Construct File Names
C
      DO I=1, LEN(DIR1)
         IF (DIR1(I:I).EQ.' ') THEN
           LEN1 = I-1
           GO TO 100
         ENDIF
      ENDDO
100   CONTINUE
      DO I=1, LEN(DIR2)
         IF (DIR2(I:I).EQ.' ') THEN
           LEN2 = I-1
           GO TO 200
         ENDIF
      ENDDO
200   CONTINUE
C
      FNAME1 = DIR1(1:LEN1)//'/fort.74'
      FNAME2 = DIR2(1:LEN2)//'/fort.74'
      FNAME3 = 'diffs.74'
C
C--Determine whether Unit 74 is Sequential Formatted or Direct Access Binary
C
      IF (ABS(NOUTGW).EQ.1) THEN
        GO TO 1000
      ELSE
        GO TO 2000
      ENDIF
C
1000  CONTINUE
C
C--Open Both Global Sequential Formatted fort.74 files
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
         OPEN(UNIT=54,FILE=FNAME1)
        OPEN(UNIT=64,FILE=FNAME2)
        OPEN(UNIT=74,FILE=FNAME3)
      ELSE
        print *, "No fort.64 files found"
        RETURN
      ENDIF
C
      READ (54,'(A85)') INLINE
c     WRITE(74,'(A85)')  INLINE
      READ (64,'(A85)') INLINE
c     WRITE(74,'(A85)')  INLINE
C
      READ (54,3645) NDSETGV1,NP1,DTV1,NSTEMP1,ITEMPV1
      READ (64,3645) NDSETGV2,NP2,DTV2,NSTEMP2,ITEMPV2
C
      IF (NDSETGV1.NE.NDSETGV2) THEN
         WRITE(74,*) "NDSETGV1 not equal to NDSETGV2"
         RETURN
      ENDIF
C
      IF (NP1.NE.NP2) THEN
        WRITE(74,*) "NP1 not equal to NP2"
        RETURN
      ENDIF
C
      IF (ABS(DTV1-DTV2).GT.1.0E-5) THEN
        WRITE(74,*)  "DTV1 not equal to DTV2"
        RETURN
      ENDIF
C
      IF (NSTEMP1.NE.NSTEMP2) THEN
        WRITE(74,*) "NSTEMP1 not equal to NSTEMP2"
        RETURN
      ENDIF
      IF (ITEMPV1.NE.ITEMPV2) THEN
        WRITE(74,*) "ITEMPV1 not equal to ITEMPV2"
        RETURN
      ENDIF
C
c     WRITE(74,*) NDSETGV1,NNODG,DTV1,NSTEMP1,ITEMPV1
C
      DO J=1,NDSETGV1
C
         READ(54,2120) TIMEOUTV1,ITV1
         READ(64,2120) TIMEOUTV2,ITV2
C
         IF (ABS(TIMEOUTV1-TIMEOUTV2).GT.1.0E-5) THEN
           WRITE(74,*) "TIMEOUTV1 not equal to TIMEOUTV2"
           RETURN
         ENDIF
C
        IF (ITV1.NE.ITV2) THEN
          WRITE(74,*) "ITV1 not equal to ITV2"
          RETURN
        ENDIF
C
C       WRITE(74,*) TIMEOUTV1,ITV1
C
         DO I=1, NNODG
            READ(54,*) IDUM,UU1(I),VV1(I)
            READ(64,*) IDUM,UU2(I),VV2(I)
            ERR = SQRT(((UU1(I)-UU2(I))**2+(VV1(I)-VV2(I))**2))
            IF (ERR.GT.TOL) WRITE(74,*) I,UU1(I),UU2(I),VV1(I),VV2(I)
         ENDDO
C
      ENDDO                 
      GO TO 9999
C 
2000  CONTINUE
C
C--Open Both Global Direct Access Binary fort.64 files
C
      INQUIRE(FILE=FNAME1,EXIST=FOUND1)
      INQUIRE(FILE=FNAME2,EXIST=FOUND2)
      IF (FOUND1.AND.FOUND2) THEN
        OPEN(54,FILE=FNAME1,ACCESS='DIRECT',RECL=NBYTE)
        OPEN(64,FILE=FNAME2,ACCESS='DIRECT',RECL=NBYTE)
        OPEN(UNIT=74,FILE=FNAME3)
      ELSE
        print *, "No fort.64 files found"
        RETURN
      ENDIF
C
C--Read RUNDES RUNID and AGRID from 1st Global File
C
      IREC1 = 0
      IF (NBYTE.EQ.4) THEN
        DO I=1,8
           READ(54,REC=IREC1+I) RDES4(I)
        ENDDO
        IREC1=IREC1+8
        DO I=1,6
           READ(54,REC=IREC1+I) RID4(I)
        ENDDO
        IREC1=IREC1+6
        DO I=1,6
           READ(54,REC=IREC1+I) AID4(I)
        ENDDO
        IREC1=IREC1+6
      ENDIF
      IF (NBYTE.EQ.8) THEN
        DO I=1,4
           READ(54,REC=IREC1+I) RDES8(I)
        ENDDO
        IREC1=IREC1+4
        DO I=1,3
           READ(54,REC=IREC1+I) RID8(I)
        ENDDO
        IREC1=IREC1+3
        DO I=1,3
           READ(54,REC=IREC1+I) AID8(I)
        ENDDO
        IREC1=IREC1+3
      ENDIF
C
C--Read RUNDES RUNID and AGRID from 2nd Global File
C
      IREC2 = 0
      IF (NBYTE.EQ.4) THEN
        DO I=1,8
           READ(64,REC=IREC2+I) RDES4(I)
        ENDDO
        IREC2=IREC2+8
        DO I=1,6
           READ(64,REC=IREC2+I) RID4(I)
        ENDDO
        IREC2=IREC2+6
        DO I=1,6
           READ(64,REC=IREC2+I) AID4(I)
        ENDDO
        IREC2=IREC2+6
      ENDIF
      IF (NBYTE.EQ.8) THEN
        DO I=1,4
           READ(64,REC=IREC2+I) RDES8(I)
        ENDDO
        IREC2=IREC2+4
        DO I=1,3
           READ(64,REC=IREC2+I) RID8(I)
        ENDDO
        IREC2=IREC2+3
        DO I=1,3
           READ(64,REC=IREC2+I) AID8(I)
        ENDDO
        IREC2=IREC2+3
      ENDIF
C
c     IF (NBYTE.EQ.4) THEN
c       WRITE(74,*) RDES4
c       WRITE(74,*) RID4
c       WRITE(74,*) AID4
c     ELSE
c       WRITE(74,*) RDES8
c       WRITE(74,*) RID8
c       WRITE(74,*) AID8
c     ENDIF
C
C--Read NTRSPE, NSTAE, DT*NSPOOLE from both files
C  and then close both files to flush file buffers
C
      READ(54,REC=IREC1+1) NDSETGV1
      READ(54,REC=IREC1+2) NP1
      READ(54,REC=IREC1+3) DTV1
      READ(54,REC=IREC1+4) NSTEMP1
      READ(54,REC=IREC1+5) ITEMPV1
      IREC1 = IREC1+5
C
      READ(64,REC=IREC2+1) NDSETGV2
      READ(64,REC=IREC2+2) NP2
      READ(64,REC=IREC2+3) DTV2
      READ(64,REC=IREC2+4) NSTEMP2
      READ(64,REC=IREC2+5) ITEMPV2
      IREC2 = IREC2+5
C
      CLOSE(54)         ! Flush File Buffer for file 1
      CLOSE(64)         ! Flush File buffer for file 2
      OPEN(54,FILE=FNAME1,ACCESS='DIRECT',RECL=NBYTE)
      OPEN(64,FILE=FNAME2,ACCESS='DIRECT',RECL=NBYTE)
C
      DO J=1,NDSETGV1
C
         READ(54,REC=IREC1+1) TIMEOUTV1
         READ(54,REC=IREC1+2) ITV1
         IREC1 = IREC1+2
C
         READ(64,REC=IREC2+1) TIMEOUTV2
         READ(64,REC=IREC2+2) ITV2
         IREC2 = IREC2+2
C
         DO I=1, NNODG
            READ(54,REC=IREC1+2*I-1) UU1(I)
            READ(54,REC=IREC1+2*I)   VV1(I)
            READ(64,REC=IREC2+2*I-1) UU2(I)
            READ(64,REC=IREC2+2*I)   VV2(I)
            ERR = SQRT(((UU1(I)-UU2(I))**2+(VV1(I)-VV2(I))**2))
            IF (ERR.GT.TOL) WRITE(74,*) I,UU1(I),UU2(I),VV1(I),VV2(I)
         ENDDO
         IREC1 = IREC1 + 2*NNODG
         IREC2 = IREC2 + 2*NNODG
C
      ENDDO                 
C
C--Close both Global fort.64 Files and Differences Log file
C
9999  CONTINUE
      CLOSE(54)
      CLOSE(64)
      CLOSE(74)
C
   80 FORMAT(A40)
 2120 FORMAT(2X,E20.10,5X,I10)
 3645 FORMAT(1X,I10,1X,I10,1X,E15.7,1X,I5,1X,I5)
C
      RETURN
      END