AEA

This AEA routine converts ASCII to EBCDIC or EBCDIC to ASCII by charater.

USAGE:    CALL AEA (IA, IE, NC)

   Input argument list:
      IA       - CHARACTER*1 ARRAY OF ASCII DATA  IF NC < 0
      IE       - CHARACTER*1 ARRAY OF EBCDIC DATA IF NC > 0
      NC       - INTEGER,  CONTAINS CHARACTER COUNT TO CONVERT....
                 IF NC .LT. 0,  CONVERT ASCII TO EBCDIC
                 IF NC .GT. 0,  CONVERT EBCDIC TO ASCII

   Output argument list:
      IA       - CHARACTER*1 ARRAY OF ASCII  DATA IF NC > 0
      IE       - CHARACTER*1 ARRAY OF EBCDIC DATA IF NC < 0

ARGS_MOD

The Fortran Module ARGS_MOD acts as a wrapper to the system routines
                            IARGC and GETARG.

USAGE:    args_mod

ERREXIT

This ERREXIT routine exit with an return code.

USAGE:    CALL ERREXIT(IRET)

   Input argument list:
      IRET     - INTEGER RETURN CODE

ERRMSG

The ERRMSG rountine writes a message to standard error.

USAGE:    CALL ERRMSG(CMSG)

   Input arguments:
      CMSG         CHARACTER*(*) MESSAGE TO WRITE

Remark:
       This is a machine-dependent subprogram.

FPARSEI

The FPARSEI routine parses integers from a character string.

USAGE:  CALL FPARSEI(CARG,MARG,KARG)

   Input argument list:
      CARG     - CHARACTER*(*) STRING OF ASCII DIGITS TO PARSE.
                 INTEGERS MAY BE SEPARATED BY A COMMA OR BY BLANKS.
      MARG     - INTEGER MAXIMUM NUMBER OF INTEGERS TO PARSE.

   Output argument list:
      KARG     - INTEGER (MARG) NUMBERS PARSED.
                 (FROM 0 TO MARG VALUES MAY BE RETURNED.)

REMARKS:
        To determine the actual number of integers found in the string,
        KARG should be set to fill values before the call to fparsei and
        the number of non-fill values should be counted after the call.

FPARSER

The FPARSER routine parses real numbers from a character string.

USAGE:  CALL FPARSER(CARG,MARG,RARG)

   Input argument list:
      CARG     - CHARACTER*(*) STRING OF ASCII DIGITS TO PARSE.
                 REAL NUMBERS MAY BE SEPARATED BY A COMMA OR BY BLANKS.
      MARG     - INTEGER MAXIMUM NUMBER OF REAL NUMBERS TO PARSE.

   Output argument list:
      RARG     - REAL (MARG) NUMBERS PARSED.
                 (FROM 0 TO MARG VALUES MAY BE RETURNED.)

REMARKS:
        TO DETERMINE THE ACTUAL NUMBER OF REAL NUMBERS FOUND IN THE STRING,
        RARG SHOULD BE SET TO FILL VALUES BEFORE THE CALL TO FPARSER AND
        THE NUMBER OF NON-FILL VALUES SHOULD BE COUNTED AFTER THE CALL.


GBLEVENTS

The GBLEVENTS routine runs in two modes: PREVENTS and POSTEVENTS.

    In the PREVENTS mode, prepares observational prepbufr reports for
       subsequent quality control and analysis programs.  This is donE
       through the following: interpolation of global spectral simga
       first guess to prepbufr observation locations with encoding of
       first guess values into prepbufr reports; encoding of "PREVENT"
       and/or "virtmp" events into prepbufr reports; and encoding of
       observation errors from the error specification file into
       prepbufr reports.

    In the POSTEVENTS mode, after all quality control and analysis
       programs have run, interpolates the global SPECTRAL SIMGA
       analysis to prepbufr observation locations and encodes these
       analyzed values into prepbufr reports. 

    The remainder of this abstract applies only to the prevents mode.
    The "PREVENT" event can change a quality marker to flag an observation
    datum for non-use by subsequent qc and analysiS programs (filtering).
 
USAGE:    CALL GBLEVENTS(IDATEP,IUNITF,IUNITE,IUNITP,IUNITS,SUBSET,
                         NEWTYP)

   Input argument list:
      IDATEP   - CENTER DATE FOR PREPBUFR FILE IN THE FORM YYYYMMDDHH
      IUNITF   - 2-WORD ARRAY:
               - WORD 1 - UNIT NUMBER OF FIRST INPUT SPECTRAL (GLOBAL)
               - SIGMA FILE (EITHER FIRST GUESS OR ANALYSIS); IF HH IN
               - IDATEP IS A MULTIPLE OF 3 THEN THIS FILE IS VALID AT
               - THE DATE IN IDATEP, IF HH IN IDATEP IS NOT A
               - MULTIPLE OF 3 THEN THIS FILE IS VALID AT THE CLOSEST
               - TIME PRIOR TO THE DATE IN IDATEP THAT IS A MULTIPLE
               - OF 3
               - WORD 2 - UNIT NUMBER OF SECOND INPUT SPECTRAL (GLOBAL)
               - SIGMA FILE (EITHER FIRST GUESS OR ANALYSIS); IF HH IN
               - IDATEP IS A MULTIPLE OF 3 THEN THIS FILE IS EMPTY, IF
               - HH IN IDATEP IS NOT A MULTIPLE OF 3 THEN THIS FILE IS
               - VALID AT THE CLOSEST TIME AFTER THE DATE IN IDATEP
               - THAT IS A MULTIPLE OF 3
      IUNITE   - UNIT NUMBER OF INPUT OBSERVATION ERROR FILE
               - (USED ONLY IN PREVENTS MODE)
      IUNITP   - UNIT NUMBER OF OUTPUT PREPBUFR DATA SET
      IUNITS   - UNIT NUMBER OF "PREVENT" EVENTS DATA FILTERING
               - SUMMARY PRINT FILE
               - (USED ONLY IN PREVENTS MODE)
      SUBSET   - THE BUFR MESSAGE TABLE A ENTRY FOR THE PARTICULAR
               - REPORT BEING PROCESSED
      NEWTYP   - INDICATOR IF THE BUFR MESSAGE TABLE A ENTRY HAS
               - CHANGED FROM THAT OF THE PREVIOUS REPORT (=0 - NO,
                 =1 - YES)

   Input files:
      UNIT 05  - STANDARD INPUT (DATA CARDS - SEE NAMELIST
                 DOCUMENTATION BELOW)
                 (NOTE: IF STANDARD INPUT FILE IS NULL, THEN THIS
                        SUBROUTINE RUNS IN POSTEVENTS MODE)
      UNIT AA  - PREPBUFR DATA SET
               - (WHERE AA IS UNIT NUMBER DEFINED AS IUNITP IN
               - INPUT ARGUMENT LIST)
      UNIT BB  - SPECTRAL (GLOBAL) SIGMA GUESS (PREVENTS MODE) OR
               - ANALYSIS (POSTEVENTS MODE) FILE
               - (WHERE BB IS UNIT NUMBER DEFINED AS IUNITF(1) IN
               - INPUT ARGUMENT LIST)
      UNIT CC  - SPECTRAL (GLOBAL) SIGMA GUESS (PREVENTS MODE) OR
               - ANALYSIS (POSTEVENTS MODE) FILE
               - (WHERE CC IS UNIT NUMBER DEFINED AS IUNITF(2) IN
               - INPUT ARGUMENT LIST)
      UNIT DD  - OBSERVATION ERROR FILE (WHERE DD IS UNIT NUMBER
               - DEFINED AS IUNITE IN INPUT ARGUMENT LIST)
               - (USED ONLY IN PREVENTS MODE)

   Output files:
      UNIT 06  - STANDARD OUTPUT PRINT
      UNIT AA  - PREPBUFR DATA SET
               - (WHERE AA IS UNIT NUMBER DEFINED AS IUNITP IN
               - INPUT ARGUMENT LIST)
      UNIT DD  - "PREVENT" EVENTS DATA FILTERING SUMMARY PRINT FILE
               - (WHERE DD IS UNIT NUMBER DEFINED AS IUNITS IN
               - INPUT ARGUMENT LIST)
               - (USED ONLY IN PREVENTS MODE)

GBYTE

The GBYTE routine unpacks a byte into a target word.  The
          unpacked byte is right-justified in the target word, and the 
          remainder of the word is zero-filled.

USAGE:  CALL GBYTE(IPACKD,IUNPKD,NOFF,NBITS)

   Input argument list:
      IPACKD   THE WORD OR ARRAY CONTAINING THE BYTE TO BE UNPACKED.
      IUNPKD   THE WORD WHICH WILL CONTAIN THE UNPACKED BYTE.
      NOFF     THE NUMBER OF BITS TO SKIP, LEFT TO RIGHT, IN 'IPACKD' 
               IN ORDER TO LOCATE THE BYTE TO BE UNPACKED.
      NBITS    NUMBER OF BITS IN THE BYTE TO BE UNPACKED. MAXIMUM OF
               64 BITS ON 64 BIT MACHINE, 32 BITS ON 32 BIT MACHINE.

   Output argument list:
      IUNPKD   CONTAINS THE REQUESTED UNPACKED BYTE.

GBYTES

The GBYTES routine unpacks a series of bytes into a target
           array.  Each unpacked byte is right-justified in its target
           word, and the remainder of the word is zero-filled.

USAGE:  CALL GBYTES(IPACKD,IUNPKD,NOFF,NBITS,NSKIP,ITER)

   Input argument list:
      IPACKD   THE WORD OR ARRAY CONTAINING THE PACKED BYTES.
      IUNPKD   THE ARRAY WHICH WILL CONTAIN THE UNPACKED BYTES.
      NOFF     THE INITIAL NUMBER OF BITS TO SKIP, LEFT TO 
               RIGHT, IN 'IPACKD' IN ORDER TO LOCATE
               THE FIRST BYTE TO UNPACK.
      NBITS    NUMBER OF BITS IN THE BYTE TO BE UNPACKED.
               MAXIMUM OF 64 BITS ON 64 BIT MACHINE, 32 BITS
               ON 32 BIT MACHINE.
      ISKIP    THE NUMBER OF BITS TO SKIP BETWEEN EACH BYTE
               IN 'IPACKD' IN ORDER TO LOCATE THE NEXT BYTE
               TO BE UNPACKED.
      ITER     THE NUMBER OF BYTES TO BE UNPACKED.

   Output argument list:
      IUNPKD   CONTAINS THE REQUESTED UNPACKED BYTES.

GETBIT

The GETBIT routine reads number of bits required to pack a given field
           for particular binary and decimal scalings is computed.
           the field is rounded off to the decimal scaling for packing.
           the minimum and maximum rounded field values are also returned.
           grib bitmap masking for valid data is optionally used.

USAGE:    CALL GTBITS(IBM,IBS,IDS,LEN,MG,G,GMIN,GMAX,NBIT)

   Input argument list:
      IBM    - INTEGER BITMAP FLAG (=0 FOR NO BITMAP)
      IBS    - INTEGER BINARY SCALING
               (E.G. IBS=3 TO ROUND FIELD TO NEAREST EIGHTH VALUE)
      IDS    - INTEGER DECIMAL SCALING
               (E.G. IDS=3 TO ROUND FIELD TO NEAREST MILLI-VALUE)
               (NOTE THAT IDS AND IBS CAN BOTH BE NONZERO,
                E.G. IDS=1 AND IBS=1 ROUNDS TO THE NEAREST TWENTIETH)
      LEN    - INTEGER LENGTH OF THE FIELD AND BITMAP
      MG     - INTEGER (LEN) BITMAP IF IBM=1 (0 TO SKIP, 1 TO KEEP)
      G      - REAL (LEN) FIELD

   Output argument list:
      GROUND - REAL (LEN) FIELD ROUNDED TO DECIMAL AND BINARY SCALING
               (SET TO ZERO WHERE BITMAP IS 0 IF IBM=1)
      GMIN   - REAL MINIMUM VALID ROUNDED FIELD VALUE
      GMAX   - REAL MAXIMUM VALID ROUNDED FIELD VALUE
      NBIT   - INTEGER NUMBER OF BITS TO PACK


GETGB

The GETGB routine finds and unpacks a grib message. The routine reads
          a grib index file (or optionally the grib file itself) to get the
          index buffer (i.e. table of contents) for the grib file. The index
          buffer is saved for use by future prospective calls. It finds in
          the index buffer a reference to the grib message requested.
          The grib message request specifies the number of messages to skip
          and the unpacked pds and gds parameters.  (A requested parameter
          of -1 means to allow any value of this parameter to be found.)
          If the requested grib message is found, then it is read from thE
          grib file and unpacked.  Its message number is returned along with
          the unpacked pds and gds parameters, the unpacked bitmap (if any),
          and the unpacked data.  If the grib message is not found, then the
          return code will be nonzero.

USAGE:    CALL GETGB(LUGB,LUGI,JF,J,JPDS,JGDS,
                     KF,K,KPDS,KGDS,LB,F,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      JF           INTEGER MAXIMUM NUMBER OF DATA POINTS TO UNPACK
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
       LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                             OR
                 - PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
 
   Output arguments:
      KF           INTEGER NUMBER OF DATA POINTS UNPACKED
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      LB           LOGICAL*1 (KF) UNPACKED BITMAP IF PRESENT
      F            REAL (KF) UNPACKED DATA
      IRET         INTEGER RETURN CODE
                    0      ALL OK
                    96     ERROR READING INDEX FILE
                    97     ERROR READING GRIB FILE
                    98     NUMBER OF DATA POINTS GREATER THAN JF
                    99     REQUEST NOT FOUND
                    OTHER  W3FI63 GRIB UNPACKER RETURN CODE

REMARKS: 
        In order to unpack grib from a multiprocessing environment
        where each processor is attempting to read from its own pair of
        logical units, one must directly call subprogram getgbm as below,
        allocating a private copy of cbuf, nlen and nnum to each processor.
        do not engage the same logical unit from more than one processor.


GETGB1

The GETGB1 routine reads and unpacks a grib message.  The routine
           reads an associated grib index file (unless it already was read).
           and finds in the index file a reference to the grib message requested.
           the grib message request specifies the number of messages to skip
           and the unpacked pds and gds parameters.  (a requested parameter
           of -1 means to allow any value of this parameter to be found.)
           If the requested grib message is found, then it is read from the
           grib file and unpacked.  Its message number is returned along with
           the unpacked pds and gds parameters, the unpacked bitmap (if any),
           and the unpacked data.  If the grib message is not found, then the
           return code will be nonzero.

USAGE:    CALL GETGB1(LUGB,LUGI,JF,J,JPDS,JGDS,
                      GRIB,KF,K,KPDS,KGDS,LB,F,IRET)

   Input arguments:
      LUGB         LOGICAL UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         LOGICAL UNIT OF THE UNBLOCKED GRIB INDEX FILE
      JF           INTEGER MAXIMUM NUMBER OF DATA POINTS TO UNPACK
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO REOPEN INDEX FILE AND SEARCH FROM BEGINNING)
      JPDS         INTEGER (25) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
                   LOOK IN DOC BLOCK OF W3FI63 FOR ARRAY KPDS
                   FOR LIST OF ORDER OF UNPACKED PDS VALUES. IN
                   MOST CASES YOU ONLY NEED TO SET 4 OR 5 VALUES
                   TO PICK UP RECORD.
      JGDS         INTEGER (22) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)

   Output arguments:
      GRIB         GRIB DATA ARRAY BEFORE IT IS UNPACKED
      KF           INTEGER NUMBER OF DATA POINTS UNPACKED
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (25) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (22) UNPACKED GDS PARAMETERS
      LB           LOGICAL (KF) UNPACKED BITMAP IF PRESENT
      F            REAL (KF) UNPACKED DATA
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     97     ERROR READING GRIB FILE
                     98     NUMBER OF DATA POINTS GREATER THAN JF
                     99     REQUEST NOT FOUND
                     OTHER  W3FI63 GRIB UNPACKER RETURN CODE

GETGB1R

The GETGB1R routine reads and unpack a grib message.

USAGE:    CALL GETGB1R(LUGB,LSKIP,LGRIB,KF,KPDS,KGDS,KENS,LB,F,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LSKIP        INTEGER NUMBER OF BYTES TO SKIP
      LGRIB        INTEGER NUMBER OF BYTES TO READ

   Output arguments:
      KF           INTEGER NUMBER OF DATA POINTS UNPACKED
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      KENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      LB           LOGICAL*1 (KF) UNPACKED BITMAP IF PRESENT
      F            REAL (KF) UNPACKED DATA
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     97     ERROR READING GRIB FILE
                     OTHER  W3FI63 GRIB UNPACKER RETURN CODE


GETGB1RE

The GETGB1RE routine reads and unpacks a grib message.

USAGE:    CALL GETGB1RE(LUGB,LSKIP,LGRIB,KF,KPDS,KGDS,KENS,
                        KPROB,XPROB,KCLUST,KMEMBR,LB,F,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LSKIP        INTEGER NUMBER OF BYTES TO SKIP
      LGRIB        INTEGER NUMBER OF BYTES TO READ

   Output arguments:
      KF           INTEGER NUMBER OF DATA POINTS UNPACKED
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      KENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      KPROB        INTEGER (2) PROBABILITY ENSEMBLE PARMS
      XPROB        REAL    (2) PROBABILITY ENSEMBLE PARMS
      KCLUST       INTEGER (16) CLUSTER ENSEMBLE PARMS
      KMEMBR       INTEGER (8) CLUSTER ENSEMBLE PARMS
      LB           LOGICAL*1 (KF) UNPACKED BITMAP IF PRESENT
      F            REAL (KF) UNPACKED DATA
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     97     ERROR READING GRIB FILE
                     OTHER  W3FI63 GRIB UNPACKER RETURN CODE

REMARKS:
        There is no protection against unpacking too much data.
        subprogram can be called from a multiprocessing environment.
        do not engage the same logical unit from more than one processor.


GETGB1S

The GETGB1S routine finds a grib message.

USAGE:    CALL GETGB1S(CBUF,NLEN,NNUM,J,JPDS,JGDS,JENS,
                       K,KPDS,KGDS,KENS,LSKIP,LGRIB,IRET)

   Input arguments:
      CBUF         CHARACTER*1 (NLEN*NNUM) BUFFER CONTAINING INDEX DATA
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
      NNUM         INTEGER NUMBER OF INDEX RECORDS
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
      JENS         INTEGER (200) ENSEMBLE PDS PARMS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(23)=2)
                   (=-1 FOR WILDCARD)

   Output arguments:
      K            INTEGER MESSAGE NUMBER FOUND
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      K ENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      LSKIP        INTEGER NUMBER OF BYTES TO SKIP
      LGRIB        INTEGER NUMBER OF BYTES TO READ
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     1      REQUEST NOT FOUND
 
REMARKS:
        The subprogram can be called from a multiprocessing environment.


GETGBE

The GETGBE routine finds and unpacks a grib message.

USAGE:    CALL GETGBE(LUGB,LUGI,JF,J,JPDS,JGDS,JENS,
                      KF,K,KPDS,KGDS,KENS,LB,F,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      JF           INTEGER MAXIMUM NUMBER OF DATA POINTS TO UNPACK
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
       LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                             OR
                 - PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      JENS         INTEGER (200) ENSEMBLE PDS PARMS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(23)=2)
                   (=-1 FOR WILDCARD)
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG

   Output arguments:
      KF           INTEGER NUMBER OF DATA POINTS UNPACKED
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      KENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      LB           LOGICAL*1 (KF) UNPACKED BITMAP IF PRESENT
      F            REAL (KF) UNPACKED DATA
      IRET         INTEGER RETURN CODE
                    0      ALL OK
                    96     ERROR READING INDEX FILE
                    97     ERROR READING GRIB FILE
                    98     NUMBER OF DATA POINTS GREATER THAN JF
                    99     REQUEST NOT FOUND
                    OTHER  W3FI63 GRIB UNPACKER RETURN CODE

REMARKS: 
        In order to unpack grib from a multiprocessing environment
        where each processor is attempting to read from its own pair of
        logical units, one must directly call subprogram getgbem as below,
        allocating a private copy of cbuf, nlen and nnum to each processor.
        do not engage the same logical unit from more than one processor.


GETGBEH

The GETGBEH routines finds a grib message.

USAGE:    CALL GETGBEH(LUGB,LUGI,J,JPDS,JGDS,JENS,
                       KG,KF,K,KPDS,KGDS,KENS,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
                   (ONLY USED IF LUGI=0)
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      JENS         INTEGER (200) ENSEMBLE PDS PARMS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(23)=2)
                   (=-1 FOR WILDCARD)
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG

   Output arguments:
      KG           INTEGER NUMBER OF BYTES IN THE GRIB MESSAGE
      KF           INTEGER NUMBER OF DATA POINTS IN THE MESSAGE
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      KENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     99     REQUEST NOT FOUND
 
REMARKS:
        In order to unpack grib from a multiprocessing environment
        where each processor is attempting to read from its own pair of
        logical units, one must directly call subprogram getgbemh as below,
        allocating a private copy of cbuf, nlen and nnum to each processor.
        do not engage the same logical unit from more than one processor.


GETGBEM

The GETGBEM routine finds and unpacks a grib message.

USAGE:    CALL GETGBEM(LUGB,LUGI,JF,J,JPDS,JGDS,JENS,
                       MBUF,CBUF,NLEN,NNUM,MNUM,
                       KF,K,KPDS,KGDS,KENS,LB,F,IRET)
    Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      JF           INTEGER MAXIMUM NUMBER OF DATA POINTS TO UNPACK
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      JENS         INTEGER (200) ENSEMBLE PDS PARMS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(23)=2)
                   (=-1 FOR WILDCARD)
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG
      MBUF         INTEGER LENGTH OF INDEX BUFFER IN BYTES
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
                   (INITIALIZE BY SETTING J=-1)
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
                   (INITIALIZE BY SETTING J=-1)
      NNUM         INTEGER NUMBER OF INDEX RECORDS
                   (INITIALIZE BY SETTING J=-1)
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
                   (INITIALIZE BY SETTING J=-1)

   Output arguments:
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
      NNUM         INTEGER NUMBER OF INDEX RECORDS
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
      KF           INTEGER NUMBER OF DATA POINTS UNPACKED
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      KENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      LB           LOGICAL*1 (KF) UNPACKED BITMAP IF PRESENT
      F            REAL (KF) UNPACKED DATA
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     97     ERROR READING GRIB FILE
                     98     NUMBER OF DATA POINTS GREATER THAN JF
                     99     REQUEST NOT FOUND
                     OTHER  W3FI63 GRIB UNPACKER RETURN CODE
 
REMARKS:
        Specify an index file if feasible to increase speed.
        subprogram can be called from a multiprocessing environment.
        do not engage the same logical unit from more than one processor.


GETGBEMH

The GETGBEMH routine finds a grib message.

USAGE:    CALL GETGBEMH(LUGB,LUGI,J,JPDS,JGDS,JENS,
                        MBUF,CBUF,NLEN,NNUM,MNUM,
                        KG,KF,K,KPDS,KGDS,KENS,IRET)
   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
                   (ONLY USED IF LUGI=0)
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      JENS         INTEGER (200) ENSEMBLE PDS PARMS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(23)=2)
                   (=-1 FOR WILDCARD)
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG
      MBUF         INTEGER LENGTH OF INDEX BUFFER IN BYTES
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
                   (INITIALIZE BY SETTING J=-1)
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
                   (INITIALIZE BY SETTING J=-1)
      NNUM         INTEGER NUMBER OF INDEX RECORDS
                   (INITIALIZE BY SETTING J=-1)
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
                   (INITIALIZE BY SETTING J=-1)
 
   Output arguments:
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
      NNUM         INTEGER NUMBER OF INDEX RECORDS
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
      KG           INTEGER NUMBER OF BYTES IN THE GRIB MESSAGE
      KF           INTEGER NUMBER OF DATA POINTS IN THE MESSAGE
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      KENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     99     REQUEST NOT FOUND
 
REMARKS: 
        Specify an index file if feasible to increase speed.
        subprogram can be called from a multiprocessing environment.
        do not engage the same logical unit from more than one processor.


GETGBEMP

The GETGBEMP routine finds a grib message.

USAGE:    CALL GETGBEMP(LUGB,LUGI,JG,J,JPDS,JGDS,JENS,
                        MBUF,CBUF,NLEN,NNUM,MNUM,
                        KG,K,KPDS,KGDS,KENS,G,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      JG           INTEGER MAXIMUM NUMBER OF BYTES IN THE GRIB MESSAGE
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      JENS         INTEGER (200) ENSEMBLE PDS PARMS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(23)=2)
                   (=-1 FOR WILDCARD)
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG
      MBUF         INTEGER LENGTH OF INDEX BUFFER IN BYTES
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
                   (INITIALIZE BY SETTING J=-1)
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
                   (INITIALIZE BY SETTING J=-1)
      NNUM         INTEGER NUMBER OF INDEX RECORDS
                   (INITIALIZE BY SETTING J=-1)
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
                   (INITIALIZE BY SETTING J=-1)

   Output arguments:
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
      NNUM         INTEGER NUMBER OF INDEX RECORDS
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
      KG           INTEGER NUMBER OF BYTES IN THE GRIB MESSAGE
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      KENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      G            CHARACTER*1 (KG) GRIB MESSAGE
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     97     ERROR READING GRIB FILE
                     98     NUMBER OF BYTES GREATER THAN JG
                     99     REQUEST NOT FOUND
 
REMARKS:
        specify an index file if feasible to increase speed.
        subprogram can be called from a multiprocessing environment.
        do not engage the same logical unit from more than one processor.


GETGBENS

The GETGBENS routine finds and unpacks a grib message.

USAGE:    CALL GETGBENS(LUGB,LUGI,JF,J,JPDS,JGDS,JENS,
                        KF,K,KPDS,KGDS,KENS,LB,F,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      JF           INTEGER MAXIMUM NUMBER OF DATA POINTS TO UNPACK
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      JENS         INTEGER (200) ENSEMBLE PDS PARMS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(23)=2)
                   (=-1 FOR WILDCARD)
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG

    Output arguments:
      KF           INTEGER NUMBER OF DATA POINTS UNPACKED
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      KENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      LB           LOGICAL*1 (KF) UNPACKED BITMAP IF PRESENT
      F            REAL (KF) UNPACKED DATA
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     97     ERROR READING GRIB FILE
                     98     NUMBER OF DATA POINTS GREATER THAN JF
                     99     REQUEST NOT FOUND
                     OTHER  W3FI63 GRIB UNPACKER RETURN CODE
 
REMARKS: 
        In order to unpack grib from a multiprocessing environment
        where each processor is attempting to read from its own pair of
        logical units, one must directly call subprogram getgbem as below,
        allocating a private copy of cbuf, nlen and nnum to each processor.
        do not engage the same logical unit from more than one processor.
 
GETGBEP

The GETGBEP routine finds a grib message.

USAGE:    CALL GETGBEP(LUGB,LUGI,JG,J,JPDS,JGDS,JENS,
                       KG,K,KPDS,KGDS,KENS,G,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      JG           INTEGER MAXIMUM NUMBER OF BYTES IN THE GRIB MESSAGE
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      JENS         INTEGER (200) ENSEMBLE PDS PARMS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(23)=2)
                   (=-1 FOR WILDCARD)
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG

   Output arguments:
      KG           INTEGER NUMBER OF BYTES IN THE GRIB MESSAGE
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      KENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      G            CHARACTER*1 (KG) GRIB MESSAGE
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     97     ERROR READING GRIB FILE
                     98     NUMBER OF BYTES GREATER THAN JG
                     99     REQUEST NOT FOUND
 
REMARKS:
        In order to unpack grib from a multiprocessing environment
        where each processor is attempting to read from its own pair of
        logical units, one must directly call subprogram getgbemp as below,
        allocating a private copy of cbuf, nlen and nnum to each processor.
        DO NOT engage the same logical unit from more than one processor.


GETGBEX

The GETGBEX routine finds and unpacks a grib message.

USAGE:    CALL GETGBEX(LUGB,LUGI,JF,J,JPDS,JGDS,JENS,
                       KF,K,KPDS,KGDS,KENS,KPROB,XPROB,KCLUST,KMEMBR,
                       LB,F,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      JF           INTEGER MAXIMUM NUMBER OF DATA POINTS TO UNPACK
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      JENS         INTEGER (200) ENSEMBLE PDS PARMS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(23)=2)
                   (=-1 FOR WILDCARD)
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG

   Output arguments:
      KF           INTEGER NUMBER OF DATA POINTS UNPACKED
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      KENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      KPROB        INTEGER (2) PROBABILITY ENSEMBLE PARMS
      XPROB        REAL    (2) PROBABILITY ENSEMBLE PARMS
      KCLUST       INTEGER (16) CLUSTER ENSEMBLE PARMS
      KMEMBR       INTEGER (8) CLUSTER ENSEMBLE PARMS
      LB           LOGICAL*1 (KF) UNPACKED BITMAP IF PRESENT
      F            REAL (KF) UNPACKED DATA
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     97     ERROR READING GRIB FILE
                     98     NUMBER OF DATA POINTS GREATER THAN JF
                     99     REQUEST NOT FOUND
                     OTHER  W3FI63 GRIB UNPACKER RETURN CODE
 
REMARKS:
        In order to unpack grib from a multiprocessing environment
        where each processor is attempting to read from its own pair of
        logical units, one must directly call subprogram getgbexm as below,
        allocating a private copy of cbuf, nlen and nnum to each processor.
        DO NOT engage the same logical unit from more than one processor.


GETGBEXM

The GETGBEXM routine finds and unpacks a grib message.

USAGE:    CALL GETGBEXM(LUGB,LUGI,JF,J,JPDS,JGDS,JENS,
                        MBUF,CBUF,NLEN,NNUM,MNUM,
                        KF,K,KPDS,KGDS,KENS,KPROB,XPROB,KCLUST,KMEMBR,
                        LB,F,IRET)
   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
B
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      JF           INTEGER MAXIMUM NUMBER OF DATA POINTS TO UNPACK
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      JENS         INTEGER (200) ENSEMBLE PDS PARMS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(23)=2)
                   (=-1 FOR WILDCARD)
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG
      MBUF         INTEGER LENGTH OF INDEX BUFFER IN BYTES
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
                   (INITIALIZE BY SETTING J=-1)
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
                   (INITIALIZE BY SETTING J=-1)
      NNUM         INTEGER NUMBER OF INDEX RECORDS
                   (INITIALIZE BY SETTING J=-1)
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
                   (INITIALIZE BY SETTING J=-1)

    Output arguments:
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
      NNUM         INTEGER NUMBER OF INDEX RECORDS
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
      KF           INTEGER NUMBER OF DATA POINTS UNPACKED
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      KENS         INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
      KPROB        INTEGER (2) PROBABILITY ENSEMBLE PARMS
      XPROB        REAL    (2) PROBABILITY ENSEMBLE PARMS
      KCLUST       INTEGER (16) CLUSTER ENSEMBLE PARMS
      KMEMBR       INTEGER (8) CLUSTER ENSEMBLE PARMS
      LB           LOGICAL*1 (KF) UNPACKED BITMAP IF PRESENT
      F            REAL (KF) UNPACKED DATA
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     97     ERROR READING GRIB FILE
                     98     NUMBER OF DATA POINTS GREATER THAN JF
                     99     REQUEST NOT FOUND
                     OTHER  W3FI63 GRIB UNPACKER RETURN CODE
 
REMARKS:
        Specify an index file if feasible to increase speed.
        subprogram can be called from a multiprocessing environment.
        DO NOT engage the same logical unit from more than one processor.


GETGBH

The GETGBH routine finds a grib message.

USAGE:    CALL GETGBH(LUGB,LUGI,J,JPDS,JGDS,
                      KG,KF,K,KPDS,KGDS,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
                   (ONLY USED IF LUGI=0)
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER

    Output arguments:
      KG           INTEGER NUMBER OF BYTES IN THE GRIB MESSAGE
      KF           INTEGER NUMBER OF DATA POINTS IN THE MESSAGE
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     99     REQUEST NOT FOUND
 
REMARKS:
        In order to unpack grib from a multiprocessing environment
        where each processor is attempting to read from its own pair of
        logical units, one must directly call subprogram getgbmh as below,
        allocating a private copy of cbuf, nlen and nnum to each processor.
        DO NOT engage the same logical unit from more than one processor.


GETGBM

The GETGBM routine finds and unpacks a grib message.

USAGE:    CALL GETGBM(LUGB,LUGI,JF,J,JPDS,JGDS,
                      MBUF,CBUF,NLEN,NNUM,MNUM,
                      KF,K,KPDS,KGDS,LB,F,IRET)
   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      JF           INTEGER MAXIMUM NUMBER OF DATA POINTS TO UNPACK
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      MBUF         INTEGER LENGTH OF INDEX BUFFER IN BYTES
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
                   (INITIALIZE BY SETTING J=-1)
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
                   (INITIALIZE BY SETTING J=-1)
      NNUM         INTEGER NUMBER OF INDEX RECORDS
                   (INITIALIZE BY SETTING J=-1)
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
                   (INITIALIZE BY SETTING J=-1)

    Output arguments:
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
      NNUM         INTEGER NUMBER OF INDEX RECORDS
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
      KF           INTEGER NUMBER OF DATA POINTS UNPACKED
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      LB           LOGICAL*1 (KF) UNPACKED BITMAP IF PRESENT
      F            REAL (KF) UNPACKED DATA
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     97     ERROR READING GRIB FILE
                     98     NUMBER OF DATA POINTS GREATER THAN JF
                     99     REQUEST NOT FOUND
                     OTHER  W3FI63 GRIB UNPACKER RETURN CODE
 
REMARKS:
        Specify an index file if feasible to increase speed.
        subprogram can be called from a multiprocessing environment.
        DO NOT engage the same logical unit from more than one processor.


GETGBMH

The GETGBMH routine finds a grib message.

USAGE:    CALL GETGBMH(LUGB,LUGI,J,JPDS,JGDS,
                       MBUF,CBUF,NLEN,NNUM,MNUM,
                       KG,KF,K,KPDS,KGDS,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
                   (ONLY USED IF LUGI=0)
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      MBUF         INTEGER LENGTH OF INDEX BUFFER IN BYTES
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
                   (INITIALIZE BY SETTING J=-1)
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
                   (INITIALIZE BY SETTING J=-1)
      NNUM         INTEGER NUMBER OF INDEX RECORDS
                   (INITIALIZE BY SETTING J=-1)
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
                   (INITIALIZE BY SETTING J=-1)

   Output arguments:
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
      NNUM         INTEGER NUMBER OF INDEX RECORDS
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
      KG           INTEGER NUMBER OF BYTES IN THE GRIB MESSAGE
      KF           INTEGER NUMBER OF DATA POINTS IN THE MESSAGE
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     99     REQUEST NOT FOUND
 
REMARKS: 
        Specify an index file if feasible to increase speed.
        subprogram can be called from a multiprocessing environment.
        DO NOT engage the same logical unit from more than one processor.


GETGBMP

The GETGBMP routine finds a grib message.

USAGE:    CALL GETGBMP(LUGB,LUGI,JG,J,JPDS,JGDS,
                       MBUF,CBUF,NLEN,NNUM,MNUM,
                       KG,K,KPDS,KGDS,G,IRET)
   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      JG           INTEGER MAXIMUM NUMBER OF BYTES IN THE GRIB MESSAGE
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR
                   OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
                   IN EACH ROW
                   OR
                   255 IF NEITHER ARE PRESENT
           (21)  - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
           (22)  - NUMBER OF WORDS IN EACH ROW
        LATITUDE/LONGITUDE GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        GAUSSIAN  GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - N - NR OF CIRCLES POLE TO EQUATOR
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - NV - NR OF VERT COORD PARAMETERS
           (13)  - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
                              OR
                   PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
                        EACH ROW (IF NO VERT COORD PARAMETERS
                        ARE PRESENT
                              OR
                   255 IF NEITHER ARE PRESENT
        POLAR STEREOGRAPHIC GRIDS
           (2)   - N(I) NR POINTS ALONG LAT CIRCLE
           (3)   - N(J) NR POINTS ALONG LON CIRCLE
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG  (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
        SPHERICAL HARMONIC COEFFICIENTS
           (2)   - J PENTAGONAL RESOLUTION PARAMETER
           (3)   - K      "          "         "
           (4)   - M      "          "         "
           (5)   - REPRESENTATION TYPE
           (6)   - COEFFICIENT STORAGE MODE
        MERCATOR GRIDS
           (2)   - N(I) NR POINTS ON LATITUDE CIRCLE
           (3)   - N(J) NR POINTS ON LONGITUDE MERIDIAN
           (4)   - LA(1) LATITUDE OF ORIGIN
           (5)   - LO(1) LONGITUDE OF ORIGIN
           (6)   - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LATIT - LATITUDE OF PROJECTION INTERSECTION
           (10)  - RESERVED
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LONGITUDINAL DIR GRID LENGTH
           (13)  - LATITUDINAL DIR GRID LENGTH
        LAMBERT CONFORMAL GRIDS
           (2)   - NX NR POINTS ALONG X-AXIS
           (3)   - NY NR POINTS ALONG Y-AXIS
           (4)   - LA1 LAT OF ORIGIN (LOWER LEFT)
           (5)   - LO1 LON OF ORIGIN (LOWER LEFT)
           (6)   - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      MBUF         INTEGER LENGTH OF INDEX BUFFER IN BYTES
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
                   (INITIALIZE BY SETTING J=-1)
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
                   (INITIALIZE BY SETTING J=-1)
      NNUM         INTEGER NUMBER OF INDEX RECORDS
                   (INITIALIZE BY SETTING J=-1)
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
                   (INITIALIZE BY SETTING J=-1)

   Output arguments:
      CBUF         CHARACTER*1 (MBUF) INDEX BUFFER
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
      NNUM         INTEGER NUMBER OF INDEX RECORDS
      MNUM         INTEGER NUMBER OF INDEX RECORDS SKIPPED
      KG           INTEGER NUMBER OF BYTES IN THE GRIB MESSAGE
      K            INTEGER MESSAGE NUMBER UNPACKED
                   (CAN BE SAME AS J IN CALLING PROGRAM
                   IN ORDER TO FACILITATE MULTIPLE SEARCHES)
      KPDS         INTEGER (200) UNPACKED PDS PARAMETERS
      KGDS         INTEGER (200) UNPACKED GDS PARAMETERS
      G            CHARACTER*1 (KG) GRIB MESSAGE
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     96     ERROR READING INDEX FILE
                     97     ERROR READING GRIB FILE
                     98     NUMBER OF BYTES GREATER THAN JG
                     99     REQUEST NOT FOUND
 
REMARKS: 
        Specify an index file if feasible to increase speed.
        subprogram can be called from a multiprocessing environment.
        DO NOT engage the same logical unit from more than one processor.


GETGBP

The GETGBP routine finds a grib message.

USAGE:    CALL GETGBP(LUGB,LUGI,JG,J,JPDS,JGDS,
                     KG,K,KPDS,KGDS,G,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
                   (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
      JG           INTEGER MAXIMUM NUMBER OF BYTES IN THE GRIB MESSAGE
      J            INTEGER NUMBER OF MESSAGES TO SKIP
                   (=0 TO SEARCH FROM BEGINNING)
                   (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
      JPDS         INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
                   (=-1 FOR WILDCARD)
           (1)   - ID OF CENTER
           (2)   - GENERATING PROCESS ID NUMBER
           (3)   - GRID DEFINITION
           (4)   - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING (CENTURY-1)
           (9)   - MONTH OF YEAR
           (10)  - DAY OF MONTH
           (11)  - HOUR OF DAY
           (12)  - MINUTE OF HOUR
           (13)  - INDICATOR OF FORECAST TIME UNIT
           (14)  - TIME RANGE 1
           (15)  - TIME RANGE 2
           (16)  - TIME RANGE FLAG
           (17)  - NUMBER INCLUDED IN AVERAGE
           (18)  - VERSION NR OF GRIB SPECIFICATION
           (19)  - VERSION NR OF PARAMETER TABLE
           (20)  - NR MISSING FROM AVERAGE/ACCUMULATION
           (21)  - CENTURY OF REFERENCE TIME OF DATA
           (22)  - UNITS DECIMAL SCALE FACTOR
           (23)  - SUBCENTER NUMBER
           (24)  - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
                   128 IF FORECAST FIELD ERROR
                    64 IF BIAS CORRECTED FCST FIELD
                    32 IF SMOOTHED FIELD
                   WARNING: CAN BE COMBINATION OF MORE THAN 1
           (25)  - PDS BYTE 30, NOT USED
      JGDS         INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
                   (ONLY SEARCHED IF JPDS(3)=255)
                   (=-1 FOR WILDCARD)
           (1)   - DATA REPRESENTATION TYPE
           (19)  - NUMBER OF VERTICAL COORDINATE PARAMETERS
           (20)  - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
                   PARAMETERS
                   OR