C=======================================================================
Ctestglbave.f
C=======================================================================


        PROGRAM TESTGLBAVE
C***********************************************************************
C
C  THIS TEST PROGRAM READS THE CCDA FORMATTED GRID FILES AND DUMPS
C  OUT A 'SIMPLE' GLOBAL AVERAGE OF ALL THE POINTS.  IT IS AN EXAMPLE
C  FOR CALLING THE READING SUBROUTINE: CCDA_READ_NVAP (INCLUDED BELOW).
C
C  WRITTEN BY DAVE RANDEL  CIRA/CSU
C          IN OCTOBER 1994
c
c  modified for use by NVAP January 1995
C
C***********************************************************************
C
        REAL*4 SUM
        CHARACTER FLNAME*80,FLOUT*80, CGOOD(2)*6, DEC*1
        DATA CGOOD/'% GOOD','# GOOD'/
C
C-----COMMON BLOCK FOR PASSING DATA FROM GRID READING ROUTINES -----
C
        REAL*4 DATA(360,180), HEADR(4), ZINDEF
        INTEGER*2 HEADI(11)
        INTEGER*4 NFLD,ISTART,IEND
        CHARACTER LABEL*40
        COMMON /GRDDATA/ DATA,HEADR,ZINDEF,HEADI,LABEL
C
C-------------------------------------------------------------------
C
  1     FORMAT(A$)
  2     FORMAT(A)
  3     FORMAT(i2)
C
C**READ INPUT FILENAME**********
C
  5     WRITE(6,1)'               INPUT CCDA FILENAME : '
        READ(5,2) FLNAME
C
C**GET OUTPUT FILENAME
C
        WRITE(6,1)'     OUTPUT FILENAME [CCDAGLB.TXT] : '
        READ(5,2) FLOUT
        IF(FLOUT .EQ. ' ') FLOUT = 'CCDAGLB.TXT'
        OPEN(UNIT=2,FILE=FLOUT,ACCESS='SEQUENTIAL',STATUS='UNKNOWN',
     >       RECL=128,FORM='FORMATTED')
C
C**GET FIELD LISTING INFORMATION
C
        WRITE(6,*)
        WRITE(6,1)' USE ALL FIELDS IN FILE? (Y/N) [Y] : '
        READ(5,2)DEC
        IF(DEC .EQ. ' ') DEC = 'Y'
        IF(DEC .EQ. 'y') DEC = 'Y'
        IF(DEC .EQ. 'n') DEC = 'N'
        IF(DEC .EQ. 'N') THEN
              WRITE(6,1)'     START WITH FIELD NUMBER? : '
              READ(5,3) ISTART
              WRITE(6,1)' NUMBER OF FIELDS TO AVERAGE? : '
              READ(5,3) INUM
              IEND = ISTART + INUM - 1
        ELSE
              ISTART = 1
              IEND = 1000
        ENDIF
C
C**START SIMPLE (GLOBAL) AVERAGING PROCESS AND LISTING
C
        DO NFLD = ISTART,IEND
            CALL READ_NVAP(FLNAME,NFLD,ISTAT)    !READ DATA
            IF(ISTAT .NE. 0) THEN
                 IF(NFLD .EQ. 1) THEN
                      WRITE(6,*)'ERROR READING FIELD ',NFLD
                      STOP 10
                 ELSE
                      WRITE(6,*)(HEADI(J),J=1,6)
                      GO TO 20
                 ENDIF
            ELSE
                 WRITE(6,*)(HEADI(J),J=4,5)
            ENDIF
C
C***CALC SIMPLE AVERAGE - NOT REAL GLOBAL AVE SINCE NO AREA WEIGHTING
C
            SUM = 0.0
            RNGP = 0.0
            DO I = 1,HEADI(11)
              DO J = 1,HEADI(10)
                IF(DATA(J,I) .NE. ZINDEF) THEN
                     SUM = SUM + DATA(J,I)
                     RNGP = RNGP + 1
                ENDIF
              ENDDO
            ENDDO
            SUM = SUM / RNGP
C
C***OUTPUT RESULTS TO FILE
C
            GPERCNT = RNGP*100 / ( FLOAT(HEADI(10))*FLOAT(HEADI(11)) )
            IOUTLS = 1
            IF(GPERCNT .LT. 10.0) THEN
                   GPERCNT = RNGP
                   IOUTLS = 2
            ENDIF
C
            ICOUNT = ICOUNT + 1                       !WRITE OUT LISTING
            IF(ICOUNT .EQ. 1) THEN
              write(2,*)'INPUT FILENAME: ',FLNAME(1:60)
              WRITE(2,*)'FLD# SOURCE PARAM STRT DATE  END DATE  ',
     >                  '     GLOBAL  ', CGOOD(IOUTLS)
            ENDIF
     >
            WRITE(2,50)NFLD,HEADI(1),HEADI(2),(HEADI(J),J=4,9),
     >                 SUM, GPERCNT
 50         FORMAT(' ',I3,2X,I4,3X,I3,3X,I2,'/',I3.3,1X,I2.2,2X,I2,'/',
     >                 I3.3,1X,I2.2,1X,F10.2,2X,F6.1)
C
        ENDDO
C
 20     CONTINUE
C
       WRITE(6,*)
       WRITE(6,*)' GLOBAL AVERAGES DUMPED TO: ',FLOUT(1:40)
       STOP
       END
