eccodes/tests/readvalues.F

153 lines
3.6 KiB
Fortran

PROGRAM READVALUES
INTEGER IFILE
INTEGER GRIBID
INTEGER GRIBID2
INTEGER VALUE
INTEGER NARGS
INTEGER IRET
INTEGER IFILEN
INTEGER VALUESLEN
INTEGER J
INTEGER JCOUNT
INTEGER GRIB_OPEN_FILE
EXTERNAL GRIB_OPEN_FILE
INTEGER GRIB_CLONE
EXTERNAL GRIB_CLONE
EXTERNAL GRIB_PRINT
INTEGER GRIB_PRINT
INTEGER GRIB_CLOSE_FILE
INTEGER GRIB_NEW_FROM_FILE
INTEGER GRIB_NEW_FROM_TEMPLATE
INTEGER GRIB_SET_REAL8_ARRAY
INTEGER GRIB_SET_REAL4_ARRAY
INTEGER GRIB_SET_INT_ARRAY
INTEGER GRIB_GET_INT
INTEGER GRIB_SET_INT
INTEGER GRIB_GET_REAL8_ARRAY
INTEGER GRIB_RELEASE
EXTERNAL GRIB_CLOSE_FILE
EXTERNAL GRIB_NEW_FROM_FILE
EXTERNAL GRIB_NEW_FROM_TEMPLATE
EXTERNAL GRIB_GET_INT
EXTERNAL GRIB_SET_INT
EXTERNAL GRIB_GET_REAL8_ARRAY
EXTERNAL GRIB_SET_REAL8_ARRAY
EXTERNAL GRIB_SET_REAL4_ARRAY
EXTERNAL GRIB_SET_INT_ARRAY
EXTERNAL GRIB_RELEASE
INTEGER PVSIZE
INTEGER GRIB_WRITE_TO
EXTERNAL GRIB_WRITE_TO
INTEGER GRIB_GET_ERROR_STRING
EXTERNAL GRIB_GET_ERROR_STRING
INTEGER PLSIZE
CHARACTER*2 INPUT
CHARACTER*256 YDATAFILE
CHARACTER*256 MPARAM
CHARACTER*256 MERROR
REAL*8 VALUES(2048)
INTEGER PL(32)
REAL*8 PVSS(20)
REAL*8 VMAX
REAL*8 VMIN
IFILE = 0
IRET = 5
GRIBID = 0;
PVSIZE =20
PLSIZE =32
NARGS = IARGC()
VALUESLEN = 2048
CALL GETARG(1,INPUT)
IF(INPUT.EQ.'-i') THEN
CALL GETARG(2,YDATAFILE)
ELSE
print*,'Usage: readvalues -i inputfile'
STOP
END IF
JCOUNT = 0
IFILEN = INDEX(YDATAFILE,' ') - 1
IRET = GRIB_OPEN_FILE(IFILE, YDATAFILE (1: IFILEN),"r")
WRITE (*,*) "Opened returned ", IRET, IFILE
JCOUNT = 0
50 CONTINUE
JCOUNT = JCOUNT + 1
IRET = GRIB_NEW_FROM_TEMPLATE(GRIBID, "gg_ml")
C IRET = GRIB_NEW_FROM_FILE(IFILE,GRIBID)
C WRITE (*,*) "gribid ret ",IRET, IFILE
IF ( IRET .LT. 0 ) THEN
WRITE (*, *) 'total ', JCOUNT ,' ret = ', IRET
C IRET = GRIB_CLOSE_FILE(IFILE)
STOP 'no more gribs'
ENDIF
IF ( JCOUNT .GT. 1 ) THEN
WRITE (*, *) 'total ', JCOUNT ,' ret = ', IRET
IRET = GRIB_CLOSE_FILE(IFILE)
STOP 'no more gribs'
ENDIF
IRET = GRIB_GET_INT(GRIBID,"ni",VALUE)
WRITE (*,*) "NI ", VALUE , " ret ",IRET
IRET = GRIB_GET_ERROR_STRING(IRET,MERROR)
WRITE (*,*) "ERROR ", MERROR
DO J = 1, PVSIZE
PVSS(J) = J
ENDDO
IRET = GRIB_SET_REAL8_ARRAY(GRIBID,"pv",PVSS, PVSIZE)
IRET = GRIB_GET_ERROR_STRING(IRET,MERROR)
DO J = 1, PLSIZE
PL(J) = 64
ENDDO
IRET = GRIB_SET_INT_ARRAY(GRIBID,"pl",PL, PLSIZE)
IRET = GRIB_GET_ERROR_STRING(IRET,MERROR)
VALUE = 1
IRET = GRIB_SET_INT(GRIBID,"marsClass",VALUE)
WRITE (*,*) "Class ", VALUE , " ret ",IRET
VMAX = VALUES(1)
VMIN = VMAX
DO J = 1, VALUESLEN
VALUES(J) = J + 0.5
ENDDO
IRET = GRIB_SET_REAL8_ARRAY(GRIBID,"values",VALUES, VALUESLEN)
IRET = GRIB_GET_ERROR_STRING(IRET,MERROR)
WRITE (*,*) "PACK ERROR here", MERROR
IRET = GRIB_PRINT(GRIBID,"level")
IRET = GRIB_PRINT(GRIBID,"topLevel")
IRET = GRIB_PRINT(GRIBID,"bottomLevel")
IRET = GRIB_PRINT(GRIBID,"GRIB")
IRET = GRIB_WRITE_TO(GRIBID,"test.grib")
IRET = GRIB_RELEASE(GRIBID)
GO TO 50
END