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
                   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
      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: 
        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 getgbmp 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.


GETGI

The GETGI routine reads a grib index filei and return its contents.

USAGE:    CALL GETGI(LUGI,MNUM,MBUF,CBUF,NLEN,NNUM,IRET)

   Input arguments:
      LUGI         INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
      MNUM         INTEGER NUMBER OF INDEX RECORDS TO SKIP (USUALLY 0)
      MBUF         INTEGER LENGTH OF CBUF IN BYTES

    Output arguments:
      CBUF         CHARACTER*1 (MBUF) BUFFER TO RECEIVE INDEX DATA
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
      NNUM         INTEGER NUMBER OF INDEX RECORDS
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     1      CBUF TOO SMALL TO HOLD INDEX BUFFER
                     2      ERROR READING INDEX FILE BUFFER
                     3      ERROR READING INDEX FILE HEADER
 
REMARKS: 
        Subprogram can be called from a multiprocessing environment.
        DO NOT engage the same logical unit from more than one processor.


GETGIR

The GETGIR routine reads a grib file and returns its index contents.

USAGE:    CALL GETGIR(LUGB,MSK1,MSK2,MNUM,MBUF,CBUF,NLEN,NNUM,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB FILE
      MSK1         INTEGER NUMBER OF BYTES TO SEARCH FOR FIRST MESSAGE
      MSK2         INTEGER NUMBER OF BYTES TO SEARCH FOR OTHER MESSAGES
      MNUM         INTEGER NUMBER OF INDEX RECORDS TO SKIP (USUALLY 0)
      MBUF         INTEGER LENGTH OF CBUF IN BYTES

   Output arguments:
      CBUF         CHARACTER*1 (MBUF) BUFFER TO RECEIVE INDEX DATA
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
      NNUM         INTEGER NUMBER OF INDEX RECORDS
                   (=0 IF NO GRIB MESSAGES ARE FOUND)
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     1      CBUF TOO SMALL TO HOLD INDEX DATA
 
REMARKS:
        Subprogram can be called from a multiprocessing environment.
        DO NOT engage the same logical unit from more than one processor.


GTBITS

The GTBITS routine computes number of bits and round field.

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

   Input argument list:
      IBM      - INTEGER BITMAP FLAG (=0 FOR NO BITMAP)
      IDS      - INTEGER DECIMAL SCALING
                 (E.G. IDS=3 TO ROUND FIELD TO NEAREST MILLI-VALUE)
      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 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


HOSTNAME

The HOSTNAME function returns current hostname.

USAGE:     hostname=HOSTNAME()

   Input argument list:
      None

   Output argument list:
     HOSTNAME - CHARACTER(15) HOSTNAME


IDSDEF

The IDSDEF routine sets default decimal scalings.

USAGE:    CALL IDSDEF(IPTV,IDS)

   Input arguments:
      IPTV         PARAMTER TABLE VERSION (ONLY 1 OR 2 IS RECOGNIZED)

   Output arguments:
      IDS          INTEGER (255) DECIMAL SCALINGS
                   (UNKNOWN DECIMAL SCALINGS WILL NOT BE SET)


INSTRUMENT

The INSTRUMENT routine monitors wall-clock times.

USAGE:    CALL INSTRUMENT(K,KALL,TTOT,TMIN,TMAX)

   Input argument list:
      K        - INTEGER POSITIVE SECTION NUMBER
                 OR MAXIMUM SECTION NUMBER IN THE FIRST INVOCATION
                 OR ZERO TO RESET ALL WALL-CLOCK STATISTICS
                 OR NEGATIVE SECTION NUMBER TO SKIP MONITORING
                 AND JUST RETURN STATISTICS.
 
   Output argument list:
      KALL     - INTEGER NUMBER OF TIMES SECTION IS CALLED
      TTOT     - REAL TOTAL SECONDS SPENT IN SECTION
      TMIN     - REAL MINIMUM SECONDS SPENT IN SECTION
      TMAX     - REAL MAXIMUM SECONDS SPENT IN SECTION

REMARKS:
        This subprogram should not be invoked from a multitasking region.
        normally, time spent inside this subprogram is not counted.
        wall-clock times are kept to the nearest millisecond.


ISRCHNE

The ISRCHNE function searches vector given a target.

USAGE:    index=ISRCHNE(n, x, incx, target)

   Input argument list:
      n        - Number of elements to be searched
      x        - Real or integer array of dimension (n-1) * |incx| + 1.
                 Array x contains the vector to be searched.
      incx     - Increment between elements of the searched array.
      target   - Value for which to search in the array.
 
   Output value
      index  - Index of the first element equal or not equal to target.  If
               target is not found, n+1 is returned.  If n <= 0, 0 is
               returned.
 
REMARKS:
        This code and documentation was taken directly from the
        man page for routine ISRCHNE on a CRAY UNICOS system.


IW3JDN

The IW3JDN function computes julian day number.

USAGE:   II = IW3JDN(IYEAR,MONTH,IDAY)

   Input variables:
      IYEAR  ARG LIST  INTEGER   YEAR           ( 4 DIGITS)
      MONTH  ARG LIST  INTEGER   MONTH OF YEAR   (1 - 12)
      IDAY   ARG LIST  INTEGER   DAY OF MONTH    (1 - 31)
 
   Output variables:
      IW3JDN FUNTION   INTEGER   JULIAN DAY NUMBER

      For example:
               JAN. 1,1960 IS JULIAN DAY NUMBER 2436935
               JAN. 1,1987 IS JULIAN DAY NUMBER 2446797
 
REMARKS:
      Julian period was devised by Joseph Scaliger in 1582.
      Julian day number #1 started on Jan. 1,4713 B.C. Three major
      chronological cycles begin on the same day. A 28-year solar
      cycle, a 19-year luner cycle, a 15-year indiction cycle, used
      in ancient Rome to regulate taxes. It will take 7980 years
      to complete the period, the product of 28, 19, and 15.
      Scaliger named the period, date, and number after his father
      Julius (not after the Julian calendar). This seems to have
      caused a lot of confusion in text books. Scaliger name is
      spelled three different ways. Julian date and Julian day
      number are interchanged. A Julian date is used by astronomers
      to compute accurate time, It has a fraction. When truncated to
      an integer it is called an Julian day number. This function
      was in a letter to the editor of the communications of the acm
      volume 11 / number 10 / october 1968. The Julian day number
      can be converted to a year, month, day, day of week, day of
      year by calling subroutine W3FS26.


IW3MAT

The IW3MAT function tests for match two integer arrays.

USAGE:  II = IW3MAT(L1,L2,N)

   Input variables:
      L1     ARG LIST  INTEGER ARRAY TO MATCH WITH L2
      L2     ARG LIST  INTEGER ARRAY TO MATCH WITH L1
      N      ARG LIST  NUMBER OF INTEGER WORDS TO TEST FOR MATCH
 
   Output variables:
      IW3MAT FUNCTION  LOGICAL .TRUE. IF L1 AND L2 MATCH ON ALL WORDS,
                      LOGICAL .FALSE. IF NOT MATCH ON ANY WORD


IW3PDS

The IW3PDS function tests for match of two PDS.

USAGE:  II = IW3PDS(L1,L2,KEY)
        II = IW3PDB(L1,L2,KEY)    ALIAS

   Input variables:
      L1     ARG LIST  CHARACTER ARRAY TO MATCH WITH L2,
                       L1 CAN ALSO BE A 3 WORD INTEGER ARRAY
      L2     ARG LIST  CHARACTER ARRAY TO MATCH WITH L1,
                       L2 CAN ALSO BE A 3 WORD INTEGER ARRAY
      KEY    ARG LIST  0, DO NOT INCLUDE THE DATE (BYTES 13-17) IN
                          MATCH.
                       1, MATCH 24 BYTES OF PDS
                       2, MATCH BYTES 1-3, 5-12 OF PDS
                       3, MATCH BYTES 1-3, 7-12 OF PDS

   Output variables:
     IW3PDB FUNCTION  LOGICAL .TRUE. IF L1 AND L2 MATCH ON ALL CHAR.,
                      LOGICAL .FALSE. IF NOT MATCH ON ANY CHAR.

REMARK: 
       Alias added because of name change in grib write up.
       name of pdb (product definition block) was changd to
       PDS (Product Definition Section).




IW3UNP29

The IW3UNP29 routine reads and unpacks one report into the unpacked
             Office Note ON29/124 format.

USAGE:    II = IW3UNP29(NUNIT, OBS, IER)

   Input argument list:
      NUNIT    - FORTRAN UNIT NUMBER FOR SEQUENTIAL DATA SET CONTAINING
               - PACKED JBUFR REPORTS OR PACKED AND BLOCKED OFFICE NOTE
               - 29/124 REPORTS
 
    Output argument list:
      OBS      - ARRAY CONTAINING ONE REPORT IN UNPACKED OFFICE NOTE
               - 29/124 FORMAT.  FORMAT IS MIXED, USER MUST EQUIVALENCE
               - INTEGER AND CHARACTER ARRAYS TO THIS ARRAY (SEE
               - DOCBLOCK FOR W3FI64 IN /nwprod/w3libs/w3lib.source
               - OR WRITEUPS ON W3FI64, ON29, ON124 FOR HELP)
               - THE LENGTH OF THE ARRAY SHOULD BE AT LEAST 1608
      IER      - RETURN FLAG (EQUAL TO FUNCTION VALUE) - SEE REMARKS
 
    Input files:
      UNIT AA  - SEQUENTIAL JBUFR OR OFFICE NOTE 29/124 DATA SET ("AA"
               - IS UNIT NUMBER SPECIFIED BY INPUT ARGUMENT "NUNIT")
 
    Output files:
      UNIT 06  - PRINTOUT

IXGB

The IXGB routine makes index record.

USAGE:    CALL WRGI1R(LUGB,LSKIP,LGRIB,LUGI)

   Input arguments:
      LUGB         INTEGER LOGICAL UNIT OF INPUT GRIB FILE
      LSKIP        INTEGER NUMBER OF BYTES TO SKIP BEFORE GRIB MESSAGE
      LGRIB        INTEGER NUMBER OF BYTES IN GRIB MESSAGE
      NLEN         INTEGER LENGTH OF EACH INDEX RECORD IN BYTES
      NNUM         INTEGER INDEX RECORD NUMBER TO MAKE

   Output arguments:
      MLEN         INTEGER ACTUAL VALID LENGTH OF INDEX RECORD
      CBUF         CHARACTER*1 (MBUF) BUFFER TO RECEIVE INDEX DATA


LENGDS

The LENGDS function returns the length of a grid.

USAGE:    CALL LENGDS(KGDS)

   Input arguments:
      KGDS         INTEGER (200) GDS PARAMETERS IN W3FI63 FORMAT

   Output arguments:
      LENGDS       INTEGER SIZE OF GRID

MOVA2I

The MOVA2I function moves a bit string from a CHARACTER*1 to INTEGER.

USAGE:     I = MOVA2I(A)

   Input argument :
      A         CHARACTER*1 variable that holds the bitstring to extract

   Return argument :
      MOVA2I    INTEGER Value of the bitstring in character a


ORDERS

The ORDERS routine is a fast and stable multipurpose sort.

USAGE: CALL ORDERS(IN,ISORT,IDATA,INDEX,N,M,I1,I2)

   Input arguments:
      IN    - INDICATOR OF KEY FORM AND INDEX STATE
              IN =  0  INITIALIZE INDEXES AND SORT CHARACTERS
              IN =  1  INITIALIZE INDEXES AND SORT INTEGERS
              IN =  2  INITIALIZE INDEXES AND SORT REAL NUMBERS
              IN = 10  SORT CHARACTERS WITH INDEXES AS IS
              IN = 11  SORT INTEGERS WITH INDEXES AS IS
              IN = 12  SORT REAL NUMBERS WITH INDEXES ASIS
      ISORT - WORK ARRAY WITH THE SAME DIMENSION AS IDATA
      IDATA - ARRAY OF SORT KEYS AS DESCRIBED BY IN
      INDEX - ARRAY OF INDEXES REPRESENTING THE SORTED IDATA
      N     - DIMENSION OF ISORT, IDATA, AND INDEX
      M     - OFFSET (IN KEY-WORDS) BETWEEN SUCCESSIVE MEMBERS OF IDATA
      I1    - BYTE LENGTH OF THE KEY-WORDS
      I2    - NOT USED; INCLUDED FOR COMPATABILITY WITH ORIGINAL CRAY
              ROUTINE

   Output arguments:
      INDEX - ARRAY OF INDEXES REPRESENTING THE SORTED 'IDATA'

REMARKS:
        The one byte radix method was selected for orders because it
        offers a good ratio of memory requirement to operation count
        for producing a sort. Because of recursive manipulation of indexes
        in one of the loops, this may actually take slightly longer on some
        vector machines than a (more work intensive) one bit radix method.
        In general, though, the one byte method is faster. Any larger radix
        presents exponentially increasing memory required. NOTE that the
        implementation uses very little local data space, and only modesT
        user-supplied memory.

PDSENS

The PDSENS routine packs grib pds extension 41- for ensemble.

USAGE:    CALL PDSENS.F(KENS,KPROB,XPROB,KCLUST,KMEMBR,ILAST,MSGA)

   Input argument list:
      KENS(5)    - BYTES 41-45 (GENERAL SECTION, ALWAYS PRESENT.)
      KPROB(2)   - BYTES 46-47 (PROBABILITY SECTION, PRESENT ONLY IF NEEDE
      XPROB(2)   - BYTES 48-51&52-55 (PROBABILITY SECTION, IF NEEDED.)
      KCLUST(16) - BYTES 61-76 (CLUSTERING SECTION, IF NEEDED.)
      KMEMBR(80) - BYTES 77-86 (CLUSTER MEMBERSHIP SECTION, IF NEEDED.)
      ILAST      - LAST BYTE TO BE PACKED (IF GREATER OR EQUAL TO FIRST BY
                   IN ANY OF FOUR SECTIONS ABOVE, WHOLE SECTION IS PACKED.

   Output argument list:      (INCLUDING WORK ARRAYS)
      MSGA       - FULL PDS SECTION, INCLUDING NEW ENSEMBLE EXTENSION

REMARKS:
        Use PDSEUP routine for unpacking pds ensemble extension.
        Subprogram can be called from a multiprocessing environment.


PDSEUP

The PDSEUP routine unpacks grib PDS extension 41- for ensemble.

USAGE:    CALL PDSENS.F(KENS,KPROB,XPROB,KCLUST,KMEMBR,ILAST,MSGA)

   Input argument list: 
      ILAST      - LAST BYTE TO BE UNPACKED (IF GREATER/EQUAL TO FIRST BYT
                   IN ANY OF FOUR SECTIONS BELOW, WHOLE SECTION IS PACKED.
      MSGA       - FULL PDS SECTION, INCLUDING NEW ENSEMBLE EXTENSION

   Output argument list:      (INCLUDING WORK ARRAYS)
      KENS(5)    - BYTES 41-45 (GENERAL SECTION, ALWAYS PRESENT.)
      KPROB(2)   - BYTES 46-47 (PROBABILITY SECTION, PRESENT ONLY IF NEEDE
      XPROB(2)   - BYTES 48-51&52-55 (PROBABILITY SECTION, IF NEEDED.)
      KCLUST(16) - BYTES 61-76 (CLUSTERING SECTION, IF NEEDED.)
      KMEMBR(80) - BYTES 77-86 (CLUSTER MEMBERSHIP SECTION, IF NEEDED.)

REMARKS:
        Use pdsens.f for packing pds ensemble extension.
        Subprogram can be called from a multiprocessing environment.



PUTGB

The PUTGB routine packs and writes a grib message.

USAGE:    CALL PUTGB(LUGB,KF,KPDS,KGDS,LB,F,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      KF           INTEGER NUMBER OF DATA POINTS
      KPDS         INTEGER (200) PDS PARAMETERS
           (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
      KGDS         INTEGER (200) GDS PARAMETERS
           (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
      LB           LOGICAL*1 (KF) BITMAP IF PRESENT
      F            REAL (KF) DATA

    Output arguments:
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     OTHER  W3FI72 GRIB PACKER RETURN CODE
 
REMARKS:
        Subprogram can be called from a multiprocessing environment.
        DO NOT engage the same logical unit from more than one processor.

PUTGBE

The PUTGBE routine packs and writes a grib message.

USAGE:    CALL PUTGBE(LUGB,KF,KPDS,KGDS,KENS,LB,F,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      KF           INTEGER NUMBER OF DATA POINTS
      KPDS         INTEGER (200) PDS PARAMETERS
           (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
      KGDS         INTEGER (200) GDS PARAMETERS
           (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
      KENS         INTEGER (200) ENSEMBLE PDS PARMS
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG
      LB           LOGICAL*1 (KF) BITMAP IF PRESENT
      F            REAL (KF) DATA

   Output arguments:
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     OTHER  W3FI72 GRIB PACKER RETURN CODE
REMARKS:
        Subprogram can be called from a multiprocessing environment.
        DO NOT engage the same logical unit from more than one processor.


PUTGBEN

The PUTGBEN routine packs and writes a grib message.

USAGE:    CALL PUTGBEN(LUGB,KF,KPDS,KGDS,KENS,IBS,NBITS,LB,F,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      KF           INTEGER NUMBER OF DATA POINTS
      KPDS         INTEGER (200) PDS PARAMETERS
           (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
      KGDS         INTEGER (200) GDS PARAMETERS
           (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
      KENS         INTEGER (200) ENSEMBLE PDS PARMS
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG
      IBS          INTEGER BINARY SCALE FACTOR (0 TO IGNORE)
      NBITS        INTEGER NUMBER OF BITS IN WHICH TO PACK (0 TO IGNORE)
      LB           LOGICAL*1 (KF) BITMAP IF PRESENT
      F            REAL (KF) DATA

   Output arguments:
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     OTHER  W3FI72 GRIB PACKER RETURN CODE
 
  REMARKS: 
          Subprogram can be called from a multiprocessing environment.
          DO NOT engage the same logical unit from more than one processor.


PUTGBENS

The PUTGBENS routine packs and writes a grib message.

USAGE:    CALL PUTGBENS(LUGB,KF,KPDS,KGDS,KENS,LB,F,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      KF           INTEGER NUMBER OF DATA POINTS
      KPDS         INTEGER (200) PDS PARAMETERS
           (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
      KGDS         INTEGER (200) GDS PARAMETERS
           (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
      KENS         INTEGER (200) ENSEMBLE PDS PARMS
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG
      LB           LOGICAL*1 (KF) BITMAP IF PRESENT
      F            REAL (KF) DATA

    Output arguments:
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     OTHER  W3FI72 GRIB PACKER RETURN CODE
 
REMARKS:
        Subprogram can be called from a multiprocessing environment.
        DO NOT engage the same logicaL unit from more than one processor.


PUTGBEX

The PUTGBEX routine packs and writes a grib message.

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

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      KF           INTEGER NUMBER OF DATA POINTS
      KPDS         INTEGER (200) PDS PARAMETERS
           (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
 
      KGDS         INTEGER (200) GDS PARAMETERS
           (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
      KENS         INTEGER (200) ENSEMBLE PDS PARMS
           (1)   - APPLICATION IDENTIFIER
           (2)   - ENSEMBLE TYPE
           (3)   - ENSEMBLE IDENTIFIER
           (4)   - PRODUCT IDENTIFIER
           (5)   - SMOOTHING FLAG
      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) BITMAP IF PRESENT
      F            REAL (KF) DATA

   Output arguments:
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     OTHER  W3FI72 GRIB PACKER RETURN CODE
 
REMARKS:
        Subprogram can be called from a multiprocessing environment.
        DO NOT engage the same logical unit from more than one processor.


PUTGBN

The PUTGBN routine packs and writes a grib message.

USAGE:    CALL PUTGBN(LUGB,KF,KPDS,KGDS,NBITS,LB,F,IRET)

   Input arguments:
      LUGB         INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
      KF           INTEGER NUMBER OF DATA POINTS
      KPDS         INTEGER (200) PDS PARAMETERS
           (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
      KGDS         INTEGER (200) GDS PARAMETERS
           (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
      IBS          INTEGER BINARY SCALE FACTOR (0 TO IGNORE)
      NBITS        INTEGER NUMBER OF BITS IN WHICH TO PACK (0 TO IGNORE)
      LB           LOGICAL*1 (KF) BITMAP IF PRESENT
      F            REAL (KF) DATA

   Output arguments:
      IRET         INTEGER RETURN CODE
                     0      ALL OK
                     OTHER  W3FI72 GRIB PACKER RETURN CODE

REMARKS:
        Subprogram can be called from a multiprocessing environment.
        DO NOT engage the same logical unit from more than one processor.


Q9IE32

The Q9IE32 routine converts IBM370 floating point numbers to ieee
           floating point numbers.

USAGE:    CALL Q9IE32(A, B, N, ISTAT)

   Input argument list:
      A        - REAL*4 ARRAY OF IBM370 32 BIT FLOATING POINT NUMBERS
      N        - NUMBER OF POINTS TO CONVERT
 
    Output argument list:
      B        - REAL*4 ARRAY OF IEEE 32 BIT FLOATING POINT NUMBERS
      ISTAT    - NUMBER OF POINT GREATER THAN 10E+38, NUMBERS ARE SET TO
                 IEEE INFINITY, ONE IS ADDED TO ISTAT. NUMBERS LESS THAN
                 E-38 ARE SET TO ZERO , ONE IS  NOT ADDED TO ISTAT.
 
REMARKS:
        See ieee task 754 standard floating point arithmetic
        for more information about ieee floating point.


R63W72

The R63W72 routine determines the integer pds and gds parameters
           for the grib1 packing routine w3fi72 given the parameters
           returned from the grib1 unpacking routine w3fi63.

USAGE:    CALL R63W72(KPDS,KGDS,IPDS,IGDS)

   Input argument list:
      KPDS     - INTEGER (200) PDS PARAMETERS FROM W3FI63
      KGDS     - INTEGER (200) GDS PARAMETERS FROM W3FI63
 
   Output argument list:
      IPDS     - INTEGER (200) PDS PARAMETERS FOR W3FI72
      IGDS     - INTEGER (200) GDS PARAMETERS FOR W3FI72
 
REMARKS:
        KGDS and IGDS extend beyond their dimensions here
        if pl parameters are present.


SBYTE

The SBYTE routine packs the byte into a target word or array.
          bits surrounding the byte in the target area are unchanged.

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

   Input arguments:
      IPACKD    THE WORD OR ARRAY WHICH WILL CONTAIN THE
                PACKED BYTE.  BYTE MAY CROSS WORD BOUNDARIES.
      IUNPKD    THE WORD CONTAINING THE RIGHT-JUSTIFIED BYTE
                TO BE PACKED.
      NOFF      THE NUMBER OF BITS TO SKIP, LEFT TO RIGHT,
                IN 'IPACKD' IN ORDER TO LOCATE WHERE THE
                BYTE IS TO BE PACKED.
      NBITS     NUMBER OF BITS IN THE BYTE TO BE PACKED.
                MAXIMUM OF 64 BITS ON 64 BIT MACHINE, 32
                BITS ON 32 BIT MACHINE.

   Output arguments:
      IPACKD    WORD OR CONSECUTIVE WORDS CONTAINING THE
                REQUESTED BYTE.


SBYTES

The SBYTES routine packs the byte into a target word or array.
           bits surrounding the byte in the target area are unchanged.

USAGE:    CALL SBYTES (IPACKD,IUNPKD,NOFF,NBITS,ISKIP,ITER)

   Input arguments:
      IPACKD    THE WORD OR ARRAY WHICH WILL CONTAIN THE
                PACKED BYTE.  BYTE MAY CROSS WORD BOUNDARIES.
      IUNPKD    THE WORD CONTAINING THE RIGHT-JUSTIFIED BYTE
                TO BE PACKED.
      NOFF      THE NUMBER OF BITS TO SKIP, LEFT TO RIGHT,
                IN 'IPACKD' IN ORDER TO LOCATE WHERE THE
                BYTE IS TO BE PACKED.
      NBITS     NUMBER OF BITS IN THE BYTE TO BE PACKED.
                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 'IUNPKD' IN ORDER TO LOCATE THE 
                NEXT BYTE TO BE PACKED.
      ITER      THE NUMBER OF BYTES TO BE PACKED.


   Output arguments:
      IPACKD    WORD OR CONSECUTIVE WORDS CONTAINING THE
                REQUESTED BYTE.


SKGB

The SKGB routine searchs for next grib message.

USAGE:    CALL SKGB(LUGB,ISEEK,MSEEK,LSKIP,LGRIB)

   Input arguments:
      LUGB         INTEGER LOGICAL UNIT OF INPUT GRIB FILE
      ISEEK        INTEGER NUMBER OF BYTES TO SKIP BEFORE SEARCH
      MSEEK        INTEGER MAXIMUM NUMBER OF BYTES TO SEARCH

   Output arguments:
      LSKIP        INTEGER NUMBER OF BYTES TO SKIP BEFORE MESSAGE
      LGRIB        INTEGER NUMBER OF BYTES IN MESSAGE
                   (0 IF NOT FOUND)


SUMMARY

The SUMMARY routine makes system call to return various useful parameters.

USAGE:     SUMMARY()

   Input arguments:
      NONE

   Output arguments:
      A LIST OF SYSTEM RESOURCE STATISTICS IS PRINTED TO STDOUT.

W3AI00

The W3AI00 routine converts ieee floating point numbers to 16 bit
           packed office note 84 format.

USAGE:  CALL W3AI00 (REAL8, PACK, LABEL)

   Input arguments:
      REAL8    ARRAY OF CRAY FLOATING POINT NUMBERS
      LABEL    SIX 8-BYTE INTEGER WORDS.
               MUST HAVE FIRST 8 OF 12 32 BIT
               WORD OFFICE NOTE 84 LABEL. WORD 6 MUST HAVE
               IN BITS 31-00 THE NUMBER OF REAL WORDS IN ARRAY
               REAL8 IF J IS GREATER THAN 32743. J IN BITS
               15-0 OF THE 4TH ID WORD IS SET ZERO.
 
   Output arguments:
      PACK     PACKED OUTPUT ARRAY OF INTEGER WORDS OF
               SIZE 6 + (J+3)/4 , J = NO. POINTS IN LABEL
               (FROM WORD 4 BITS 15-00).
               LABEL WILL BE COPIED TO PACK WORDS 1-4. PACK
               WILL CONTAIN THE FOLLOWING IN WORDS 5-6
               WORD 5  BITS 63-48  NUMBER OF BYTES IN WHOLE
                                   RECORD. WILL NOT BE
                                   CORRECT IF J > 32743.
               WORD 5  BITS 47-32  EXCLUSIVE-OR CHECKSUM BY 16
                                   BIT WORDS OF WHOLE ARRAY PACK
                                   EXCLUDING CHECKSUM ITSELF.
               WORD 5  BITS 31-00  CENTER VALUE A = MEAN OF
                                   MAX AND MIN VALUES.
                                   CONVERTED TO IBM 32
                                   FLOATING POINT NUMBER.
               WORD  6 BITS 63-48  ZERO.
               WORD  6 BITS 47-32  16 BIT SHIFT VALUE N. THE
                                   LEAST INTEGER SUCH THAT
                                   ABS(X-A)/2**N LT 1 FOR
                                   ALL X IN REAL8. LIMITED
                                   TO +-127.
               WORD  6 BITS 31-00  NUMBER OF WORDS IN REAL8
                                   IF > 32743, RIGHT ADJUSTED
                                   IF <= 32743 SET ZERO.
 
REMARKS: 
        Pack and label may be equivalenced.  N, the number of
        points in a grid is now in 32 bit id word 12.


W3AI01

The W3AI01 routine unpacks a record in office note 84 format and
           converts the packed data to ieee real floating point numbers.

USAGE:  CALL W3AI01 (PACK, REAL8, LABEL)

   Input arguments:
     PACK    INTEGER ARRAY WITH DATA IN OFFICE NOTE 84
             FORMAT TO BE UNPACKED.

   Output arguments:
     REAL8   REAL ARRAY OF N WORDS. WHERE N IS GIVEN IN
             WORD 6 OF PACK. WORD 6 OF PACK MUST
             CONTAIN CENTER AND SCALING VALUES.
     LABEL   SIX WORD INTEGER LABEL COPIED FROM PACK, 12
             OFFICE NOTE 84 32 BIT ID'S THAT ARE STORED INTO
             SIX 64-BIT WORDS.

REMARKS: 
        Label and pack may be equivalenced.


W3AI08

The W3AI08 routine unpacks a grib field to the exact grid specified
           in the message, isolate the bit map and make the values 
           of the product description section (PDS) and the grid
           description section (GDS) available in return arrays.

USAGE:    CALL W3AI08(MSGA,KPDS,KGDS,KBMS,DATA,KPTR,KRET)

   Input argument list:
      MSGA     - GRIB FIELD - "GRIB" THRU "7777"   CHAR*1
 
   Output argument list:
      DATA     - ARRAY CONTAINING DATA ELEMENTS
      KPDS     - ARRAY CONTAINING PDS ELEMENTS. (VERSION 0)
           (1)   - ID OF CENTER
           (2)   - MODEL IDENTIFICATION
           (3)   - GRID IDENTIFICATION
           (4)   - GDS/BMS FLAG
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING CENTURY
           (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)  - GRIB SPECIFICATION EDITION NUMBER
      KPDS     - ARRAY CONTAINING PDS ELEMENTS.  (VERSION 1)
           (1)   - ID OF CENTER
           (2)   - MODEL IDENTIFICATION
           (3)   - GRID IDENTIFICATION
           (4)   - GDS/BMS FLAG
           (5)   - INDICATOR OF PARAMETER
           (6)   - TYPE OF LEVEL
           (7)   - HEIGHT/PRESSURE , ETC OF LEVEL
           (8)   - YEAR INCLUDING CENTURY
           (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)  - TOTAL LENGTH OF GRIB MESSAGE (INCLUDING SECTION 0)
      KGDS     - ARRAY CONTAINING GDS ELEMENTS.
           (1)   - DATA REPRESENTATION TYPE
        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
           (7)   - LA(2) LATITUDE OF EXTREME POINT
           (8)   - LO(2) LONGITUDE OF EXTREME POINT
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUNDINAL DIRECTION OF INCREMENT
           (11)  - SCANNING MODE FLAG
        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)   - RESERVED
           (7)   - LOV GRID ORIENTATION
           (8)   - DX - X DIRECTION INCREMENT
           (9)   - DY - Y DIRECTION INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE
        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
           (7)   - LA(2) LATITUDE OF LAST GRID POINT
           (8)   - LO(2) LONGITUDE OF LAST GRID POINT
           (9)   - LONGIT DIR INCREMENT
           (10)  - LATIT DIR INCREMENT
           (11)  - SCANNING MODE FLAG
           (12)  - LATITUDE INTERSECTION
        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)   - RESERVED
           (7)   - LOV - ORIENTATION OF GRID
           (8)   - DX - X-DIR INCREMENT
           (9)   - DY - Y-DIR INCREMENT
           (10)  - PROJECTION CENTER FLAG
           (11)  - SCANNING MODE FLAG
           (12)  - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
           (13)  - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
      KBMS       - BITMAP DESCRIBING LOCATION OF OUTPUT ELEMENTS.
      KPTR       - ARRAY CONTAINING STORAGE FOR FOLLOWING PARAMETERS
           (1)   - UNUSED
           (2)   - UNUSED
           (3)   - LENGTH OF PDS
           (4)   - LENGTH OF GDS
           (5)   - LENGTH OF BMS
           (6)   - LENGTH OF BDS
           (7)   - VALUE OF CURRENT BYTE
           (8)   - UNUSED
           (9)   - GRIB START BYTE NR
          (10)   - GRIB/GRID ELEMENT COUNT
      KRET       - FLAG INDICATING QUALITY OF COMPLETION
 
REMARKS: 
      Values for return flag (kret)
      KRET = 0 - NORMAL RETURN, NO ERRORS
           = 1 - 'GRIB' NOT FOUND IN FIRST 100 CHARS
           = 2 - '7777' NOT IN CORRECT LOCATION
           = 3 - UNPACKED FIELD IS LARGER THAN 32768
           = 4 - GDS/ GRID NOT ONE OF CURRENTLY ACCEPTED VALUES
           = 5 - GRID NOT CURRENTLY AVAIL FOR CENTER INDICATED
           = 8 - TEMP GDS INDICATED, BUT GDS FLAG IS OFF
           = 9 - GDS INDICATES SIZE MISMATCH WITH STD GRID
           =10 - INCORRECT CENTER INDICATOR


W3AI15

The W3AI15 routine converts integers to ACSII.

USAGE: CALL W3AI15 (NBUFA,NBUFB,N1,N2,MINUS)

   Input argument:
      NBUFA  - INPUT ARRAY (INTEGER*4)
         N1  - NUMBER OF INTEGERS IN NBUFA TO BE CONVERTED
         N2  - DESIRED CHARACTER WIDTH OF ASCII NUMBER FIELD
      MINUS  - CHARACTER TO BE INSERTED IN THE HIGH ORDER POSITION
                OF A NEGATIVE NUMBER FIELD
   Output argument:
      NBUFB  - OUTPUT ARRAY (INTEGER*4)


W3AI18

The W3AI18 routine builds a line of information composed of
           user specified character strings.

USAGE:    CALL W3AI18(ITEM, I1, I2, LINE, L, K, N)

   Input argument list:
     ITEM   - CHARACTER STRING TO BE ADDED TO LINE ARRAY
     I1     - NUMBER OF CHARACTER STRINGS TO BE ADDED TO LINE ARRAY
     I2     - NUMBER OF CHARACTERS PER STRING TO ADD TO LINE
     L      - CHARACTER LENGTH OF LINE TO BE BUILT (2.LE.L.LE.256)
     K      - NUMBER OF BLKANK CHARACTERS TO PRECEDE A CHARACTER
              STRING (0.LE.K.LE.256)
     N      - POINTER SET EQUAL TO 0 WHEN BEGINNING A LINE

   Output argument list:
     LINE   - ARRAY IN WHICH CHARACTER STRING ARE PLACED WHILE
              BUILDING ALINE; MUST BE OF TYPE INTEGER
     N      - CHARACTER COUNT, ERROR INDICATOR

   Exit states:
     N = -1   CHARACTER STRING WILL NOT FIT IN THE LINE ARRAY;
              OTHERWISE, EACH TIME A CHACTER STRING IS ADDED
              TO THE LINE, N IS INCREMENTED BY (I2 + K)
REMARKS:
        Each character string included in the item array must
        start on a full word boundary and be equal in length.
        Each successive string must start on the nest fullword
        boundary following the end of the previous string.
        On a Cray this is 8.

        The dimensions of the item array should be at least the
        value of (i1*(i2+j))/4, where the integer j is in the
        range 0.le.j.le.3 and the sum (i2+j) is 4 or a multiple
        of 4. on a Cray this is 8 or a multiple of 8. On a Cray
        (i1*(i2+j))/8, range is 0.le.j.le.7

        The maximum dimension of line is 64 word or 256 bytes.
        on a Cray it is 32 words or 256 bytes.

        The user should set n = 0 each time a line is stated to
        tell w3ai18 to fill the line array with blank characters.
        Each time a character string is added to the line, the
        variable (n) is incremented by (i2 + k). if a character
        string will not fit in the line array, w3ai18 sets n = -1
        and returns to the user. The user will not be able to
        program a recovery procedure for the line being full if
        more than one character string is in the item array.


W3AI19

The W3AI19 routine fills a record block with logical records or
           lines of information.

USAGE: CALL W3AI19 (LINE, L, NBLK, N, NEXT)

   Input argument list:
      LINE       - ARRAY ADDRESS OF LOGICAL RECORD TO BE BLOCKED
      L          - NUMBER OF CHARACTERS IN LINE TO BE BLOCKED
      N          - MAXIMUM CHARACTER SIZE OF NBLK
      NEXT       - FLAG, INITIALIZED TO 0

   Output argument list:
      NBLK       - BLOCK FILLED WITH LOGICAL RECORDS
      NEXT       - CHARACTER COUNT, ERROR INDICATOR

   EXIT STATES:
      NEXT = -1  LINE WILL NOT FIT INTO REMAINDER OF BLOCK;
                 OTHERWISE, NEXT IS SET TO (NEXT + L)
      NEXT = -2  N IS ZERO OR LESS
      NEXT = -3  L IS ZERO OR LESS


W3AI24

The W3AI24 function tests for match of two strings.

USAGE:  II = W3AI24(STRING1,STRING2,LENGTH)

   Input argument list:
      STRING1   CHARACTER ARRAY TO MATCH WITH STRING2
      STRING2   CHARACTER ARRAY TO MATCH WITH STRING1
 
   Output argument list:
      W3AI24    LOGICAL .TRUE. IF S1 AND S2 MATCH ON ALL CHAR.,
                LOGICAL .FALSE. IF NOT MATCH ON ANY CHAR.


W3AI38

The W3AI38 routine converts ebcdic to ascii by character.

USAGE:    CALL W3AI38 (IE, NC)

   Input argument list:
     IE       - CHARACTER*1 ARRAY OF EBCDIC DATA
     NC       - INTEGER,  CONTAINS CHARACTER COUNT TO CONVERT....

   Output argument list:
     IE       - CHARACTER*1 ARRAY OF ASCII DATA

REMARKS:
        Software version of ibm370 translate instruction, by
        changing the two tables we could do a  64, 96, 128  ASCII
        character set, change lower case to upper, etc.
        The AEA routine converts data at a rate of 1.5 million
        characters per sec.
        Cray utility usccti convert ASCII to IBM EBCDIC
        Cray utility uscctc convert IBM EBCDIC to ASCII
        They convert data at a rate of 2.1 million characters per sec.
        CRAY UTILITY TR WILL ALSO DO A ASCII, EBCDIC CONVERSION.
        TR CONVERT DATA AT A RATE OF 5.4 MILLION CHARACTERS PER SEC.
        TR IS IN LIBRARY  /USR/LIB/LIBCOS.A   ADD TO SEGLDR CARD.


W3AI39

The W3AI39 routine translates ASCII field to EBCDIC.

USAGE:    CALL W3AI39 (NFLD,N)

   Input argument list:
     NFLD    - CHARACTER*1 ARRAY OF ASCII DATA
     N       - INTEGER,  CONTAINS CHARACTER COUNT TO CONVERT....

   Output argument list:
     NFLD     - CHARACTER*1 ARRAY OF EBCDIC DATA

REMARKS:
        Software version of ibm370 translate instruction, bY
        changing the table we could do a  64, 96,  ASCII
        character set, change lower case to upper, etc.
        TR converts data at a rate of 5.4 million characters per sec.
        TR is in library  /usr/lib/libcos.a   add to segldr card.


W3AI40

The W3AI40 routine packs constant size binary strings into an array.

USAGE: CALL W3AI40 (KFLD,KOUT,KLEN,KNUM,KOFF)

   Input argument list:
      KFLD     INTEGER INPUT ARRAY OF RIGHT ADJUSTED STRINGS
      KLEN     INTEGER NUMBER OF BITS PER STRING (0 < KLEN < 33)
      KNUM     INTEGER NUMBER OF STRINGS IN 'KFLD' TO PACK
      KOFF     INTEGER NUMBER SPECIFYING THE BIT OFFSET OF THE
               FIRST OUTPUT STRING. THE OFFSET VALUE IS RESET TO
               INCLUDE THE LOW ORDER BIT OF THE LAST PACKED STRING

   Output argument list:
      KOUT     INTEGER OUTPUT ARRAY TO HOLD PACKED STRING(S)
 
   Exit states:
      ERROR    KOFF < 0 IF KLEN HAS AN ILLEGAL VALUE OR KNUM < 1
               THEN KOUT HAS NO STRINGS STORED.
 
REMARKS:
        This subroutine should be written in assembler language.
        The FORTRAN version runs two or three times slower than the
        asembler version. The FORTRAN version can be converted to
        run on other computers with a few changes. The bit manipulation
        functions are the same in IBM370 vs FORTRAN 4.1, MICROSOFT
        FORTRAN 4.10, VAX FORTRAN.  Most modern FORTRAN compiler have
        AND, OR, SHIFT functions. If you are running on a PC, VAX and
        your input was made on a IBM370, APOLLO SUN, H.P.. etc.
        You may have to add more code to reverse the order O bytes in 
        an integer word. NCAR sbytes can be used instead of this subroutine.
        Please use NCAR sbytes subroutine instead of this subroutine.


W3AI41

The W3AI41 routine unpack consecutive binary strings of the same size
           from one user supplied array and store them in the same order
           right aligned in another array. w3ai41 is the reverse of w3ai40. 

USAGE:    CALL W3AI41 (KFLD, KOUT, KLEN, KNUM, KOFF)
 
   Input argument list:
      KFLD     INTEGER ARRAY CONTINING BINARY STRING(S)
      KLEN     INTEGER NUMBER OF BITS PER STRING (0 < KLEN < 65)
      KNUM     INTEGER NUMBER OF STRINGS TO UNPACK. THIS VALUE MUST
               NOT EXCEED THE DIMENSION OF 'KOUT'.
      KOFF     INTEGER NUMBER SPECIFYING THE BIT OFFSET OF THE
               FIRST STRING 'KFLD'. THE OFFSET VALUE IS RESET TO
               INCLUDE THE LOW ORDER BIT OF THE LAST STRING UNPACKED
               ('KOFF' > 0 )

   Output argument list:
      KOUT     INTEGER*4 ARRAY HOLDING UNPACKED STRING(S)
 
   Exit states:
      ERROR    'KOFF' < 0 IF 'KLEN' HAS AN ILLEGAL VALUE OR 'KNUM' < 1
               THEN 'KOUT' HAS NO STRINGS STORED.

REMARKS:
        This subroutine should be written in assembler language.
        The FORTRAN version runs two or three times slower than the
        asembler version. The FORTRAN version can be converted to
        run on other computers with a few changes. The bit manipulation
        functions are the same in IBM370 vs FORTRAN 4.1, MICROSOFT
        FORTRAN 4.10, VAX FORTRAN.  Most modern FORTRAN compiler have
        AND, OR, SHIFT functions. If you are running on a PC, VAX and
        your input was made on a IBM370, APOLLO SUN, H.P.. etc.
        You may have to add more code to reverse the order O bytes in
        an integer word. NCAR sbytes can be used instead of this subroutine.
        Please use NCAR sbytes subroutine instead of this subroutine.


W3AQ15

The W3AQ15 routine converts 32 or 64 bit binary time (GMT) into
           a 16 bit string and store these 4 packed decimal
           numbers into bytes 39 and 40 of the output array.

USAGE:    CALL W3AQ15(ITIME, QDESCR)

   Input argument list:
      ITIME     INTEGER WORD CONTAINING TIME IN BINARY

   Output argument list:
      QDESCR    ARRAY CONTAINING TRANSMISSION QUEUE DESCRIPTOR
                NOTE- TIME WILL BE PLACED IN 39 AND 40TH
                BYTE OF THIS ARRAY AS 4 (4 BIT) BCD.

REMARKS:
        The user can obtain the current time in GMT by invocking
        The w3 library routine w3fq02 which fills an eight word array
        with the current date and time. The 5th word from this array
        contains the time which can be passed to w3aq15 as the input
        parameter-itime.


W3AS00

The W3AS00 routine gets parm field from command-line.

USAGE:    CALL W3AS00(NCH_PARM, CPARM, IRET_PARM)

   Output argument list:      (INCLUDING WORK ARRAYS)
      NCH_PARM   NO. OF CHARACTERS IN THE PARM FIELD
      CPARM      C*(*)   CPARM -- THE DESTINATION FOR THE PARMFIELD
                         OBTAINED FROM THE COMMAND LINE;
                         USER SHOULD DEFINE THE CHARACTER STRING FOR
                         A SIZE .LE. 101-BYTES, WHICH WOULD BE
                         BIG ENOUGH FOR THE 100-CHAR IBM LIMIT PLUS
                         ONE EXTRA BYTE FOR MY NULL-TERMINATOR.

      IRET_PARM   RETURN CODE
                     0:  NORMAL RETURN
                    -1:  ABNORMAL EXIT.  THE USER HAS FAILED
                         TO DEFINE THE CPARM DESTINATION
                         AS A CHARACTER STRING.

                    +1:  WARNING:
                         THE GIVEN ARG IN THE COMMAND LINE WAS
                         TOO LONG TO FIT IN THE DESTINATION: CPARM,
                         SO I HAVE TRUNCATED IT.

                    +2:  WARNING:  NO ARGS AT ALL ON COMMAND LINE,
                         SO I COULD NOT FETCH THE PARM FIELD.

                    +3:  WARNING:  NO "PARM="-ARGUMENT EXISTS
                         AMONG THE ARGS ON THE COMMAND LINE,
                         SO I COULD NOT FETCH THE PARM FIELD.

   Output files:
      FT06F001           SOME CHECKOUT PRINTOUT

REMARKS:
        To emulate the ibm parm field, the user should key_in on the
        command line:

               PARM='IN BETWEEN THE SINGLE_QUOTES IS THE PARM FIELD'

         What is returned from w3as00() from the parm= arg is
         the parm field: which starts with the location beyond the
         equal_sign of the keyword "parm=", and includes everything
         which was within the bounds of the single-quote signs.
         But the quote signs themselves will disappear; and a null-
         terminator will be added.
         The starting "parm=" is a key word for the parms, and should
         not be used to start any other argument.


W3CTZDAT

The W3CTZDAT routine changes the time zone of a date and time.

USAGE:  CALL W3CTZDAT(NTZ,IDAT,JDAT)

   Input variables:
     NTZ        INTEGER NEW TIME ZONE DIFFERENTIAL FROM UTC
                IN SIGNED HH OR HHMM FORMAT
                (IF NTZ IS INVALID, NO CHANGE IS MADE.)
     IDAT       INTEGER (8) NCEP ABSOLUTE DATE AND TIME
                (YEAR, MONTH, DAY, TIME ZONE,
                 HOUR, MINUTE, SECOND, MILLISECOND)

   Output variables:
     JDAT       INTEGER (8) NCEP ABSOLUTE DATE AND TIME
                (YEAR, MONTH, DAY, TIME ZONE,
                 HOUR, MINUTE, SECOND, MILLISECOND)


W3DIFDAT

The W3DIFDAT routine returns a time interval between two dates.

USAGE:  CALL W3DIFDAT(JDAT,IDAT,IT,RINC)

   Input variables:
      JDAT       INTEGER (8) NCEP ABSOLUTE DATE AND TIME
                 (YEAR, MONTH, DAY, TIME ZONE,
                 HOUR, MINUTE, SECOND, MILLISECOND)
      IDAT       INTEGER (8) NCEP ABSOLUTE DATE AND TIME
                 (YEAR, MONTH, DAY, TIME ZONE,
                 HOUR, MINUTE, SECOND, MILLISECOND)
      IT         INTEGER RELATIVE TIME INTERVAL FORMAT TYPE
                 (-1 FOR FIRST REDUCED TYPE (HOURS ALWAYS POSITIVE),
                   0 FOR SECOND REDUCED TYPE (HOURS CAN BE NEGATIVE),
                   1 FOR DAYS ONLY, 2 FOR HOURS ONLY, 3 FOR MINUTES ONLY,
                   4 FOR SECONDS ONLY, 5 FOR MILLISECONDS ONLY)

   Output variables:
      RINC       REAL (5) NCEP RELATIVE TIME INTERVAL
                 (DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS)
                 (TIME INTERVAL IS POSITIVE IF JDAT IS LATER THAN IDAT.)


W3DOXDAT

The W3DOXDAT routine returns week day, year day, and julian day.

USAGE:  CALL W3DOXDAT(IDAT,JDOW,JDOY,JDAY)

   Input variables:
      IDAT       INTEGER (8) NCEP ABSOLUTE DATE AND TIME
                 (YEAR, MONTH, DAY, TIME ZONE,
                  HOUR, MINUTE, SECOND, MILLISECOND)
 
   Output variables:
      JDOW       INTEGER DAY OF WEEK (1-7, WHERE 1 IS SUNDAY)
      JDOY       INTEGER DAY OF YEAR (1-366, WHERE 1 IS JANUARY 1)
      JDAY       INTEGER JULIAN DAY (DAY NUMBER FROM JAN. 1,4713 B.C.)


W3FA01

The W3FA01 routine calculates the dewpoint temperature and the
           pressure and temperature of the lifting condensation level.


USAGE: CALL W3FA01(P,T,RH,TD,PLCL,TLCL)

   Input variables:
     P       PARCEL PRESSURE IN MILLIBARS
     T       PARCEL TEMPERATURE IN DEGREES CELSIUS
     RH      PARCEL RELATIVE HUMIDITY IN PERCENT

   Output variables:
     TD      DEWPOINT TEMPERATURE IN DEGREES CELSIUS
     PLCL    PRESSURE OF LCL IN MILLIBARS
     TLCL    TEMPERATURE AT LCL IN DEGREES CELSIUS


W3FA03

The W3FA03 routine computes the standard height, temperature, and potential
           temperature given the pressure in millibars ( > 8.68 MB ).

USAGE:    CALL W3FA03(PRESS,HEIGHT,TEMP,THETA)

   Input argument list:
      PRESS      PRESSURE IN MILLIBARS

   Output argument list:
      HEIGHT     HEIGHT IN METERS
      TEMP       TEMPERATURE IN DEGREES KELVIN
      THETA      POTENTIAL TEMPERATURE IN DEGREES KELVIN

REMARKS: 
        Not valid for pressures less than 8.68 millibars, declare
        all parameters as type real.


W3FA03V

The W3FA03V routine computes the standard height, temperature, and potential
            temperature given the pressure in millibars ( > 8.68 MB ).

USAGE:    CALL W3FA03V(PRESS,HEIGHT,TEMP,THETA,N)

   Input argument list:
      PRESS      PRESSURE ARRAY IN MILLIBARS

   Output argument list:
      HEIGHT     HEIGHT ARRAY IN METERS
      TEMP       TEMPERATURE ARRAY IN DEGREES KELVIN
      THETA      POTENTIAL TEMPERATURE ARRAY IN DEGREES KELVIN
      N          NUMBER OF POINTS IN ARRAY PRESS

REMARKS:
        Not valid for pressures less than 8.68 millibars, declare
        all parameters as type real.

WARNING:
        Height, temp, theta are now all arrays, you must
        have arrays of size n or you will wipe out memory.


W3FA04

The W3FA04 routine computes the standard pressure, temperature, and 
           potential temperature given the height in meters ( < 32 km ).

USAGE:  CALL W3FA04 (HEIGHT, PRESS, TEMP, THETA)

   Input variables:
      HEIGHT        HEIGHT IN METERS
 
   Output variables:
      PRESS         STANDARD PRESSURE IN MILLIBARS
      TEMP          TEMPERATURE IN DEGREES KELVIN
      THETA         POTENTIAL TEMPERATURE IN DEGREES KELVIN
 
REMARKS:
        Not valid for heights greater than 32 km.
        declare all parameters as type real*4
 



W3FA06

The W3FA06 routine calculates the lifted index of the parcel.

USAGE: CALL W3FA06(P,T,RH,T5,TLI)

   INPUT VARIABLES:
      P         PARCEL PRESSURE IN MILLIBARS
      T         PARCEL TEMPERATAURE IN DEGREES CELSIUS
      RH        PARCEL RELATIVE HUMIDITY IN PERCENT
      T5        TEMPERATURE AT THE 500MB LEVEL IN DEG. CELSIUS

   OUTPUT VARIABLES:
      TLI       LIFTED INDEX IN DEGREES CELSIUS
                TLI = 9.9999  ITERATION DIVERGES;
                RETURN TO USER PROGRAM


W3FA09

The W3FA09 function computes saturation vapor pressure in kilopascals.

USAGE:  VP = W3FA09 (TK)

   Input argument list:
     TK    REAL*8 TEMPERATURE IN KELVINS. IF TK < 223.16, THE VALUE
           223.16 WILL BE USED.  IF TK > 323.16, THE VALUE 323.16
           WILL BE USED AS THE ARGUMENT. 'TK' ITSELF IS UNCHANGED.

   Output argument list:
     VP    SATURATION VAPOR PRESSURE IN KILOPASCALS.
           0.0063558 < VP < 12.3395

REMARKS:
        W3FA09 may be declared real*8 so that a real*8 value is 
        returned, but no increase in accuracy is implied.


W3FA11

The W3FA11 routine computes double precision  coefficients used in
           generating legendre polynomials in subroutine w3fa12.

USAGE:  CALL W3FA11 (EPS,JCAP)

   Input variables:
     JCAP     ZONAL WAVE NUMBER THIRTY, ETC.

   Output variables:
     EPS      REAL COEFFICIENTS USED IN
              COMPUTING LEGENDRE POLYNOMIALS.
              DIMENSION OF EPS IS (JCAP+2)*(JCAP+1)


W3FA12

The W3FA12 routine computes legendre polynomials at a
           given latitude.

USAGE:  CALL W3FA12 (PLN,COLRAD,JCAP,EPS)

   Input variables:
      COLRAD   COLATITUDE IN RADIANS OF DESIRED POINT.
      JCAP     FOR RHOMBOIADAL TRUNCATION OF ZONAL WAVE
      EPS      COEFF. USED IN RECURSION EQUATION.
               DIMENSION OF EPS IS (JCAP+2)*(JCAP+1)

   Output variables:
      PLN      REAL LOCATIONS CONTAIN LEGENDRE
               POLNOMIALS , SIZE IS (JCAP+2)*(JCAP+1)


W3FA13

The W3FA13 routine computes trig functions used in 2.5 by 2.5 lat,lon
           mapping routines.

USAGE:  CALL W3FA13(TRIGS,RCOS)

   Input variables:
     NONE

   Output variables:
     TRIGS    216 TRIG VALUES, USED BY SUBROUTINE W3FA12.
     RCOS     37  COLATITUDES USED BY SUBROUTINES W3FT09,W3FT11


W3FB00

The W3FB00 routine converts the coordinates of a location on earth
           from the natural coordinate system of latitude/longitude
           to the grid (i,j) coordinate system overlaid on the polar
           stereographic map projection true at 60 N.

USAGE:  CALL W3FB00 (ALAT, ALONG, XMESHL, XI, XJ)

   Input variables:
      ALAT     LATITUDE IN DEG.  (-20.0(S. HEMIS) ) ALAT ) 90.0)
      ALONG    WEST LONGITUDE IN DEGREES
      XMESHL   MESH LENGTH OF GRID IN KILOMETERS AT 60N

   Output variables:
      XI       I OF THE POINT RELATIVE TO NORTH POLE
      XJ       J OF THE POINT RELATIVE TO NORTH POLE

REMARKS:
        The grid used in this subroutine has its origin (i=0,j=0)
        at the north pole, so if the user's grid has its origin at a
        point other than the north pole, a translation is required to
        get i and j. The subroutine grid is oriented so that longitude
        80W is parallel to the gridlines of i=constant. the radius of
        the earth is taken to be 6371.2 km.
        All parameters in the call statement must be real. 
        This code will not vectorize on a cray. You will have put
        it line to vectorize it.


W3FB01

The W3FB01 routine converts the coordinates of a location from the
           grid(i,j) coordinate system overlaid on the polar
           stereographic map projection true at 60N to the natural
           coordinate system of latitude/longitude on the earth. 

USAGE:  CALL W3FB01 (XI, XJ, XMESHL, ALAT, ALONG)

   Input variables:
     XI            I OF THE POINT RELATIVE TO NORTH POLE
     XJ            J OF THE POINT RELATIVE TO NORTH POLE
     XMESHL        MESH LENGTH OF GRID IN KILOMETERS AT 60N

   Output variables:
     ALAT          LATITUDE IN DEG. (-20.0(S. HEMIS) < ALAT < 90.0)
     ALONG         WEST LONGITUDE IN DEGREES

REMARKS: 
        The grid used in this subroutine has its origin (i=0,j=0)
        at the north pole, so if the user's grid has its origin at a
        point other than the north pole, a translation is required to
        get i and j for input into w3fb01. The subroutine grid is
        oriented so that longitude 80w is parallel to gridlines of
        i=constant. The earth's radius is taken to be 6371.2 km.
        All parameters in the call statement must be reaL.


W3FB02

The W3FB02 routine computes i and j coordinates for a latitude/longitude
           point on the southern hemisphere polar stereographic map
           projection.

USAGE:  CALL W3FB02 (ALAT, ALONG, XMESHL, XI, XJ)

   Input variables:
     ALAT    REAL*4 LATITUDE (S.H. LATITUDES ARE NEGATIVE)
     ALONG   REAL*4 WEST LONGITUDE
     XMESHL  REAL*4 GRID INTERVAL IN KM.

   Output variables:
     XI      REAL*4 I COORDINATE
     XJ      REAL*4 J COORDINATE


W3FB03

The W3FB03 routine converts i,j grid coordinates to the corresponding
           latitude/longitude on a southern hemisphere polar
           stereographic map projection.

USAGE:  CALL W3FBO3 (XI, XJ, XMESHL, TLAT, TLONG)

   Input variables:
     XI       REAL I COORDINATE
     XJ       REAL J COORDINATE
     XMESHL   REAL GRID INTERVAL IN KM.

   Output variables:
     TLAT     REAL  S.H. LATITUDE
     TLONG    REAL  LONGITUDE


W3FB04

The W3FB04 routine converts the coordinates of a location on 
           earth from the natural coordinate system of 
           latitude/longitude to the grid (i,j) coordinate
           system overlaid on a polar stereographic map 
           projection true at 60 degrees n or s latitude.

 USAGE:  CALL W3FB04 (ALAT, ALONG, XMESHL, ORIENT, XI, XJ)

    Input variables:
       ALAT    LATITUDE IN DEGREES (<0 IF SH)
       ALONG   WEST LONGITUDE IN DEGREES
       XMESHL  MESH LENGTH OF GRID IN KM AT 60 DEG LAT(<0 IF SH)
               (190.5 LFM GRID, 381.0 NH PE GRID,-381.0 SH PE GRID)
       ORIENT  ORIENTATION WEST LONGITUDE OF THE GRID
               (105.0 LFM GRID, 80.0 NH PE GRID, 260.0 SH PE GRID)

    Output variables:
       XI      I OF THE POINT RELATIVE TO NORTH OR SOUTH POLE
       XJ      J OF THE POINT RELATIVE TO NORTH OR SOUTH POLE

REMARKS: 
        All parameters in the calling statement must be real. 
        The range of allowable latitudes is from a pole to 30 
        degrees into the opposite hemisphere.  The grid used in
        this subroutine has its origin (i=0,j=0) at the pole in
        either hemisphere, so if the user's grid has its
        origin at a point other than the pole, a translation is
        needed to get i and j. The gridlines of i=constant are
        parallel to a longitude designated by the user. 
        The earth's radius is taken to be 6371.2 km.

WARNING:
        This code is not vectorized. You will have put
        it line to vectorize it.


W3FB05

The W3FB05 routine converts the coordinates of a location from
           the grid(i,j) coordinate system overlaid on the polar
           stereographic map projection true at 60 degrees N or S 
           latitude to the natural coordinate system of
           latitude/longitude on the earth.

USAGE:  CALL W3FB05 (XI, XJ, XMESHL, ORIENT, ALAT, ALONG)

   Input variables:
      XI       I OF THE POINT RELATIVE TO THE NORTH OR S. POLE
      XJ       J OF THE POINT RELATIVE TO THE NORTH OR S. POLE
      XMESHL   MESH LENGTH OF GRID IN KM AT 60 DEGREES(<0 IF SH)
               (190.5 LFM GRID, 381.0 NH PE GRID,-381.0 SH PE GRID)
      ORIENT   ORIENTATION WEST LONGITUDE OF THE GRID
               (105.0 LFM GRID, 80.0 NH PE GRID, 260.0 SH PE GRID)

   Output variables:
      ALAT     LATITUDE IN DEGREES  (<0 IF SH)
      ALONG    WEST LONGITUDE IN DEGREES

REMARKS:
        All parameters in the calling statement must be
        real. The range of allowable latitudes is from a pole to
        30 degrees into the opposite hemisphere.
        The grid used in this subroutine has its origin (i=0,j=0)
        at the pole, so if the user's grid has its origin at a point
        other than a pole, a translation is required to get i and j for
        input into w3fb05. The subroutine grid is oriented so that
        gridlines of i=constant are parallel to a west longitude
        supplied by the user. The earth's radius is taken to be 6371.2 km.

WARNING:
        This code will not vectorize, it is normaly used in a
        double do loop with w3ft01, w3ft00, etc. to vectorize it,
        put it in line, put w3ft01, w3ft00, etc. in line.


W3FB06

The W3FB06 routine converts the coordinates of a location on 
           earth given in the natural coordinate system of
           latitude/longitude to a grid coordinate system
           overlaid on a polar stereographic map projection
           true at 60 degrees n or s latitude.

USAGE:  CALL W3FB06 (ALAT,ALON,ALAT1,ALON1,DX,ALONV,XI,XJ)

   Input argument list:
     ALAT     - LATITUDE IN DEGREES (NEGATIVE IN SOUTHERN HEMIS)
     ALON     - EAST LONGITUDE IN DEGREES, REAL*4
     ALAT1    - LATITUDE  OF LOWER LEFT POINT OF GRID (POINT (1,1))
     ALON1    - LONGITUDE OF LOWER LEFT POINT OF GRID (POINT (1,1))
                ALL REAL*4
     DX       - MESH LENGTH OF GRID IN METERS AT 60 DEG LAT
                MUST BE SET NEGATIVE IF USING
                SOUTHERN HEMISPHERE PROJECTION.
                   190500.0 LFM GRID,
                   381000.0 NH PE GRID, -381000.0 SH PE GRID, ETC.
     ALONV    - THE ORIENTATION OF THE GRID.  I.E.,
                THE EAST LONGITUDE VALUE OF THE VERTICAL MERIDIAN
                WHICH IS PARALLEL TO THE Y-AXIS (OR COLUMNS OF
                OF THE GRID)ALONG WHICH LATITUDE INCREASES AS
                THE Y-COORDINATE INCREASES.  REAL*4
                   FOR EXAMPLE:
                   255.0 FOR LFM GRID,
                   280.0 NH PE GRID, 100.0 SH PE GRID, ETC.

   Output argument list:
     XI       - I COORDINATE OF THE POINT SPECIFIED BY ALAT, ALON
     XJ       - J COORDINATE OF THE POINT; BOTH REAL*4

REMARKS:
        Formulae and notation loosely based on Hoke, Hayes,
        and Renninger's "map projections and grid systems...",
        March 1981 AFGWC/TN-79/003


W3FB07

The W3FB07 routine converts the coordinates of a location on earth
           given in a grid coordinate system overlaid on a polar
           stereographic map projection true at 60 degrees N or S
           latitude to the natural coordinate system of
           latitude/longitude.

USAGE:  CALL W3FB07(XI,XJ,ALAT1,ALON1,DX,ALONV,ALAT,ALON)

   Input argument list:
     XI       - I COORDINATE OF THE POINT  REAL*4
     XJ       - J COORDINATE OF THE POINT  REAL*4
     ALAT1    - LATITUDE  OF LOWER LEFT POINT OF GRID (POINT 1,1)
                LATITUDE <0 FOR SOUTHERN HEMISPHERE; REAL*4
     ALON1    - LONGITUDE OF LOWER LEFT POINT OF GRID (POINT 1,1)
                EAST LONGITUDE USED THROUGHOUT; REAL*4
     DX       - MESH LENGTH OF GRID IN METERS AT 60 DEG LAT
                MUST BE SET NEGATIVE IF USING
                SOUTHERN HEMISPHERE PROJECTION; REAL*4
                   190500.0 LFM GRID,
                   381000.0 NH PE GRID, -381000.0 SH PE GRID, ETC.
     ALONV    - THE ORIENTATION OF THE GRID.  I.E.,
                THE EAST LONGITUDE VALUE OF THE VERTICAL MERIDIAN
                WHICH IS PARALLEL TO THE Y-AXIS (OR COLUMNS OF
                THE GRID) ALONG WHICH LATITUDE INCREASES AS
                THE Y-COORDINATE INCREASES.  REAL*4
                   FOR EXAMPLE:
                   255.0 FOR LFM GRID,
                   280.0 NH PE GRID, 100.0 SH PE GRID, ETC.

   Output argument list:
     ALAT     - LATITUDE IN DEGREES (NEGATIVE IN SOUTHERN HEMI.)
     ALON     - EAST LONGITUDE IN DEGREES, REAL*4

REMARKS:
        Formulae and notation loosely based on Hoke, Hayes,
        and Renninger's " map projections and grid systems...",
        March 1981 AFGWC/TN-79/003


W3FB08

The W3FB08 routine converts a location on earth given in
           the coordinate system of latitude/longitudei
           to an (i,j) coordinate system overlaid on a
           mercator map projection.

USAGE:  CALL W3FB08 (ALAT,ALON,ALAT1,ALON1,ALATIN,DX,XI,XJ)

   Input argument list:
      ALAT     - LATITUDE IN DEGREES (NEGATIVE IN SOUTHERN HEMIS)
      ALON     - EAST LONGITUDE IN DEGREES, REAL*4
      ALAT1    - LATITUDE  OF LOWER LEFT CORNER OF GRID (POINT (1,1))
      ALON1    - LONGITUDE OF LOWER LEFT CORNER OF GRID (POINT (1,1))
                 ALL REAL*4
      ALATIN   - THE LATITUDE AT WHICH THE MERCATOR CYLINDER
                 INTERSECTS THE EARTH
      DX       - MESH LENGTH OF GRID IN METERS AT ALATIN

   Output argument list:
      XI       - I COORDINATE OF THE POINT SPECIFIED BY ALAT, ALON
      XJ       - J COORDINATE OF THE POINT; BOTH REAL*4

REMARKS:
        Formulae and notation loosely based on Hoke, Hayes,
        and Renninger's " map projections and grid systems...",
        March 1981 AFGWC/TN-79/003


W3FB09

The W3FB09 routine converts a location on earth given in
           an i,j coordinate system overlaid on a mercator 
           map projection to the coordinate system of
           latitude/longitude.

USAGE:  CALL W3FB09 (XI,XJ,ALAT1,ALON1,ALATIN,DX,ALAT,ALON)

   Input argument list:
     XI       - I COORDINATE OF THE POINT
     XJ       - J COORDINATE OF THE POINT; BOTH REAL*4
     ALAT1    - LATITUDE  OF LOWER LEFT CORNER OF GRID (POINT (1,1))
     ALON1    - LONGITUDE OF LOWER LEFT CORNER OF GRID (POINT (1,1))
                ALL REAL*4
     ALATIN   - THE LATITUDE AT WHICH THE MERCATOR CYLINDER
                INTERSECTS THE EARTH
     DX       - MESH LENGTH OF GRID IN METERS AT ALATIN

   Output argument list:
     ALAT     - LATITUDE IN DEGREES (NEGATIVE IN SOUTHERN HEMIS)
     ALON     - EAST LONGITUDE IN DEGREES, REAL*4
              - OF THE POINT SPECIFIED BY (I,J)

REMARKS:
        Formulae and notation loosely based on Hoke, Hayes,
        and Renninger's " map projections and grid systems...", 
        MARCH 1981 AFGWC/TN-79/003




W3FB10

The W3FB10 routine computes the bearing and great circle distance.
           from point (1) to point (2) assuming a spherical earth.  The
           North and South poles are special cases. If latitude of point
           (1) is within 1e-10 degrees of the North pole, bearing is the
           negative longitude of point (2) by convention.  If latitude of
           point (1) is within 1e-10 degrees of the south pole, bearing is
           the longitude of point (2) by convention.  If point (2) is within
           1e-6 radians of the antipode of point (1), the bearing will be
           set to zero.  If point (1) and point (2) are within 1e-10 radians
           of each other, both bearing and distance will be set to zero.

USAGE:    CALL W3FB10(DLAT1, DLON1, DLAT2, DLON2, BEARD, GCDKM)

   Input argument list:
      DLAT1    - REAL  LATITUDE OF POINT (1) IN DEGREES NORTH.
      DLON1    - REAL  LONGITUDE OF POINT (1) IN DEGREES EAST.
      DLAT2    - REAL  LATITUDE OF POINT (2) IN DEGREES NORTH.
      DLON2    - REAL  LONGITUDE OF POINT (2) IN DEGREES EAST.
 
   Output argument list:
      BEARD    - REAL  BEARING OF POINT (2) FROM POINT (1) IN
                 COMPASS DEGREES WITH NORTH = 0.0, VALUES FROM
                 -180.0 TO +180.0 DEGREES.
      GCDKM    - REAL  GREAT CIRCLE DISTANCE FROM POINT (1) TO
                 POINT (2) IN KILOMETERS.

REMARKS:
        According to the NMC Handbook, the earth's radius is
    6371.2 kilometers.  This is what we use, even though the value
    recommended by the Smithsonian Meteorological Handbook is
    6371.221 KM.  (I wouldn't want you to think that i didn't know
    what the correct value was.)
    METHOD:  The poles are special cases, and handled separately.
    Otherwise, from spherical trigonometry, the law of cosines is used
    to calculate the third side of the spherical triangle having
    sides from the pole to points (1) and (2) (the colatitudes).
    Then the law of sines is used to calculate the angle at point
    (1).  A test is applied to see whether the arcsine result may be
    be used as such, giving an acute angle as the bearing, or whether
    The arcsine result should be subtracted from pi, giving an obtuse
    angle as the bearing.  This test is derived by constructing a
    right spherical triangle using the pole, point (2), and the
    meridian through point(1).  The latitude of the right-angled
    vertex then provides a test--if latitude (1) is greater than this
    latitude, the bearing angle must be obtuse, otherwise acute.
          If the two points are within 1e-6 radians of each other
    a flat earth is assumed, and the four-quadrant arctangent
    function is used to find the bearing.  The y-displacement is
    the difference in latitude and the x-displacement is the
    difference in longitude times cosine latitude, both in radians.
    distance is then the diagonal.
          Fundamental trigonometric identities are used freely, such
    as that cos(x) = sin(pi/2 - x), etc.  See almost any mathematical
    Handbook, such as the C.R.C. standard math tables under 'relations
    in any spherical triangle', or the National Bureau of Standards
    'Handbook of mathematical functions' under section 4.3.149,
    formulas for solution of spherical triangles.
          Double precision is used internally because of the wide
    range of geographic values that may be used.


W3FB11

The W3FB11 routine converts the coordinates of a location on earth given in
           the natural coordinate system of latitude/longitude to a grid
           coordinate system overlaid on a Lambert conformal tangent cone
           projection true at a given N or S latitude.

USAGE:  CALL W3FB11 (ALAT,ELON,ALAT1,ELON1,DX,ELONV,ALATAN,XI,XJ)

   InpuT argument list:
      ALAT     - LATITUDE IN DEGREES (NEGATIVE IN SOUTHERN HEMIS)
      ELON     - EAST LONGITUDE IN DEGREES, REAL*4
      ALAT1    - LATITUDE  OF LOWER LEFT POINT OF GRID (POINT (1,1))
      ELON1    - LONGITUDE OF LOWER LEFT POINT OF GRID (POINT (1,1))
                 ALL REAL*4
      DX       - MESH LENGTH OF GRID IN METERS AT TANGENT LATITUDE
      ELONV    - THE ORIENTATION OF THE GRID.  I.E.,
                 THE EAST LONGITUDE VALUE OF THE VERTICAL MERIDIAN
                 WHICH IS PARALLEL TO THE Y-AXIS (OR COLUMNS OF
                 OF THE GRID) ALONG WHICH LATITUDE INCREASES AS
                 THE Y-COORDINATE INCREASES.  REAL*4
                 THIS IS ALSO THE MERIDIAN (ON THE BACK SIDE OF THE
                 TANGENT CONE) ALONG WHICH THE CUT IS MADE TO LAY
                 THE CONE FLAT.
      ALATAN   - THE LATITUDE AT WHICH THE LAMBERT CONE IS TANGENT TO
                 (TOUCHING) THE SPHERICAL EARTH.
                 SET NEGATIVE TO INDICATE A
                 SOUTHERN HEMISPHERE PROJECTION.
 
    Output argument list:
      XI       - I COORDINATE OF THE POINT SPECIFIED BY ALAT, ELON
      XJ       - J COORDINATE OF THE POINT; BOTH REAL*4
 
REMARKS: 
        Formulae and notation loosely based on Hoke, Hayes,
        and Renninger's "Map projections and grid systems...",
        March 1981 AFGWC/TN-79/003


W3FB12

The W3FB12 routine converts the coordinates of a location on earth given in a
           grid coordinate system overlaid on a Lambert conformal tangent
           cone projection true at a given N or S latitude to the
           natural coordinate system of latitude/longitude.

USAGE:  CALL W3FB12(XI,XJ,ALAT1,ELON1,DX,ELONV,ALATAN,ALAT,ELON,IERR,
                                   IERR)
   Input argument list:
      XI       - I COORDINATE OF THE POINT  REAL*4
      XJ       - J COORDINATE OF THE POINT  REAL*4
      ALAT1    - LATITUDE  OF LOWER LEFT POINT OF GRID (POINT 1,1)
                 LATITUDE <0 FOR SOUTHERN HEMISPHERE; REAL*4
      ELON1    - LONGITUDE OF LOWER LEFT POINT OF GRID (POINT 1,1)
                   EAST LONGITUDE USED THROUGHOUT; REAL*4
      DX       - MESH LENGTH OF GRID IN METERS AT TANGENT LATITUDE
      ELONV    - THE ORIENTATION OF THE GRID.  I.E.,
                 THE EAST LONGITUDE VALUE OF THE VERTICAL MERIDIAN
                 WHICH IS PARALLEL TO THE Y-AXIS (OR COLUMNS OF
                 THE GRID) ALONG WHICH LATITUDE INCREASES AS
                 THE Y-COORDINATE INCREASES.  REAL*4
                 THIS IS ALSO THE MERIDIAN (ON THE OTHER SIDE OF THE
                 TANGENT CONE) ALONG WHICH THE CUT IS MADE TO LAY
                 THE CONE FLAT.
      ALATAN   - THE LATITUDE AT WHICH THE LAMBERT CONE IS TANGENT TO
                 (TOUCHES OR OSCULATES) THE SPHERICAL EARTH.
                  SET NEGATIVE TO INDICATE A
                  SOUTHERN HEMISPHERE PROJECTION; REAL*4
 
   Output argument list:
      ALAT     - LATITUDE IN DEGREES (NEGATIVE IN SOUTHERN HEMI.)
      ELON     - EAST LONGITUDE IN DEGREES, REAL*4
      IERR     - .EQ. 0   IF NO PROBLEM
                 .GE. 1   IF THE REQUESTED XI,XJ POINT IS IN THE
                          FORBIDDEN ZONE, I.E. OFF THE LAMBERT MAP
                          IN THE OPEN SPACE WHERE THE CONE IS CUT.
                 IF IERR.GE.1 THEN ALAT=999. AND ELON=999.
  
REMARKS:
        Formulae and notation loosely based on Hoke, Hayes,
        and Renninger's "Map projections and grid systems...",
        March 1981 AFGWC/TN-79/003


W3FC02

The W3FC02 routine given the grid-oriented wind components on a Northern
           hemisphere polar stereographic grid point, compute the direction
           and speed of the wind at that point.

USAGE:  CALL W3FC02 (FFID, FFJD, FGU, FGV, DIR, SPD)

   Input variables:
      FFID   ARG LIST  REAL*4    I(NORTH POLE) - I(POINT)
      FFJD   ARG LIST  REAL*4    J(NORTH POLE) - J(POINT)
      FGU    ARG LIST  REAL*4    GRID-ORIENTED U-COMPONENT
      FGV    ARG LIST  REAL*4    GRID-ORIENTED V-COMPONENT

   Output variables:
      DIR    ARG LIST  REAL*4     WIND DIRECTION, DEGREES
      SPD    ARG LIST  REAL*4     WIND SPEED


W3FC05

The W3FC05 routine computes the wind direction and speed from given the true
           (earth oriented) wind components.

USAGE:    CALL W3FC05 (U, V, DIR, SPD)
                                                                   
   Input argument list:                                           
      U        - REAL   EARTH-ORIENTED U-COMPONENT                
      V        - REAL   EARTH-ORIENTED V-COMPONENT               
                                                                
   Output argument list:      (INCLUDING WORK ARRAYS)        
      DIR      - REAL   WIND DIRECTION, DEGREES.  VALUES WILL
                 BE FROM 0 TO 360 INCLUSIVE.                
      SPD      - REAL   WIND SPEED IN SAME UNITS AS INPUT  
                                                          
REMARKS:
        If speed is less than 1e-10 then direction will be set
        to zero.                                                          


W3FC06

The W3FC06 routine computes earth-oriented (true) wind components 
           from given the wind direction and speed.

USAGE:  CALL W3FC06 (DIR, SPD, U, V)

   Input variables:
      DIR  -  REAL*4  -  WIND DIRECTION, DEGREES
      SPD  -  REAL*4  -  WIND SPEED, ANY UNITS
 
   Output variables:
      U    -  REAL*4  -  EARTH-ORIENTED U-COMPONENT
      V    -  REAL*4  -  EARTH-ORIENTED V-COMPONENT


W3FC07

The W3FC07 routine computes the earth-oriented wind components at
           the given grid-oriented wind components on a Northern
           hemisphere polar stereographic grid point.  If the
           input winds are at the North pole, the output components
           will be made consistent with the WMO standards for
           reporting winds at the North pole.
           (see Office Note 241 for WMO definition.)

USAGE:    CALL W3FC07 (FFID, FFJD, FGU, FGV, FU, FV)

   Input argument list:
      FFID     - REAL   I-DISPLACEMENT FROM POINT TO NORTH POLE
      FFJD     - REAL   J-DISPLACEMENT FROM POINT TO NORTH POLE
      FGU      - REAL   GRID-ORIENTED U-COMPONENT
      FGV      - REAL   GRID-ORIENTED V-COMPONENT

   Output argument list:
      FU       - REAL   EARTH-ORIENTED U-COMPONENT, POSITIVE FROM WEST
                 MAY REFERENCE THE SAME LOCATION AS FGU.
      FV       - REAL   EARTH-ORIENTED V-COMPONENT, POSITIVE FROM SOUTH
                 MAY REFERENCE THE SAME LOCATION AS FGV.

REMARKS:
        Calculate ffid and ffjd as follows:
                 FFID = REAL(IP - I)
                 FFJD = REAL(JP - J)
        where (ip,jp) is the grid coordinates of the North pole
        and (I,J) is the grid coordinates of the point where
        fgu and fgv occur.


W3FC08

The W3FC08 routine computes the grid-oriented U and V wind components
           at the given the earth-oriented wind components on a Northern
           hemisphere polar stereographic grid point.

USAGE:    CALL W3FC08 (FFID, FFJD, FU, FV, FGU, FGV)

   Input argument list:
      FFID     - REAL   I-DISPLACEMENT FROM POINT TO NORTH POLE IN
                 GRID UNITS
      FFJD     - REAL   J-DISPLACEMENT FROM POINT TO NORTH POLE IN
                 GRID UNITS
      FU       - REAL   EARTH-ORIENTED U-COMPONENT, POSITIVE FROM WEST
      FV       - REAL   EARTH-ORIENTED V-COMPONENT, POSITIVE FROM EAST

   Output argument list:
      FGU      - REAL   GRID-ORIENTED U-COMPONENT.  MAY REFERENCE
                 SAME LOCATION AS FU.
      FGV      - REAL   GRID-ORIENTED V-COMPONENT.  MAY REFERENCE
                 SAME LOCATION AS FV.

REMARKS:
        FFID and FFJD may be calculated as follows:
               FFID = REAL(IP - I)
               FFJD = REAL(JP - J)
        Where (ip, jp) are the grid coordinates of the north pole and
        (i,j) are the grid coordinates of the point.


W3FI01

The W3FI01 routine determines machine word length in bytes.

USAGE:    CALL W3FI01(LW)

   Output argument list:      (including work arrays)
      LW       - MACHINE WORD LENGTH IN BYTES

REMARKS:
        Subprogram can be called from a multiprocessing environment.


W3FI02

The W3FI02 routine transfers array from 16 to 64 bit words.

USAGE:    CALL W3FI02(IN,IDEST,NUM)

   Input argument list:
      IN       - STARTING ADDRESS FOR ARRAY OF 16 BIT IBM HALF-WORDS
      NUM      - NUMBER OF NUMBERS IN 'IN' TO TRANSFER.

   Output argument list:      (INCLUDING WORK ARRAYS)
      IDEST    - STARTING ADDRESS FOR ARRAY OF OUTPUT INTEGERS


W3FI03

The W3FI03 routine transfers  default integer words to 16 bit IBM half-words.

USAGE:    CALL W3FI03(IN,IDEST,NUM,IER)

   Input argument list:
      IN       - STARTING ADDRESS FOR ARRAY OF DEFAULT INTEGERS
      NUM      - NUMBER OF NUMBERS IN 'IN' TO TRANSFER.

   Output argument list:      (INCLUDING WORK ARRAYS)
      IDEST    - STARTING ADDRESS FOR ARRAY OF 16 BIT IBM HALF-WORDS
      IER      - ERROR RETURN CODE AS FOLLOWS:
                   IER = 0 - TRANSFER SUCCESSFUL, ALL NUMBERS
                           - TRANSFERRED WITHOUT OVERFLOW
                   IER = 1 - THE TRANSFER OF ONE OR MORE NUMBERS
                           - RESULTED IN AN OVERFLOW


W3FI04

The W3FI04 routine computes word size, the type of character
           set, ASCII or EBCDIC, and if the computer is Big-Endian,
           or Little-Endian.

USAGE:  CALL W3FI04 (IENDN, ITYPEC, LW)

   Output argument list:
      IENDN     -  INTEGER FOR BIG-ENDIAN OR LITTLE-ENDIAN
                   = 0   BIG-ENDIAN
                   = 1   LITTLE-ENDIAN
                   = 2   CANNOT COMPUTE
      ITYPEC    -  INTEGER FOR TYPE OF CHARACTER SET
                   = 0   ASCII  CHARACTER SET
                   = 1   EBCDIC CHARACTER SET
                   = 2   NOT ASCII OR EBCDIC
      LW        -  INTEGER FOR WORDS SIZE OF COMPUTER IN BYTES
                   = 4   FOR 32 BIT COMPUTERS
                   = 8   FOR 64 BIT COMPUTERS


W3FI18

The W3FI18 routine finds the i,j coordinate point in a 65x65 grid-point
           array as being either inside, outside, or on the boundary
           of the NMC Octagon centered in the 65x65 array.

USAGE: CALL W3FI18 (I, J, NW)

   Input argument list:
       I  - COORDINATE IDENTIFICATION OF A POINT IN THE 65X65 ARRAY
       J  - COORDINATE IDENTIFICATION OF A POINT IN THE 65X65 ARRAY

   Output argument list:
      NW  - INTEGER RETURN CODE

   Exit states:
      NW = -1 POINT IS OUTSIDE THE OCTAGON
      NW =  0 POINT IS ON THE OCTAGON BOUNDARY
      NW = +1 POINT IS INSIDE THE OCTAGON


W3FI19

The W3FI19 routine finds the i,j coordinate point in a 65x65 grid-point
           array as being either inside, outside, or on the boundary
           of the 53X57 NMC Rectangle centered in the 65x65 array.

USAGE: CALL W3FI19 (I, J, NW)

   Input argument list:
      I   - COORDINATE IDENTIFICATION OF A POINT IN THE 65X65 ARRAY
      J   - COORDINATE IDENTIFICATION OF A POINT IN THE 65X65 ARRAY

   Output argument list:
      NW  - INTEGER RETURN CODE

   Exit states:
      NW = -1 POINT IS OUTSIDE THE RECTANGLE
      NW =  0 POINT IS ON THE RECTANGLE BOUNDARY
      NW = +1 POINT IS INSIDE THE RECTANGLE


W3FI20

The W3FI20 routine extracts the NMC 1977 point Octagon grid points out of
           a 65X65 (4225 POINT) array.

USAGE:  CALL W3FI20 (A,B)

   Input variables:
      A      REAL*4 (65 X 65 GRID, 4225 POINT) ARRAY
             GRID IS OFFICE NOTE 84 TYPE 27 OR 1B HEX

   Output variables:
      B      1977 POINT ARRAY (OCTAGON) OFFICE NOTE 84 TYPE
             0 OR HEX 0.

REMARKS: Arrays a and b may be the same array or be equivalenced,
         in which case the first 1977 words of 'a' are written over.


W3FI32

The W3FI32 routine converts an array of the 27 data field identifiers
           into an array of the first 8 identification words of the
           format described in NMC Office Note 84 (89-06-15, PAGE-35).

USAGE:    CALL W3FI32(LARRAY, KIDNT)

   Input argument list:
      LARRAY   - INTEGER ARRAY CONTAINING 27 DATA FIELD
                 IDENTIFIERS (SEE O.N. 84)
 
   Output argument list:
      KIDNT    - INTEGER ARRAY OF 6 WORDS, 12 OFFICE NOTE 84 32 BIT
                 WORDS, FIRST 4 WORDS ARE MADE BY W3FI32, IF YOU ARE
                 USING PACKER W3AI00, IT WILL COMPUTE WORD 5 AND 6.
                 (OFFICE NOTE 84 WORDS 9,10, 11 AND 12). IF J THE
                 WORD COUNT IN WORD 27 OF LARRAY IS GREATER THAN
                 32743 THEN BITS 15-0 OF THE 4TH ID WORD ARE SET TO
                 ZERO, J IS STORED IN BITS 31-0 OF THE 6TH ID WORD.
                 ID WORD 5 IS SET ZERO, BIT 63-32 OF THE 6TH ID
                 WORD ARE SET ZERO. NOTE: BIS ARE NUMBER LEFT TO
                 RIGHT ON THE CRAY AS 63-0.
 
   Output files:
      UNIT6    - STANDARD FORTRAN PRINT FILE

REMARKS:
        Exit states printed messages:
           If any number n in (larray(i),i=1,27) is erroneously large:
                'value in larray(i)=n is too large to pack'

           If any number n in (larray(i),i=1,27) is erroneously negative:
                'value in larray(i)=n should not be negative'

           In either of the above situations, that portion of the packed
           word corresponding to larray(i) will be set to binary ones.


W3FI47

The W3FI47 routine converts a Office note 85 label in IBM370 format
           to Office Note 85 Cray format.

USAGE:  CALL W3FI47(ILABEL,NLABEL)

   Input variables:
      ILABEL   4 WORDS (32 BYTES) CHARACTERS ARE IN EBCDIC OR
                       BINARY.
 
   Output variables:
      NLABEL   4 WORDS (32 BYTES), CHARACTERS ARE IN ASCII OR
                       BINARY.


W3FI48

The W3FI48 routine converts Office Note 85 label from the Cray
           format into a Nas-9050 label. 

USAGE:  CALL W3FI48 (ILABEL, NLABEL)

   INPUT VARIABLES:
      ILABEL   4 64-BIT WORDS OR 32 CHARACTERS
               CHARACTERS ARE IN ASCII OR BINARY.

   OUTPUT VARIABLES:
      NLABEL   4 64-BIT WORDS OR 32 CHARACTERS,
                      CHARACTERS ARE IN EBCDIC OR BINARY.

REMARKS:
        See Office Note 85.


W3FI52

The W3FI52 routine computes scaling constants used by grdprt.

USAGE:  CALL W3FI52(IDENT,CNST,IER)

   Input argument list:
      IDENT    FIRST 5 ID'S IN OFFICE NOTE 84 FORMAT

   Output argument list:
      CNST     4 CONSTANT'S USED BY GRDPRT,W3FP05, OR W3FP03
      IER      0 = NORMAL RETURN
               1 = ID'S IN IDENT ARE NOT IN O.N. 84 FORMAT


W3FI58

The W3FI58 routine converts an array of integer numbers into an array
           of positive differences (number(s) - minimum value) and
           packs the magnitude of each difference right-adjusted into
           the least number of bits that holds the largest difference.

USAGE:  CALL W3FI58(IFIELD,NPTS,NWORK,NPFLD,NBITS,LEN,KMIN)

   Input argument list:
      IFIELD - ARRAY OF INTEGER DATA FOR PROCESSING
      NPTS   - NUMBER OF DATA VALUES TO PROCESS IN IFIELD (AND NWORK)
               WHERE, NPTS > 0
 
   Output argument list:
      NWORK  - WORK ARRAY WITH INTEGER DIFFERENCE
      NPFLD  - ARRAY FOR PACKED DATA
               (USER IS RESPONSIBLE FOR AN ADEQUATE DIMENSION.)
      NBITS  - NUMBER OF BITS USED TO PACK DATA WHERE, 0 < NBITS < 32
               (THE MAXIMUM DIFFERENCE WITHOUT OVERFLOW IS 2**31 -1)
      LEN    - NUMBER OF PACKED BYTES IN NPFLD (SET TO 0 IF NO PACKING)
               WHERE, LEN = (NBITS * NPTS + 7) / 8 WITHOUT REMAINDER
      KMIN   - MINIMUM VALUE (SUBTRACTED FROM EACH DATUM). IF THIS
               PACKED DATA IS BEING USED FOR GRIB DATA, THE
               PROGRAMER WILL HAVE TO CONVERT THE KMIN VALUE TO AN
               IBM370 32 BIT FLOATING POINT NUMBER.

   NOTE:  LEN = 0, NBITS = 0, AND NO PACKING PERFORMED IF
          (1) KMAX = KMIN  (A CONSTANT FIELD)
          (2) NPTS < 1  (SEE INPUT ARGUMENT)

W3FI59

The W3FI59 routine converts an array of single precision real numbers
           into an array of positive scaled differences
           (number(s) - minimum value), in integer format and 
           packs the argument-specified number of significant bits
           from each difference.

USAGE:    CALL W3FI59(FIELD,NPTS,NBITS,NWORK,NPFLD,ISCALE,LEN,RMIN)

   Input argument list:
      FIELD - ARRAY OF FLOATING POINT DATA FOR PROCESSING  (REAL)
      NPTS  - NUMBER OF DATA VALUES TO PROCESS IN FIELD (AND NWORK)
              WHERE, NPTS > 0
      NBITS - NUMBER OF SIGNIFICANT BITS OF PROCESSED DATA TO BE PACKED
              WHERE, 0 < NBITS < 32+1
  
   Output argument list:
      NWORK - ARRAY FOR INTEGER CONVERSION  (INTEGER)
              IF PACKING PERFORMED (SEE NOTE BELOW), THE ARRAY WILL
              CONTAIN THE PRE-PACKED, RIGHT ADJUSTED, SCALED, INTEGER
              DIFFERENCES UPON RETURN TO THE USER.
              (THE USER MAY EQUIVALENCE FIELD AND NWORK.  SAME SIZE.)
      NPFLD - ARRAY FOR PACKED DATA  (INTEGER)
              (DIMENSION MUST BE AT LEAST (NBITS * NPTS) / 64 + 1  )
      ISCALE- POWER OF 2 FOR RESTORING DATA, SUCH THAT
              DATUM = (DIFFERENCE * 2**ISCALE) + RMIN
      LEN   - NUMBER OF PACKED BYTES IN NPFLD (SET TO 0 IF NO PACKING)
              WHERE, LEN = (NBITS * NPTS + 7) / 8 WITHOUT REMAINDER
      RMIN  - MINIMUM VALUE (REFERENCE VALUE SUBTRACTED FROM INPUT DATA)
              THIS IS A CRAY FLOATING POINT NUMBER, IT WILL HAVE TO BE
              CONVERTED TO AN IBM370 32 BIT FLOATING POINT NUMBER AT
              SOME POINT IN YOUR PROGRAM IF YOU ARE PACKING GRIB DATA.

REMARKS:
        LEN = 0 AND NO PACKING PERFORMED IF
             (1) RMAX = RMIN  (A CONSTANT FIELD)
             (2) NBITS VALUE OUT OF RANGE  (SEE INPUT ARGUMENT)
             (3) NPTS VALUE LESS THAN 1  (SEE INPUT ARGUMENT)

W3FI61

The W3FI61 routine builds 40 char communications prefix.

USAGE:    CALL W3FI61 (LOC,ICAT,AREG,IBCKUP,IDATYP,IERR)

   Input argument list:
      ICAT     - CATALOG NUMBER
      AREG     - AFOS REGIONAL ADDRESSING FLAGS (6 POSITIONS)
                    SELECT ANY OR ALL OF THE FOLLOWING. SELECTIONS
                    WILL AUTOMATICALLY BE LEFT JUSTIFIED AND BLANK
                    FILLED TO 6 POSITIONS.
                 IF BULLETINS AND/OR MESSAGES ARE NOT TO BE ROUTED
                    TO AFOS, THEN LEAVE THE FIELD FILLED WITH BLANKS.
                 E - EASTERN REGION
                 C - CENTRAL REGION
                 W - WESTERN REGION
                 S - SOUTHERN REGION
                 A - ATLANTIC REGION
                 P - PACIFIC REGION
      IERR     - ERROR RETURN
      IBCKUP   - BACKUP INDICATOR W/HEADER KEY
                 0 = NOT A BACKUP
                 1 = FD BACKUP
                 2 = DF BACKUP
                     BACK UP IS ONLY PERMITTED FOR FD AND DF BULLETINS
      IDATYP   - DATA TYPE INDICATOR
                 0  = EBCIDIC DATA
                 11 = BINARY DATA
                 12 = PSUEDO-ASCII DATA
                 3  = ASCII DATA
 
   Output argument list:
      LOC      - NAME OF THE ARRAY TO RECEIVE THE COMMUNICATIONS PREFIX
 
REMARKS:
        Error returns:
                      IERR  = 0   NORMAL RETURN
                            = 1   INCORRECT BACKUP FLAG
                            = 2   A REGIONAL ADDRESSING FLAG IS
                                  NON-BLANK AND NON-STANDARD ENTRY
                            = 3   DATA TYPE IS NON-STANDARD ENTRY


W3FI62

The W3FI62 routine builds 80-CHAR on295 queue descriptor.

USAGE:    CALL W3FI62 (LOC,TTAAII,KARY,IERR)

   Input argument list:
      TTAAII   - FIRST 6 CHARACTERS OF WMO HEADER
      KARY     - INTEGER ARRAY CONTAINING USER INFORMATION
                (1) = DAY OF MONTH
                (2) = HOUR OF DAY
                (3) = HOUR * 100 + MINUTE
                (4) = CATALOG NUMBER
                (5) = NUMBER OF 80 BYTE INCREMENTS
                (6) = NUMBER OF BYTES IN LAST INCREMENT
                (7) = TOTAL SIZE OF MESSAGE
                      WMO HEADER + BODY OF MESSAGE IN BYTES
                      (NOT INCLUDING QUEUE DESCRIPTOR)

   Output argument list:      (INCLUDING WORK ARRAYS)
      LOC      - LOCATION TO RECEIVE QUEUE DESCRIPTOR
      KARY     - SEE INPUT ARGUMENT LIST
      IERR     - ERROR RETURN

REMARKS:
        If total size is entered (kary(7)) then kary(5) and
           kary(6) will be calculated.
        If kary(5) and kary(6) are provided then kary(7) will
           be ignored.

WARNING:
        Equivalence array loc to integer array so it starts on
           a word boundary for sbyte subroutine.

        Error returns:
                      IERR = 1    Total byte count and/or 80 byte increment
                                  count is missing. One or the other is
                                  required to complete the queue descriptor.
                      IERR = 2    Total size too small.


W3FI63

The W3FI63 routine unpacks a grib (edition 1) field to the exact grid
           specified in the grib message, isolate the bit map, and make
           the values of the product descripton section (PDS) and the
           grid description section (GDS) available in return arrays.

USAGE:    CALL W3FI63(MSGA,KPDS,KGDS,KBMS,DATA,KPTR,KRET)

   Input argument list:
      MSGA     - GRIB FIELD - "GRIB" THRU "7777"   CHAR*1
                    (MESSAGE CAN BE PRECEDED BY JUNK CHARS)
 
   Output argument list:
      DATA     - ARRAY CONTAINING DATA ELEMENTS
      KPDS     - ARRAY CONTAINING PDS ELEMENTS.  (EDITION 1)
           (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
        (26-35)  - RESERVED
        (36-N)   - CONSECUTIVE BYTES EXTRACTED FROM PROGRAM
                   DEFINITION SECTION (PDS) OF GRIB MESSAGE
        KGDS     - ARRAY CONTAINING GDS ELEMENTS.
           (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
        STAGGERED ARAKAWA ROTATED LAT/LON GRIDS (TYPE 203)
           (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 CENTER
           (8)   - LO(2) LONGITUDE OF CENTER
           (9)   - DI LONGITUDINAL DIRECTION OF INCREMENT
           (10)  - DJ LATITUDINAL DIRECTION INCREMENT
           (11)  - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
        KBMS     - BITMAP DESCRIBING LOCATION OF OUTPUT ELEMENTS.
                             (ALWAYS CONSTRUCTED)
        KPTR     - ARRAY CONTAINING STORAGE FOR FOLLOWING PARAMETERS
           (1)   - TOTAL LENGTH OF GRIB MESSAGE
           (2)   - LENGTH OF INDICATOR (SECTION  0)
           (3)   - LENGTH OF PDS       (SECTION  1)
           (4)   - LENGTH OF GDS       (SECTION  2)
           (5)   - LENGTH OF BMS       (SECTION  3)
           (6)   - LENGTH OF BDS       (SECTION  4)
           (7)   - VALUE OF CURRENT BYTE
           (8)   - BIT POINTER
           (9)   - GRIB START BIT NR
          (10)   - GRIB/GRID ELEMENT COUNT
          (11)   - NR UNUSED BITS AT END OF SECTION 3
          (12)   - BIT MAP FLAG (COPY OF BMS OCTETS 5,6)
          (13)   - NR UNUSED BITS AT END OF SECTION 2
          (14)   - BDS FLAGS (RIGHT ADJ COPY OF OCTET 4)
          (15)   - NR UNUSED BITS AT END OF SECTION 4
        KRET     - FLAG INDICATING QUALITY OF COMPLETION
 
REMARKS: 
        When decoding is completed, data at each grid point has been
        returned in the units specified in the grib manual.
 
         Values for return flag (kret)
            KRET = 0 - Normal return, no errors
                 = 1 - 'GRIB' not found in first 100 chars
                 = 2 - '7777' not in correct location
                 = 3 - Unpacked field is larger than 260000
                 = 4 - GDS/ Grid not one of currently accepted values
                 = 5 - Grid not currently avail for center indicated
                 = 8 - Temp GDS indicated, but GDS flag is off
                 = 9 - GDS indicates size mismatch with std grid
                 =10 - Incorrect center indicator
                 =11 - Binary data section (BDS) not completely processed.
                       program is not set to process flag combinations
                       shown in octets 4 and 14.
                 =12 - Binary data section (BDS) not completely processed.
                       program is not set to process flag combinations


W3FI64

The W3FI64 routine unpacks an array of upper-air reports that are
           packed in the format described by nmc Office Note 29,
           or unpacks an array of surface reports that are packed
           in the format described by NMC Office Note 124. 

USAGE:    CALL W3FI64(COCBUF,LOCRPT,NEXT)

   Input argument list:
      COCBUF   - CHARACTER*10 ARRAY CONTAINING A BLOCK OF PACKED
               - REPORTS IN NMC OFFICE NOTE 29/124 FORMAT.
      NEXT     - MARKER INDICATING RELATIVE LOCATION (IN BYTES) OF
               - END OF LAST REPORT IN COCBUF.  EXCEPTION: NEXT MUST
               - BE SET TO ZERO PRIOR TO UNPACKING THE FIRST REPORT OF
               - A NEW BLOCK OF REPORTS.  SUBSEQUENTLY, THE VALUE OF
               - NEXT RETURNED BY THE PREVIOUS CALL TO W3FI64 SHOULD
               - BE USED AS INPUT.  (SEE OUTPUT ARGUMENT LIST BELOW.)
               - IF NEXT IS NEGATIVE, W3FI64 WILL RETURN IMMEDIATELY
               - WITHOUT ACTION.
 
   Output argument list:
      LOCRPT   - ARRAY CONTAINING ONE UNPACKED REPORT WITH POINTERS
               - AND COUNTERS TO DIRECT THE USER.  LOCRPT MUST BEGIN
               - ON A FULLWORD BOUNDARY.  FORMAT IS MIXED, USER MUST
               - EQUIVALENCE REAL AND CHARACTER ARRAYS TO THIS ARRAY
               - (SEE BELOW AND REMARKS FOR CONTENT).

    ***************************************************************
    WORD   CONTENT                   UNIT                 FORMAT
    ----   ----------------------    -------------------  ---------
      1    LATITUDE                  0.01 DEGREES         REAL
      2    LONGITUDE                 0.01 DEGREES WEST    REAL
      3    UNUSED
      4    OBSERVATION TIME          0.01 HOURS (UTC)     REAL
      5    RESERVED (3RD BYTE IS     4-CHARACTERS         CHAR*8
           ON29 "25'TH CHAR.; 4TH    LEFT-JUSTIFIED
           BYTE IS ON29 "26'TH
           CHAR." (SEE ON29)
      6    RESERVED (3RD BYTE IS     3-CHARACTERS         CHAR*8
           ON29 "27'TH CHAR. (SEE    LEFT-JUSTIFIED
           ON29)
      7    STATION ELEVATION         METERS               REAL
      8    INSTRUMENT TYPE           ON29 TABLE R.2       INTEGER
      9    REPORT TYPE               ON29 TABLE R.1 OR    INTEGER
                                     ON124 TABLE S.3
     10    UNUNSED
     11    STN. ID. (FIRST 4 CHAR.)  4-CHARACTERS         CHAR*8
                                     LEFT-JUSTIFIED
 
     12    STN. ID. (LAST  2 CHAR.)  2-CHARACTERS         CHAR*8
                                     LEFT-JUSTIFIED
 
     13    CATEGORY  1, NO. LEVELS   COUNT                INTEGER
     14    CATEGORY  1, DATA INDEX   COUNT                INTEGER
     15    CATEGORY  2, NO. LEVELS   COUNT                INTEGER
     16    CATEGORY  2, DATA INDEX   COUNT                INTEGER
     17    CATEGORY  3, NO. LEVELS   COUNT                INTEGER
     18    CATEGORY  3, DATA INDEX   COUNT                INTEGER
     19    CATEGORY  4, NO. LEVELS   COUNT                INTEGER
     20    CATEGORY  4, DATA INDEX   COUNT                INTEGER
     21    CATEGORY  5, NO. LEVELS   COUNT                INTEGER
     22    CATEGORY  5, DATA INDEX   COUNT                INTEGER
     23    CATEGORY  6, NO. LEVELS   COUNT                INTEGER
     24    CATEGORY  6, DATA INDEX   COUNT                INTEGER
     25    CATEGORY  7, NO. LEVELS   COUNT                INTEGER
     26    CATEGORY  7, DATA INDEX   COUNT                INTEGER
     27    CATEGORY  8, NO. LEVELS   COUNT                INTEGER
     28    CATEGORY  8, DATA INDEX   COUNT                INTEGER
     29    CATEGORY 51, NO. LEVELS   COUNT                INTEGER
     30    CATEGORY 51, DATA INDEX   COUNT                INTEGER
     31    CATEGORY 52, NO. LEVELS   COUNT                INTEGER
     32    CATEGORY 52, DATA INDEX   COUNT                INTEGER
     33    CATEGORY  9, NO. LEVELS   COUNT                INTEGER
     34    CATEGORY  9, DATA INDEX   COUNT                INTEGER
  35-42    ZEROED OUT - NOT USED                          INTEGER
 
  43-END   UNPACKED DATA GROUPS      (SEE REMARKS)        MIXED
    ***************************************************************
 
      NEXT     - MARKER INDICATING RELATIVE LOCATION (IN BYTES)
               - OF END OF CURRENT REPORT IN COCBUF.  NEXT WILL BE
               - SET TO -1 IF W3FI64 ENCOUNTERS STRING 'END RECORD'
               - IN PLACE OF THE NEXT REPORT.  THIS IS THE END OF THE
               - BLOCK.  NO UNPACKING TAKES PLACE. NEXT IS SET TO-2
               - WHEN INTERNAL (LOGIC) ERRORS HAVE BEEN DETECTED.
               - NEXT IS SET TO -3 WHEN DATA COUNT CHECK FAILS.  IN
               - BOTH OF THE LATTER CASES SOME DATA (E.G., HEADER
               - INFORMATION) MAY BE UNPACKED INTO LOCRPT.
 
    Output files:
      FT06F001 - PRINTOUT
 
REMARKS: 
        After first reading and processing the Office Note 85
    (first) date record, the user's FORTRAN program begins a read
    loop as follows..  for each iteration a blocked input report is
    read into array cocbuf.  Now test the first ten characters in
    cocbuf for the string 'endof file' (SIC).  This string signals
    the end of input.  Otherwise, set the marker 'next' to zero and
    begin the unpacking loop.
         Each iteration of the unpacking loop consists of a call to
    w3fi64 with the current value of 'next'.  If 'next' is -1 upon
    returning from w3fi64, it has reached the end of the input
    record, and the user's program should read the next record as
    above.  If 'next' is -2 or -3 upon returning, there is a grievous
    error in the current packed input record, and the user's program
    should print it for examination by automation division personnel.
    If 'next' is positive, the output structure locrpt contains
    an unpacked report, and the user's program should process it at
    this point, subsequently repeating the unpacking loop.


W3FI65

The W3FI65 routine packs an array of upper-air reports into the format
           described by NMC Office Note 29, or packs an array of surface
           reports into the format described by NMC Office Note 124.

USAGE:    CALL W3FI65(LOCRPT,COCBUF)

   Input argument list:
      LOCRPT   - INTEGER ARRAY CONTAINING ONE UNPACKED REPORT.
               - LOCRPT MUST BEGIN ON A FULLWORD BOUNDARY.  FORMAT
               - IS MIXED, USER MUST EQUIVALENCE REAL AND CHARACTER
               - ARRAYS TO THIS ARRAY (SEE W3FI64 WRITE-UP FOR
               - CONTENT).
 
   Output argument list:
      COCBUF   - CHARACTER*10 ARRAY CONTAINING A PACKED REPORT IN
               - NMC OFFICE NOTE 29/124 FORMAT.
 
REMARKS:
        After first creating and writing out the Office Note 85
    (first) date record, the user's FORTRAN program begins a packing
    loop as follows..  each iteration of the packing loop consists of
    a call first to w3fi65 to pack the report into cocbuf, then a call
    to w3fi66 with the current value of 'nflag' (set to zero for first
    call) to block the packed report into a record (see w3fi66 write-
    up). If 'nflag' is -1 upon returning from w3fi66, the remaining
    portion of the record is not large enough to hold the current
    packed report.  The user should write out the record, set 'nflag'
    to zero, call w3fi66 to write the packed report to the beginning
    of the next record, and repeat the packing loop.  If 'nflag' is
    positive, a packed report has been blocked into the record and
    the user should continue the packing loop.
         When all reports have been packed and blocked, the user
    should write out this last record (which is not full but contains
    fill information supplied by w3fi66).  One final record containing
    the string 'endof file' (SIC) followed by blank fill must be
    written out to signal the end of the data set.
 
         NOTE1: The packed report will have the categories ordered as
                follows:  1, 2, 3, 4, 5, 6, 7, 51, 52, 8, 9.
         NOTE2: The input unpacked report must be in the format specified
                in the w3fi64 office note 29 report unpacker write-up.
         NOTE3: The unused porion of cocbuf is not cleared.


W3FI66

The W3FI66 routine blocks reports which have been packed into NMC Office
           Note 29 character format into fixed-length records.

USAGE:    CALL W3FI66(COCBUF,COCBLK,NFLAG,NSIZE)

   Input argument list:
      COCBUF   - CHARACTER*10 ARRAY CONTAINING A SINGLE PACKED REPORT
               - IN OFFICE NOTE 29/124 FORMAT.
      COCBLK   - CHARACTER*10 ARRAY HOLDING A BLOCK OF PACKED REPORTS
               - UP TO AND INCLUDING THE PREVIOUS ONE
      NFLAG    - MARKER INDICATING RELATIVE LOCATION (IN BYTES)
               - OF END OF LAST REPORT IN COCBLK.  EXCEPTION:
               - NFLAG MUST BE SET TO ZERO PRIOR TO BLOCKING THE FIRST
               - PACKED REPORT INTO A NEW BLOCK.  SUBSEQUENTLY, THE
               - VALUE OF NFLAG RETURNED BY THE PREVIOUS CALL TO W3FI66
               - SHOULD BE USED AS INPUT. (SEE OUTPUT ARGUMENT LIST
               - BELOW.)  IF NFLAG IS NEGATIVE, W3FI66 WILL RETURN
               - IMMEDIATELY WITHOUT ACTION.
      NSIZE    - MAXIMUM NUMBER OF CHARACTERS IN COCBLK ARRAY
                 (SHOULD BE A MULTIPLE OF 4)
 
   Output argument list:
      COCBLK   - CHARACTER*10 ARRAY HOLDING A BLOCK OF PACKED REPORTS
               - UP TO AND INCLUDING THE CURRENT ONE
      NFLAG    - MARKER INDICATING RELATIVE LOCATION (IN BYTES)
               - OF END OF CURRENT REPORT IN COCBLK.  NFLAG
               - WILL BE SET TO -1 IF W3FI66 CANNOT FIT THE CURRENT
               - PACKED REPORT INTO THE REMAINDER OF THE BLOCK (I.E.,
               - THE BLOCK IS FULL). NFLAG WILL NOT CHANGE FROM ITS
               - INPUT ARGUMENT VALUE IF THE STRING "END REPORT" IS
               - NOT FOUND AT THE END OF THE CURRENT REPORT. (CURRENT
               - PACKED REPORT HAS INVALID LENGTH AND IS NOT BLOCKED)
 
   Output files:
      FT06F001 - PRINTOUT
 
  REMARKS: 
          The user must set nflag to zero each time the array is
     to be filled with packed reports in Office Note 29/124 format.
     w3fi66 will then insert the first report and fill the remainder
     of the output array cocblk with the string 'end record'.
          An attempt is made to insert a report in the output array
     each time w3fi66 is called.  If the remaining portion of the
     output array is not large enough to hold the current report,
     w3fi66 sets nflag to -1.  The user should then output the
     blocked record, set nflag to zero, and call w3fi66 again with
     the same report in the input array.
         After a given report is successfully blocked into cocblk,
     w3fi66 sets nflag as a pointer for the next report to be blocked.
     This pointer is a relative address and a character count.
         The three characters specifying the length of the report
     are checked for valid character numbers and the value is tested
     for pointing to the end of the report (string "end report"). If
     invalid, the report is not inserted into the block and there is
     an immediate return to the user.  In this case, the value of
     nflag does not change from its input value.


W3FI67

The W3FI67 routine decodes a bufr message and place information
           extracted from the bufr message into selected arrays
           for the user.

USAGE:    CALL W3FI67(IPTR,IDENT,MSGA,ISTACK,MSTACK,KDATA,KNR,INDEX)

   Input argument list:
      MSGA        - ARRAY CONTAINING SUPPOSED BUFR MESSAGE
 
   Output argument list:      (INCLUDING WORK ARRAYS)
      ISTACK      - ORIGINAL ARRAY OF DESCRIPTORS EXTRACTED FROM
                    SOURCE BUFR MESSAGE.
      MSTACK(A,B) - LEVEL B - DESCRIPTOR NUMBER
                    LEVEL A = 1 DESCRIPTOR
                          = 2 10**N SCALING TO RETURN TO ORIGINAL VALUE
      IPTR        - UTILITY ARRAY
          IPTR( 1)- ERROR RETURN
          IPTR( 2)- BYTE COUNT SECTION 1
          IPTR( 3)- POINTER TO START OF SECTION 1
          IPTR( 4)- BYTE COUNT SECTION 2
          IPTR( 5)- POINTER TO START OF SECTION 2
          IPTR( 6)- BYTE COUNT SECTION 3
          IPTR( 7)- POINTER TO START OF SECTION 3
          IPTR( 8)- BYTE COUNT SECTION 4
          IPTR( 9)- POINTER TO START OF SECTION 4
          IPTR(10)- START OF REQUESTED SUBSET, RESERVED FOR DAR
          IPTR(11)- CURRENT DESCRIPTOR PTR IN IWORK
          IPTR(12)- LAST DESCRIPTOR POS IN IWORK
          IPTR(13)- LAST DESCRIPTOR POS IN ISTACK
          IPTR(14)- NUMBER OF TABLE B ENTRIES
          IPTR(15)- REQUESTED SUBSET POINTER, RESERVED FOR DAR
          IPTR(16)- INDICATOR FOR EXISTANCE OF SECTION 2
          IPTR(17)- NUMBER OF REPORTS PROCESSED
          IPTR(18)- ASCII/TEXT EVENT
          IPTR(19)- POINTER TO START OF BUFR MESSAGE
          IPTR(20)- NUMBER OF LINES FROM TABLE D
          IPTR(21)- TABLE B SWITCH
          IPTR(22)- TABLE D SWITCH
          IPTR(23)- CODE/FLAG TABLE SWITCH
          IPTR(24)- ADITIONAL WORDS ADDED BY TEXT INFO
          IPTR(25)- CURRENT BIT NUMBER
          IPTR(26)- DATA WIDTH CHANGE
          IPTR(27)- DATA SCALE CHANGE
          IPTR(28)- DATA REFERENCE VALUE CHANGE
          IPTR(29)- ADD DATA ASSOCIATED FIELD
          IPTR(30)- SIGNIFY CHARACTERS
          IPTR(31)- NUMBER OF EXPANDED DESCRIPTORS IN MSTACK
          IPTR(32)- CURRENT DESCRIPTOR SEGMENT F
          IPTR(33)- CURRENT DESCRIPTOR SEGMENT X
          IPTR(34)- CURRENT DESCRIPTOR SEGMENT Y
          IPTR(35)- UNUSED
          IPTR(36)- NEXT DESCRIPTOR MAY BE UNDECIPHERABLE
          IPTR(37)- UNUSED
          IPTR(38)- UNUSED
          IPTR(39)- DELAYED REPLICATION FLAG
                       0 - NO DELAYED REPLICATION
                       1 - MESSAGE CONTAINS DELAYED REPLICATION
          IPTR(40)- NUMBER OF CHARACTERS IN TEXT FOR CURR DESCRIPTOR

      IDENT       - ARRAY CONTAINS MESSAGE INFORMATION EXTRACTED FROM
                    BUFR MESSAGE -
          IDENT( 1)-EDITION NUMBER     (BYTE 4, SECTION 1)
          IDENT( 2)-ORIGINATING CENTER (BYTES 5-6, SECTION 1)
          IDENT( 3)-UPDATE SEQUENCE    (BYTE 7, SECTION 1)
          IDENT( 4)-OPTIONAL SECTION   (BYTE 8, SECTION 1)
          IDENT( 5)-BUFR MESSAGE TYPE  (BYTE 9, SECTION 1)
                   0 = SURFACE (LAND)
                   1 = SURFACE (SHIP)
                   2 = VERTICAL SOUNDINGS OTHER THAN SATELLITE
                   3 = VERTICAL SOUNDINGS (SATELLITE)
                   4 = SNGL LVL UPPER-AIR OTHER THAN SATELLITE
                   5 = SNGL LVL UPPER-AIR (SATELLITE)
                   6 = RADAR
          IDENT( 6)-BUFR MSG SUB-TYPE  (BYTE 10, SECTION 1)
               TYPE SBTYP
                2     7   = PROFILER
          IDENT( 7)-                   (BYTES 11-12, SECTION 1)
          IDENT( 8)-YEAR OF CENTURY    (BYTE 13, SECTION 1)
          IDENT( 9)-MONTH OF YEAR      (BYTE 14, SECTION 1)
          IDENT(10)-DAY OF MONTH       (BYTE 15, SECTION 1)
          IDENT(11)-HOUR OF DAY        (BYTE 16, SECTION 1)
          IDENT(12)-MINUTE OF HOUR     (BYTE 17, SECTION 1)
          IDENT(13)-RSVD BY ADP CENTERS(BYTE 18, SECTION 1)
          IDENT(14)-NR OF DATA SUBSETS (BYTE 5-6, SECTION 3)
          IDENT(15)-OBSERVED FLAG      (BYTE 7, BIT 1, SECTION 3)
          IDENT(16)-COMPRESSION FLAG   (BYTE 7, BIT 2, SECTION 3)
          IDENT(17)-MASTER TABLE NUMBER(BYTE 4, SECTION 1, ED 2 OR GTR)
      KDATA       - ARRAY CONTAINING DECODED REPORTS FROM BUFR MESSAGE.
                    KDATA(REPORT NUMBER,PARAMETER NUMBER)
                    ARRAYS CONTAINING DATA FROM TABLE B
      ANAME    - DESCRIPTOR NAME
      AUNITS   - UNITS FOR DESCRIPTOR
      MSCALE   - SCALE FOR VALUE OF DESCRIPTOR
      MREF     - REFERENCE VALUE FOR DESCRIPTOR
      MWIDTH   - BIT WIDTH FOR VALUE OF DESCRIPTOR
      INDEX    - POINTER TO AVAILABLE SUBSET

REMARKS:
        Error returns:
        IPTR(1) = 1   'BUFR' NOT FOUND IN FIRST 125 CHARACTERS
                = 2   '7777' NOT FOUND IN LOCATION DETERMINED BY
                      BY USING COUNTS FOUND IN EACH SECTION. ONE OR
                      MORE SECTIONS HAVE AN ERRONEOUS BYTE COUNT OR
                      CHARACTERS '7777' ARE NOT IN TEST MESSAGE.
                = 3   MESSAGE CONTAINS A DESCRIPTOR WITH F=0 THAT DOES
                      NOT EXIST IN TABLE B.
                = 4   MESSAGE CONTAINS A DESCRIPTOR WITH F=3 THAT DOES
                      NOT EXIST IN TABLE D.
                = 5   MESSAGE CONTAINS A DESCRIPTOR WITH F=2 WITH THE
                      VALUE OF X OUTSIDE THE RANGE 1-5.
                = 6   DESCRIPTOR ELEMENT INDICATED TO HAVE A FLAG VALUE
                      DOES NOT HAVE AN ENTRY IN THE FLAG TABLE.
                      (TO BE ACTIVATED)
                = 7   DESCRIPTOR INDICATED TO HAVE A CODE VALUE DOES
                      NOT HAVE AN ENTRY IN THE CODE TABLE.
                      (TO BE ACTIVATED)
                = 8   ERROR READING TABLE D
                = 9   ERROR READING TABLE B
                = 10  ERROR READING CODE/FLAG TABLE
                = 11  DESCRIPTOR 2 04 004 NOT FOLLOWED BY 0 31 021
                = 12  DATA DESCRIPTOR OPERATOR QUALIFIER DOES NOT FOLLOW
                      DELAYED REPLICATION DESCRIPTOR.
                = 13  BIT WIDTH ON ASCII CHARACTERS NOT A MULTIPLE OF 8
                = 14  SUBSETS = 0, NO CONTENT BULLETIN
                = 20  EXCEEDED COUNT FOR DELAYED REPLICATION PASS
                = 21  EXCEEDED COUNT FOR NON-DELAYED REPLICATION PASS
                = 22  SECTION 1 COUNT EXCEEDS 10000
                = 23  SECTION 2 COUNT EXCEEDS 10000
                = 24  SECTION 3 COUNT EXCEEDS 10000
                = 25  SECTION 4 COUNT EXCEEDS 10000
                = 27  NON ZERO LOWEST ON TEXT DATA
                = 28  NBINC NOT NR OF CHARACTERS
                = 29  TABLE B APPEARS TO BE DAMAGED
                = 99  NO MORE SUBSETS (REPORTS) AVAILABLE IN CURRENT
                      BUFR MESAGE
                = 400 NUMBER OF SUBSETS EXCEEDS CAPABILITY OF ROUTINE
                = 401 NUMBER OF PARAMETERS (AND ASSOCIATED FIELDS)
                      EXCEEDS LIMITS OF THIS PROGRAM.
                = 500 VALUE FOR NBINC HAS BEEN FOUND THAT EXCEEDS
                      STANDARD WIDTH PLUS ANY BIT WIDTH CHANGE.
                      CHECK ALL BIT WIDTHS UP TO POINT OF ERROR.
                = 501 CORRECTED WIDTH FOR DESCRIPTOR IS 0 OR LESS

         on the initial call to w3fi67 with a bufr message the argument
     index must be set to zero (index = 0). On the return from w3fi67
     'index' will be set to the next available subset/report. When
     there are no more subsets available a 99 err return will occur.
 
     If the original bufr message does not contain delayed replication
     the bufr message will be completely decoded and 'index' will point
     to the first decoded subset. The users will then have the option
     of indexing through the subsets on their own or by recalling this
     routine (without resetting 'index') to have the routine do the
     indexing.
 
     If the original bufr message does contain delayed replication
     one subset/report will be decoded at a time and passed back to
     the user. This is not an option.
 
   =============================================
    TO USE THIS ROUTINE
   ---------------------------------------------
        1. READ IN BUFR MESSAGE
        2. SET INDEX = 0
        3. CALL W3FI67(        )
        4. IF (IPTR(1).EQ.99) THEN
                       NO MORE SUBSETS
                      EITHER GO TO 1
                      OR TERMINATE IN NO MORE BUFR MESSAGES
           END IF
        5. IF (IPTR(1).NE.0) THEN
                         ERROR CONDITION
                      EITHER GO TO 1
                      OR TERMINATE IN NO MORE BUFR MESSAGES
           END IF
        6. THE VALUE OF INDEX INDICATES THE ACTIVE SUBSET SO
           IF INTERESTED IN GENERATING AN IFOD MESSAGE
               CALL W3FL05 (        )
           ELSE
               PROCESS DECODED INFORMATION AS REQUIRED
           END IF
        7. GO TO 3
   =============================================
        THE ARRAYS TO CONTAIN THE OUTPUT INFORMATION ARE DEFINED
        AS FOLLOWS:
            KDATA(A,B)  IS THE A DATA ENTRY  (INTEGER VALUE)
                        WHERE A IS THE MAXIMUM NUMBER OF REPORTS/SUBSETS
                        (FOR THIS VERSION OF THE DECODER A=500)
                        THAT MAY BE CONTAINED IN THE BUFR MESSAGE, AND
                        WHERE B IS THE MAXIMUM NUMBER OF DESCRIPTOR
                        COMBINATIONS THAT MAY BE PROCESSED.
                        UPPER AIR DATA AND SOME SATELLITE DATA REQUIRE
                        A VALUE FOR B OF 1600, BUT FOR MOST OTHER DATA
                        A VALUE FOR B OF 500 WILL SUFFICE
            MSTACK(1,B) CONTAINS THE DESCRIPTOR THAT MATCHES THE
                        DATA ENTRY
            MSTACK(2,B) IS THE SCALE (POWER OF 10) TO BE APPLIED TO
                        THE DATA


W3FI68

The W3FI68 routine converts an array of 25, or 27 integer words
           into a grib product definition section (PDS) of 28
           bytes , or 30 bytes.  If pds bytes > 30, they are
           set to zero.

USAGE:    CALL W3FI68 (ID, PDS)

   Input argument list:
      ID       - 25, 27 WORD INTEGER ARRAY

   Output argument list:
      PDS      - 28 30,  OR GREATER CHARACTER PDS FOR EDITION 1
 
REMARKS:
        LAYOUT OF 'ID' ARRAY:
        ID(1)  = NUMBER OF BYTES IN PRODUCT DEFINITION SECTION (PDS)
        ID(2)  = PARAMETER TABLE VERSION NUMBER
        ID(3)  = IDENTIFICATION OF ORIGINATING CENTER
        ID(4)  = MODEL IDENTIFICATION (ALLOCATED BY ORIGINATING CENTER)
        ID(5)  = GRID IDENTIFICATION
        ID(6)  = 0 IF NO GDS SECTION, 1 IF GDS SECTION IS INCLUDED
        ID(7)  = 0 IF NO BMS SECTION, 1 IF BMS SECTION IS INCLUDED
        ID(8)  = INDICATOR OF PARAMETER AND UNITS (TABLE 2)
        ID(9)  = INDICATOR OF TYPE OF LEVEL       (TABLE 3)
        ID(10) = VALUE 1 OF LEVEL  (0 FOR 1-100,102,103,105,107
                 109,111,113,115,117,119,125,160,200,201
                 LEVEL IS IN ID WORD 11)
        ID(11) = VALUE 2 OF LEVEL
        ID(12) = YEAR OF CENTURY
        ID(13) = MONTH OF YEAR
        ID(14) = DAY OF MONTH
        ID(15) = HOUR OF DAY
        ID(16) = MINUTE OF HOUR   (IN MOST CASES SET TO 0)
        ID(17) = FCST TIME UNIT
        ID(18) = P1 PERIOD OF TIME
        ID(19) = P2 PERIOD OF TIME
        ID(20) = TIME RANGE INDICATOR
        ID(21) = NUMBER INCLUDED IN AVERAGE
        ID(22) = NUMBER MISSING FROM AVERAGES
        ID(23) = CENTURY  (20, CHANGE TO 21 ON JAN. 1, 2001)
        ID(24) = SUBCENTER IDENTIFICATION
        ID(25) = SCALING POWER OF 10
        ID(26) = FLAG BYTE, 8 ON/OFF FLAGS
                 BIT NUMBER  VALUE  ID(26)   DEFINITION
                 1           0      0      FULL FCST FIELD
                             1      128    FCST ERROR FIELD
                 2           0      0      ORIGINAL FCST FIELD
                             1      64     BIAS CORRECTED FCST FIELD
                 3           0      0      ORIGINAL RESOLUTION RETAINED
                             1      32     SMOOTHED FIELD
                 NOTE: ID(26) CAN BE THE SUM OF BITS 1, 2, 3.
                 BITS 4-8 NOT USED, SET TO ZERO
                 IF ID(1) IS 28, YOU DO NOT NEED ID(26) AND ID(27).
        ID(27) = UNUSED, SET TO 0 SO PDS BYTE 30 IS SET TO ZERO.


W3FI69

The W3FI69 routine converts an edition 1 grib produce definition
           section (PDS) to a 25, or 27 word integer array.

USAGE:    CALL W3FI69 (PDS, ID)

   Input argument list:
      PDS      - 28 TO 100 CHARACTER PRODUCT DEFINITION SECTION
                 (PDS)
   Output argument list:
      ID       - 25, OR 27 WORD INTEGER ARRAY
 
REMARKS:
        List caveats, other helpful hints or information.


W3FI70

The W3FI70 routine computes the four scaling constants used by
           GRDPRT, W3FP03, or W3FP05 from the 28 byte (PDS)
           product definition section of grib edition one.

USAGE:  CALL W3FI70(PDS,CNST,IER)

   Input variables:
      PDS    28 BYTE (PDS) GRIB PRODUCT DEFINITION SECTION
 
   Output variables:
      CNST   4 CONSTANT'S USED BY GRDPRT,W3FP05, OR W3FP03
      IER    0 = NORMAL RETURN
             1 = ID'S IN IDENT ARE NOT IN O.N. 388 FORMAT


W3FI71

The W3FI71 routine makes a 18, 37, 55, 64, or 91 word integer array
           used by w3fi72 grib packer to make the grid descriptioni
           section (gds) - section 2.

USAGE:    CALL W3FI71 (IGRID, IGDS, IERR)

   Input argument list:
      IGRID       - GRIB GRID NUMBER, OR OFFICE NOTE 84 GRID NUMBER
 
   Output argument list:
      IGDS        - 18, 37, 55, 64, OR 91 WORD INTEGER ARRAY WITH
                    INFORMATION TO MAKE A GRIB GRID DESCRIPTION SECTION.
      IERR        - 0  CORRECT EXIT
                    1  GRID TYPE IN IGRID IS NOT IN TABLE
 
REMARKS:
        1) OFFICE NOTE GRID TYPE 26 IS 6 IN GRIB, 26 IS AN
           INTERNATIONAL EXCHANGE GRID.
 
        2) VALUES RETURNED IN 18, 37, 55, 64, OR 91 WORD INTEGER ARRAY
           IGDS VARY DEPENDING ON GRID REPRESENTATION TYPE.
        LAT/LON GRID:
            IGDS( 1) = NUMBER OF VERTICAL COORDINATES
            IGDS( 2) = PV, PL OR 255
            IGDS( 3) = DATA REPRESENTATION TYPE (CODE TABLE 6)
            IGDS( 4) = NO. OF POINTS ALONG A LATITUDE
            IGDS( 5) = NO. OF POINTS ALONG A LONGITUDE MERIDIAN
            IGDS( 6) = LATITUDE OF ORIGIN (SOUTH - IVE)
            IGDS( 7) = LONGITUDE OF ORIGIN (WEST -IVE)
            IGDS( 8) = RESOLUTION FLAG (CODE TABLE 7)
            IGDS( 9) = LATITUDE OF EXTREME POINT (SOUTH - IVE)
            IGDS(10) = LONGITUDE OF EXTREME POINT (WEST - IVE)
            IGDS(11) = LATITUDE INCREMENT
            IGDS(12) = LONGITUDE INCREMENT
            IGDS(13) = SCANNING MODE FLAGS (CODE TABLE 8)
            IGDS(14) = ... THROUGH ...
            IGDS(18) =   ... NOT USED FOR THIS GRID
            IGDS(19) - IGDS(91) FOR GRIDS 37-44, NUMBER OF POINTS
                       IN EACH OF 73 ROWS.
 
        GAUSSIAN GRID:
            IGDS( 1) = ... THROUGH ...
            IGDS(10) =   ... SAME AS LAT/LON GRID
            IGDS(11) = NUMBER OF LATITUDE LINES BETWEEN A POLE
                       AND THE EQUATOR
            IGDS(12) = LONGITUDE INCREMENT
            IGDS(13) = SCANNING MODE FLAGS (CODE TABLE 8)
            IGDS(14) = ... THROUGH ...
            IGDS(18) =   ... NOT USED FOR THIS GRID
 
        SPHERICAL HARMONICS:
            IGDS( 1) = NUMBER OF VERTICAL COORDINATES
            IGDS( 2) = PV, PL OR 255
            IGDS( 3) = DATA REPRESENTATION TYPE (CODE TABLE 6)
            IGDS( 4) = J - PENTAGONAL RESOLUTION PARAMETER
            IGDS( 5) = K - PENTAGONAL RESOLUTION PARAMETER
            IGDS( 6) = M - PENTAGONAL RESOLUTION PARAMETER
            IGDS( 7) = REPRESENTATION TYPE (CODE TABLE 9)
            IGDS( 8) = REPRESENTATION MODE (CODE TABLE 10)
            IGDS( 9) = ... THROUGH ...
            IGDS(18) =   ... NOT USED FOR THIS GRID
 
        POLAR STEREOGRAPHIC:
            IGDS( 1) = NUMBER OF VERTICAL COORDINATES
            IGDS( 2) = PV, PL OR 255
            IGDS( 3) = DATA REPRESENTATION TYPE (CODE TABLE 6)
            IGDS( 4) = NO. OF POINTS ALONG X-AXIS
            IGDS( 5) = NO. OF POINTS ALONG Y-AXIS
            IGDS( 6) = LATITUDE OF ORIGIN (SOUTH -IVE)
            IGDS( 7) = LONGITUTE OF ORIGIN (WEST -IVE)
            IGDS( 8) = RESOLUTION FLAG (CODE TABLE 7)
            IGDS( 9) = LONGITUDE OF MERIDIAN PARALLEL TO Y-AXIS
            IGDS(10) = X-DIRECTION GRID LENGTH (INCREMENT)
            IGDS(11) = Y-DIRECTION GRID LENGTH (INCREMENT)
            IGDS(12) = PROJECTION CENTER FLAG (0=NORTH POLE ON PLANE,
                                               1=SOUTH POLE ON PLANE,
            IGDS(13) = SCANNING MODE FLAGS (CODE TABLE 8)
            IGDS(14) = ... THROUGH ...
            IGDS(18) =   .. NOT USED FOR THIS GRID
 
        MERCATOR:
            IGDS( 1) = ... THROUGH ...
            IGDS(12) =   ... SAME AS LAT/LON GRID
            IGDS(13) = LATITUDE AT WHICH PROJECTION CYLINDER
                         INTERSECTS EARTH
            IGDS(14) = SCANNING MODE FLAGS
            IGDS(15) = ... THROUGH ...
            IGDS(18) =   .. NOT USED FOR THIS GRID
 
        LAMBERT CONFORMAL:
            IGDS( 1) = NUMBER OF VERTICAL COORDINATES
            IGDS( 2) = PV, PL OR 255
            IGDS( 3) = DATA REPRESENTATION TYPE (CODE TABLE 6)
            IGDS( 4) = NO. OF POINTS ALONG X-AXIS
            IGDS( 5) = NO. OF POINTS ALONG Y-AXIS
            IGDS( 6) = LATITUDE OF ORIGIN (SOUTH -IVE)
            IGDS( 7) = LONGITUTE OF ORIGIN (WEST -IVE)
            IGDS( 8) = RESOLUTION FLAG (CODE TABLE 7)
            IGDS( 9) = LONGITUDE OF MERIDIAN PARALLEL TO Y-AXIS
            IGDS(10) = X-DIRECTION GRID LENGTH (INCREMENT)
            IGDS(11) = Y-DIRECTION GRID LENGTH (INCREMENT)
            IGDS(12) = PROJECTION CENTER FLAG (0=NORTH POLE ON PLANE,
                                               1=SOUTH POLE ON PLANE,
            IGDS(13) = SCANNING MODE FLAGS (CODE TABLE 8)
            IGDS(14) = NOT USED
            IGDS(15) = FIRST LATITUDE FROM THE POLE AT WHICH THE
                       SECANT CONE CUTS THE SPERICAL EARTH
            IGDS(16) = SECOND LATITUDE ...
            IGDS(17) = LATITUDE OF SOUTH POLE (MILLIDEGREES)
            IGDS(18) = LONGITUDE OF SOUTH POLE (MILLIDEGREES)
 
        ARAKAWA SEMI-STAGGERED E-GRID ON ROTATED LAT/LON GRID
            IGDS( 1) = NUMBER OF VERTICAL COORDINATES
            IGDS( 2) = PV, PL OR 255
            IGDS( 3) = DATA REPRESENTATION TYPE (CODE TABLE 6) [201]
            IGDS( 4) = NI  - TOTAL NUMBER OF ACTUAL DATA POINTS
                             INCLUDED ON GRID
            IGDS( 5) = NJ  - DUMMY SECOND DIMENSION; SET=1
            IGDS( 6) = LA1 - LATITUDE  OF FIRST GRID POINT
            IGDS( 7) = LO1 - LONGITUDE OF FIRST GRID POINT
            IGDS( 8) = RESOLUTION AND COMPONENT FLAG (CODE TABLE 7)
            IGDS( 9) = LA2 - NUMBER OF MASS POINTS ALONG
                             SOUTHERNMOST ROW OF GRID
            IGDS(10) = LO2 - NUMBER OF ROWS IN EACH COLUMN
            IGDS(11) = DI  - LONGITUDINAL DIRECTION INCREMENT
            IGDS(12) = DJ  - LATITUDINAL  DIRECTION INCREMENT
            IGDS(13) = SCANNING MODE FLAGS (CODE TABLE 8)
            IGDS(14) = ... THROUGH ...
            IGDS(18) = ... NOT USED FOR THIS GRID (SET TO ZERO)
 
        ARAKAWA FILLED E-GRID ON ROTATED LAT/LON GRID
            IGDS( 1) = NUMBER OF VERTICAL COORDINATES
            IGDS( 2) = PV, PL OR 255
            IGDS( 3) = DATA REPRESENTATION TYPE (CODE TABLE 6) [202]
            IGDS( 4) = NI  - TOTAL NUMBER OF ACTUAL DATA POINTS
                             INCLUDED ON GRID
            IGDS( 5) = NJ  - DUMMY SECOND DIMENTION; SET=1
            IGDS( 6) = LA1 - LATITUDE LATITUDE OF FIRST GRID POINT
            IGDS( 7) = LO1 - LONGITUDE OF FIRST GRID POINT
            IGDS( 8) = RESOLUTION AND COMPONENT FLAG (CODE TABLE 7)
            IGDS( 9) = LA2 - NUMBER OF (ZONAL) POINTS IN EACH ROW
            IGDS(10) = LO2 - NUMBER OF (MERIDIONAL) POINTS IN EACH
                             COLUMN
            IGDS(11) = DI  - LONGITUDINAL DIRECTION INCREMENT
            IGDS(12) = DJ  - LATITUDINAL  DIRECTION INCREMENT
            IGDS(13) = SCANNING MODE FLAGS (CODE TABLE 8)
            IGDS(14) = ... THROUGH ...
            IGDS(18) = ... NOT USED FOR THIS GRID
 
        ARAKAWA STAGGERED E-GRID ON ROTATED LAT/LON GRID
            IGDS( 1) = NUMBER OF VERTICAL COORDINATES
            IGDS( 2) = PV, PL OR 255
            IGDS( 3) = DATA REPRESENTATION TYPE (CODE TABLE 6) [203]
            IGDS( 4) = NI  - NUMBER OF DATA POINTS IN EACH ROW
            IGDS( 5) = NJ  - NUMBER OF ROWS
            IGDS( 6) = LA1 - LATITUDE OF FIRST GRID POINT
            IGDS( 7) = LO1 - LONGITUDE OF FIRST GRID POINT
            IGDS( 8) = RESOLUTION AND COMPONENT FLAG (CODE TABLE 7)
            IGDS( 9) = LA2 - CENTRAL LATITUDE
            IGDS(10) = LO2 - CENTRAL LONGTITUDE
            IGDS(11) = DI  - LONGITUDINAL DIRECTION INCREMENT
            IGDS(12) = DJ  - LATITUDINAL  DIRECTION INCREMENT
            IGDS(13) = SCANNING MODE FLAGS (CODE TABLE 8)
            IGDS(14) = ... THROUGH ...
            IGDS(18) = ... NOT USED FOR THIS GRID


W3FI72

The W3FI72 routine makes a complete grib message from a user supplied
           array of floating point or integer data.

USAGE:  CALL W3FI72(ITYPE,FLD,IFLD,IBITL,IPFLAG,ID,PDS,
                    IGFLAG,IGRID,IGDS,ICOMP,IBFLAG,IBMAP,
                    IBLEN,IBDSFL,IBDSFL,NPTS,KBUF,ITOT,JERR)
 
   Input argument list:
      ITYPE    - 0 = FLOATING POINT DATA SUPPLIED IN ARRAY 'FLD'
                 1 = INTEGER DATA SUPPLIED IN ARRAY 'IFLD'
      FLD      - REAL ARRAY OF DATA (AT PROPER GRIDPOINTS) TO BE
                 CONVERTED TO GRIB FORMAT IF ITYPE=0.
                 SEE REMARKS #1 & 2.
      IFLD     - INTEGER ARRAY OF DATA (AT PROPER GRIDPOINTS) TO BE
                 CONVERTED TO GRIB FORMAT IF ITYPE=1.
                 SEE REMARKS #1 & 2.
      IBITL    - 0 = COMPUTER COMPUTES LENGTH FOR PACKING DATA FROM
                     POWER OF 2 (NUMBER OF BITS) BEST FIT OF DATA
                     USING 'VARIABLE' BIT PACKER W3FI58.
                 8, 12, ETC. COMPUTER RESCALES DATA TO FIT INTO THAT
                     'FIXED' NUMBER OF BITS USING W3FI59.
                 SEE REMARKS #3.
 
      IPFLAG   - 0 = MAKE PDS FROM USER SUPPLIED ARRAY (ID)
                 1 = USER SUPPLYING PDS
                 NOTE: IF PDS IS GREATER THAN 30, USE IPLFAG=1.
                 THE USER COULD CALL W3FI68 BEFORE HE CALLS
                 W3FI72. THIS WOULD MAKE THE FIRST 30 BYTES OF
                 THE PDS, USER THEN WOULD MAKE BYTES AFTER 30.
      ID       - INTEGER ARRAY OF  VALUES THAT W3FI68 WILL USE
                 TO MAKE AN EDITION 1 PDS IF IPFLAG=0.  (SEE THE
                 DOCBLOCK FOR W3FI68 FOR LAYOUT OF ARRAY)
      PDS      - CHARACTER ARRAY OF VALUES (VALID PDS SUPPLIED
                 BY USER) IF IPFLAG=1. LENGTH MAY EXCEED 28 BYTES
                 (CONTENTS OF BYTES BEYOND 28 ARE PASSED
                 THROUGH UNCHANGED).
 
      IGFLAG   - 0 = MAKE GDS BASED ON 'IGRID' VALUE.
                 1 = MAKE GDS FROM USER SUPPLIED INFO IN 'IGDS'
                     AND 'IGRID' VALUE.
                 SEE REMARKS #4.
      IGRID    - #   = GRID IDENTIFICATION (TABLE B)
                 255 = IF USER DEFINED GRID; IGDS MUST BE SUPPLIED
                       AND IGFLAG MUST =1.
      IGDS     - INTEGER ARRAY CONTAINING USER GDS INFO (SAME
                 FORMAT AS SUPPLIED BY W3FI71 - SEE DOCKBLOCK FOR
                 LAYOUT) IF IGFLAG=1.
      ICOMP    - RESOLUTION AND COMPONENT FLAG FOR BIT 5 OF GDS(17)
                 0 = EARTH ORIENTED WINDS
                 1 = GRID ORIENTED WINDS
 
      IBFLAG   - 0 = MAKE BIT MAP FROM USER SUPPLIED DATA
                 # = BIT MAP PREDEFINED BY CENTER
                 SEE REMARKS #5.
      IBMAP    - INTEGER ARRAY CONTAINING BIT MAP
      IBLEN    - LENGTH OF BIT MAP WILL BE USED TO VERIFY LENGTH
                 OF FIELD (ERROR IF IT DOESN'T MATCH).
 
      IBDSFL   - INTEGER ARRAY CONTAINING TABLE 11 FLAG INFO
                 BDS OCTET 4:
                 (1) 0 = GRID POINT DATA
                     1 = SPHERICAL HARMONIC COEFFICIENTS
                 (2) 0 = SIMPLE PACKING
                     1 = SECOND ORDER PACKING
                 (3) ... SAME VALUE AS 'ITYPE'
                     0 = ORIGINAL DATA WERE FLOATING POINT VALUES
                     1 = ORIGINAL DATA WERE INTEGER VALUES
                 (4) 0 = NO ADDITIONAL FLAGS AT OCTET 14
                     1 = OCTET 14 CONTAINS FLAG BITS 5-12
                 (5) 0 = RESERVED - ALWAYS SET TO 0
          BYTE 6 OPTION 1 NOT AVAILABLE (AS OF 5-16-93)
                 (6) 0 = SINGLE DATUM AT EACH GRID POINT
                     1 = MATRIX OF VALUES AT EACH GRID POINT
          BYTE 7 OPTION 0 WITH SECOND ORDER PACKING N/A (AS OF 5-16-93)
                 (7) 0 = NO SECONDARY BIT MAPS
                     1 = SECONDARY BIT MAPS PRESENT
                 (8) 0 = SECOND ORDER VALUES HAVE CONSTANT WIDTH
                     1 = SECOND ORDER VALUES HAVE DIFFERENT WIDTHS
 
   Output argument list:
      NPTS     - NUMBER OF GRIDPOINTS IN ARRAY FLD OR IFLD
      KBUF     - ENTIRE GRIB MESSAGE ('GRIB' TO '7777')
                 EQUIVALENCE TO INTEGER ARRAY TO MAKE SURE IT
                 IS ON WORD BOUNARY.
      ITOT     - TOTAL LENGTH OF GRIB MESSAGE IN BYTES
      JERR     - = 0, COMPLETED MAKING GRIB FIELD WITHOUT ERROR
                   1, IPFLAG NOT 0 OR 1
                   2, IGFLAG NOT 0 OR 1
                   3, ERROR CONVERTING IEEE F.P. NUMBER TO IBM370 F.P.
                   4, W3FI71 ERROR/IGRID NOT DEFINED
                   5, W3FK74 ERROR/GRID REPRESENTATION TYPE NOT VALID
                   6, GRID TOO LARGE FOR PACKER DIMENSION ARRAYS
                      SEE AUTOMATION DIVISION FOR REVISION!
                   7, LENGTH OF BIT MAP NOT EQUAL TO SIZE OF FLD/IFLD
                   8, W3FI73 ERROR, ALL VALUES IN IBMAP ARE ZERO

   Output files:
      FT06F001 - STANDARD FORTRAN OUTPUT PRINT FILE
 
REMARKS:
    1)  IF BIT MAP TO BE INCLUDED IN MESSAGE, NULL DATA SHOULD
        BE INCLUDED IN FLD OR IFLD.  THIS ROUTINE WILL TAKE CARE
        OF 'DISCARDING' ANY NULL DATA BASED ON THE BIT MAP.
    2)  UNITS MUST BE THOSE IN GRIB DOCUMENTATION:  NMC O.N. 388
        OR WMO PUBLICATION 306.
    3)  IN EITHER CASE, INPUT NUMBERS WILL BE MULTIPLIED BY
        '10 TO THE NTH' POWER FOUND IN ID(25) OR PDS(27-28),
        THE D-SCALING FACTOR, PRIOR TO BINARY PACKING.
    4)  ALL NMC PRODUCED GRIB FIELDS WILL HAVE A GRID DEFINITION
        SECTION INCLUDED IN THE GRIB MESSAGE.  ID(6) WILL BE
        SET TO '1'.
        - GDS WILL BE BUILT BASED ON GRID NUMBER (IGRID), UNLESS
          IGFLAG=1 (USER SUPPLYING IGDS).  USER MUST STILL SUPPLY
          IGRID EVEN IF IGDS PROVIDED.
    5)  IF BIT MAP USED THEN ID(7) OR PDS(8) MUST INDICATE THE
        PRESENCE OF A BIT MAP.
    6)  ARRAY KBUF SHOULD BE EQUIVALENCED TO AN INTEGER VALUE OR
        ARRAY TO MAKE SURE IT IS ON A WORD BOUNDARY.
    7)  SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.


W3FI73

The W3FI73 routine constructs a grib bit map section (BMS).

USAGE:    CALL W3FI73 (IBFLAG, IBMAP, IBLEN, BMS, LENBMS, IER)

   Input argument list:
      IBFLAG      - 0, IF BIT MAP SUPPLIED BY USER
                  - #, NUMBER OF PREDEFINED CENTER BIT MAP
      IBMAP       - INTEGER ARRAY CONTAINING USER BIT MAP
      IBLEN       - LENGTH OF BIT MAP
 
   Output argument list:
      BMS       - COMPLETED GRIB BIT MAP SECTION
      LENBMS    - LENGTH OF BIT MAP SECTION
      IER       - 0 NORMAL EXIT, 8 = IBMAP VALUES ARE ALL ZERO
 
REMARKS:
        Subprogram can be called from a multiprocessing environment.



W3FI74

The W3FI74 routine constructs a grib grid definition section (GDS).

USAGE:    CALL W3FI74 (IGDS, ICOMP, GDS, LENGDS, NPTS, IGERR)

   Input argument list:
      IGDS        - INTEGER ARRAY SUPPLIED BY W3FI71
      ICOMP       - TABLE 7- RESOLUTION & COMPONENT FLAG (BIT 5)
                    FOR GDS(17) WIND COMPONENTS
 
   Output argument list:
      GDS       - COMPLETED GRIB GRID DEFINITION SECTION
      LENGDS    - LENGTH OF GDS
      NPTS      - NUMBER OF POINTS IN GRID
      IGERR     - 1, GRID REPRESENTATION TYPE NOT VALID
 
REMARKS:
        Subprogram can be called from a multiprocessing environment.


W3FI75

The W3FI75 routine packs a grib field and forms octets (1-11)
           of the binary data section (BDS).

USAGE:    CALL W3FI75 (IBITL,ITYPE,ITOSS,FLD,IFLD,IBMAP,IBDSFL,
                       NPTS,BDS11,IPFLD,PFLD,LEN,LENBDS,IBERR,PDS,IGDS)

   Input argument list:
      IBITL     - 0, COMPUTER COMPUTES PACKING LENGTH FROM POWER
                     OF 2 THAT BEST FITS THE DATA.
                  8, 12, ETC. COMPUTER RESCALES DATA TO FIT INTO
                     SET NUMBER OF BITS.
      ITYPE     - 0 = IF INPUT DATA IS FLOATING POINT (FLD)
                  1 = IF INPUT DATA IS INTEGER (IFLD)
      ITOSS     - 0 = NO BIT MAP IS INCLUDED (DON'T TOSS DATA)
                  1 = TOSS NULL DATA ACCORDING TO IBMAP
      FLD       - REAL ARRAY OF DATA TO BE PACKED IF ITYPE=0
      IFLD      - INTEGER ARRAY TO BE PACKED IF ITYPE=1
      IBMAP     - BIT MAP SUPPLIED FROM USER
      IBDSFL    - INTEGER ARRAY CONTAINING TABLE 11 FLAG INFO
                  BDS OCTET 4:
                  (1) 0 = GRID POINT DATA
                      1 = SPHERICAL HARMONIC COEFFICIENTS
                  (2) 0 = SIMPLE PACKING
                      1 = SECOND ORDER PACKING
                  (3) 0 = ORIGINAL DATA WERE FLOATING POINT VALUES
                      1 = ORIGINAL DATA WERE INTEGER VALUES
                  (4) 0 = NO ADDITIONAL FLAGS AT OCTET 14
                      1 = OCTET 14 CONTAINS FLAG BITS 5-12
                  (5) 0 = RESERVED - ALWAYS SET TO 0
                  (6) 0 = SINGLE DATUM AT EACH GRID POINT
                      1 = MATRIX OF VALUES AT EACH GRID POINT
                  (7) 0 = NO SECONDARY BIT MAPS
                      1 = SECONDARY BIT MAPS PRESENT
                  (8) 0 = SECOND ORDER VALUES HAVE CONSTANT WIDTH
                      1 = SECOND ORDER VALUES HAVE DIFFERENT WIDTHS
      NPTS      - NUMBER OF GRIDPOINTS IN ARRAY TO BE PACKED
      IGDS      - ARRAY OF GDS INFORMATION
 
   Output argument list:
      BDS11     - FIRST 11 OCTETS OF BDS
      PFLD      - PACKED GRIB FIELD
      LEN       - LENGTH OF PFLD
      LENBDS    - LENGTH OF BDS
      IBERR     - 1, ERROR CONVERTING IEEE F.P. NUMBER TO IBM370 F.P.
 
REMARKS:
        Subprogram can be called from a multiprocessing environment.
 


W3FI76

The W3FI76 routine converts to IBM370 floating point number.

USAGE:    CALL W3FI76 (FVAL, KEXP, KMANT, NBITS)

   Input argument list:
      PVAL     - FLOATING POINT NUMBER TO BE CONVERTED
      KBITS    - NUMBER OF BITS IN COMPUTER WORD (32 OR 64)

   Output argument list:
      KEXP     -  8 BIT SIGNED EXPONENT
      KMANT    - 24 BIT  MANTISSA  (FRACTION)

REMARKS:
        Subprogram can be called from a multiprocessing environment.


W3FI78

The W3FI78 routine decodes a bufr message and places information
           extracted from the bufr message into selected arrays 

USAGE:    CALL W3FI78(IPTR,IDENT,MSGA,ISTACK,MSTACK,KDATA,KNR,INDEX,
                      MAXR,MAXD,IUNITB,IUNITD)

   Input argument list:
      MSGA     - ARRAY CONTAINING SUPPOSED BUFR MESSAGE
                 SIZE IS DETERMINED BY USER, CAN BE GREATER
                 THAN 10000 BYTES.
      MAXR     - MAXIMUM NUMBER OF REPORTS/SUBSETS THAT MAY BE
                 CONTAINED IN A BUFR MESSAGE
      MAXD     - MAXIMUM NUMBER OF DESCRIPTOR COMBINATIONS THAT
                 MAY BE PROCESSED; UPPER AIR DATA AND SOME SATELLITE
                 DATA REQUIRE A VALUE FOR MAXD OF 1600, BUT FOR MOST
                 OTHER DATA A VALUE FOR MAXD OF 500 WILL SUFFICE
      IUNITB   - UNIT NUMBER OF DATA SET HOLDING TABLE B
      IUNITD   - UNIT NUMBER OF DATA SET HOLDING TABLE D
 
   Output argument list:      (INCLUDING WORK ARRAYS)
      ISTACK   - ORIGINAL ARRAY OF DESCRIPTORS EXTRACTED FROM
                 SOURCE BUFR MESSAGE.
 
      MSTACK(A,B)-LEVEL B - DESCRIPTOR NUMBER (LIMITED TO VALUE OF
                            INPUT ARGUMENT MAXD)
 
                  LEVEL A = 1 DESCRIPTOR
                          = 2 10**N SCALING TO RETURN TO ORIGINAL VALUE
      IPTR     - UTILITY ARRAY
          IPTR( 1)- ERROR RETURN
          IPTR( 2)- BYTE COUNT SECTION 1
          IPTR( 3)- POINTER TO START OF SECTION 1
          IPTR( 4)- BYTE COUNT SECTION 2
          IPTR( 5)- POINTER TO START OF SECTION 2
          IPTR( 6)- BYTE COUNT SECTION 3
          IPTR( 7)- POINTER TO START OF SECTION 3
          IPTR( 8)- BYTE COUNT SECTION 4
          IPTR( 9)- POINTER TO START OF SECTION 4
          IPTR(10)- START OF REQUESTED SUBSET, RESERVED FOR DAR
          IPTR(11)- CURRENT DESCRIPTOR PTR IN IWORK
          IPTR(12)- LAST DESCRIPTOR POS IN IWORK
          IPTR(13)- LAST DESCRIPTOR POS IN ISTACK
          IPTR(14)- NUMBER OF TABLE B ENTRIES
          IPTR(15)- REQUESTED SUBSET POINTER, RESERVED FOR DAR
          IPTR(16)- INDICATOR FOR EXISTANCE OF SECTION 2
          IPTR(17)- NUMBER OF REPORTS PROCESSED
          IPTR(18)- ASCII/TEXT EVENT
          IPTR(19)- POINTER TO START OF BUFR MESSAGE
          IPTR(20)- NUMBER OF LINES FROM TABLE D
          IPTR(21)- TABLE B SWITCH
          IPTR(22)- TABLE D SWITCH
          IPTR(23)- CODE/FLAG TABLE SWITCH
          IPTR(24)- ADITIONAL WORDS ADDED BY TEXT INFO
          IPTR(25)- CURRENT BIT NUMBER
          IPTR(26)- DATA WIDTH CHANGE
          IPTR(27)- DATA SCALE CHANGE
          IPTR(28)- DATA REFERENCE VALUE CHANGE
          IPTR(29)- ADD DATA ASSOCIATED FIELD
          IPTR(30)- SIGNIFY CHARACTERS
          IPTR(31)- NUMBER OF EXPANDED DESCRIPTORS IN MSTACK
          IPTR(32)- CURRENT DESCRIPTOR SEGMENT F
          IPTR(33)- CURRENT DESCRIPTOR SEGMENT X
          IPTR(34)- CURRENT DESCRIPTOR SEGMENT Y
          IPTR(35)- UNUSED
          IPTR(36)- NEXT DESCRIPTOR MAY BE UNDECIPHERABLE
          IPTR(37)- UNUSED
          IPTR(38)- UNUSED
          IPTR(39)- DELAYED REPLICATION FLAG
                       0 - NO DELAYED REPLICATION
                       1 - MESSAGE CONTAINS DELAYED REPLICATION
          IPTR(40)- NUMBER OF CHARACTERS IN TEXT FOR CURR DESCRIPTOR
      IDENT    - ARRAY CONTAINS MESSAGE INFORMATION EXTRACTED FROM
                   BUFR MESSAGE -
          IDENT( 1)-EDITION NUMBER     (BYTE 4, SECTION 1)
          IDENT( 2)-ORIGINATING CENTER (BYTES 5-6, SECTION 1)
          IDENT( 3)-UPDATE SEQUENCE    (BYTE 7, SECTION 1)
          IDENT( 4)-OPTIONAL SECTION   (BYTE 8, SECTION 1)
          IDENT( 5)-BUFR MESSAGE TYPE  (BYTE 9, SECTION 1)
                   0 = SURFACE (LAND)
                   1 = SURFACE (SHIP)
                   2 = VERTICAL SOUNDINGS OTHER THAN SATELLITE
                   3 = VERTICAL SOUNDINGS (SATELLITE)
                   4 = SNGL LVL UPPER-AIR OTHER THAN SATELLITE
                   5 = SNGL LVL UPPER-AIR (SATELLITE)
                   6 = RADAR
          IDENT( 6)-BUFR MSG SUB-TYPE  (BYTE 10, SECTION 1)
               TYPE SBTYP
                2     7   = PROFILER
          IDENT( 7)-                   (BYTES 11-12, SECTION 1)
          IDENT( 8)-YEAR OF CENTURY    (BYTE 13, SECTION 1)
          IDENT( 9)-MONTH OF YEAR      (BYTE 14, SECTION 1)
          IDENT(10)-DAY OF MONTH       (BYTE 15, SECTION 1)
          IDENT(11)-HOUR OF DAY        (BYTE 16, SECTION 1)
          IDENT(12)-MINUTE OF HOUR     (BYTE 17, SECTION 1)
          IDENT(13)-RSVD BY ADP CENTERS(BYTE 18, SECTION 1)
          IDENT(14)-NR OF DATA SUBSETS (BYTE 5-6, SECTION 3)
          IDENT(15)-OBSERVED FLAG      (BYTE 7, BIT 1, SECTION 3)
          IDENT(16)-COMPRESSION FLAG   (BYTE 7, BIT 2, SECTION 3)
          IDENT(17)-MASTER TABLE NUMBER(BYTE 4, SECTION 1, ED 2 OR GTR)
      KDATA    - ARRAY CONTAINING DECODED REPORTS FROM BUFR MESSAGE.
                 KDATA(REPORT NUMBER,PARAMETER NUMBER)
                 (REPORT NUMBER LIMITED TO VALUE OF INPUT ARGUMENT
                  MAXR AND PARAMETER NUMBER LIMITED TO VALUE OF INPUT
                  ARGUMENT MAXD)
             ARRAYS CONTAINING DATA FROM TABLE B
      ANAME    - DESCRIPTOR NAME
      AUNITS   - UNITS FOR DESCRIPTOR
      MSCALE   - SCALE FOR VALUE OF DESCRIPTOR
      MREF     - REFERENCE VALUE FOR DESCRIPTOR
      MWIDTH   - BIT WIDTH FOR VALUE OF DESCRIPTOR
      INDEX    - POINTER TO AVAILABLE SUBSET
 
REMARKS:
     Error returns:

     IPTR(1) = 1   'BUFR' NOT FOUND IN FIRST 125 CHARACTERS
             = 2   '7777' NOT FOUND IN LOCATION DETERMINED BY
                   BY USING COUNTS FOUND IN EACH SECTION. ONE OR
                   MORE SECTIONS HAVE AN ERRONEOUS BYTE COUNT OR
                   CHARACTERS '7777' ARE NOT IN TEST MESSAGE.
             = 3   MESSAGE CONTAINS A DESCRIPTOR WITH F=0 THAT DOES
                   NOT EXIST IN TABLE B.
             = 4   MESSAGE CONTAINS A DESCRIPTOR WITH F=3 THAT DOES
                   NOT EXIST IN TABLE D.
             = 5   MESSAGE CONTAINS A DESCRIPTOR WITH F=2 WITH THE
                   VALUE OF X OUTSIDE THE RANGE 1-5.
             = 6   DESCRIPTOR ELEMENT INDICATED TO HAVE A FLAG VALUE
                   DOES NOT HAVE AN ENTRY IN THE FLAG TABLE.
                   (TO BE ACTIVATED)
             = 7   DESCRIPTOR INDICATED TO HAVE A CODE VALUE DOES
                   NOT HAVE AN ENTRY IN THE CODE TABLE.
                   (TO BE ACTIVATED)
             = 8   ERROR READING TABLE D
             = 9   ERROR READING TABLE B
             = 10  ERROR READING CODE/FLAG TABLE
             = 11  DESCRIPTOR 2 04 004 NOT FOLLOWED BY 0 31 021
             = 12  DATA DESCRIPTOR OPERATOR QUALIFIER DOES NOT FOLLOW
                   DELAYED REPLICATION DESCRIPTOR.
             = 13  BIT WIDTH ON ASCII CHARACTERS NOT A MULTIPLE OF 8
             = 14  SUBSETS = 0, NO CONTENT BULLETIN
             = 20  EXCEEDED COUNT FOR DELAYED REPLICATION PASS
             = 21  EXCEEDED COUNT FOR NON-DELAYED REPLICATION PASS
             = 27  NON ZERO LOWEST ON TEXT DATA
             = 28  NBINC NOT NR OF CHARACTERS
             = 29  TABLE B APPEARS TO BE DAMAGED
             = 99  NO MORE SUBSETS (REPORTS) AVAILABLE IN CURRENT
                   BUFR MESAGE
 
             = 400 NUMBER OF SUBSETS EXCEEDS THE VALUE OF INPUT
                   ARGUMENT MAXR; MUST INCREASE MAXR TO VALUE OF
                   IDENT(14) IN CALLING PROGRAM
 
             = 401 NUMBER OF PARAMETERS (AND ASSOCIATED FIELDS)
                   EXCEEDS LIMITS OF THIS PROGRAM.
             = 500 VALUE FOR NBINC HAS BEEN FOUND THAT EXCEEDS
                   STANDARD WIDTH PLUS ANY BIT WIDTH CHANGE.
                   CHECK ALL BIT WIDTHS UP TO POINT OF ERROR.
             = 501 CORRECTED WIDTH FOR DESCRIPTOR IS 0 OR LESS
 
         ON THE INITIAL CALL TO W3FI78 WITH A BUFR MESSAGE THE ARGUMENT
     INDEX MUST BE SET TO ZERO (INDEX = 0). ON THE RETURN FROM W3FI78
     'INDEX' WILL BE SET TO THE NEXT AVAILABLE SUBSET/REPORT. WHEN
     THERE ARE NO MORE SUBSETS AVAILABLE A 99 ERR RETURN WILL OCCUR.
 
     IF THE ORIGINAL BUFR MESSAGE DOES NOT CONTAIN DELAYED REPLICATION
     THE BUFR MESSAGE WILL BE COMPLETELY DECODED AND 'INDEX' WILL POINT
     TO THE FIRST DECODED SUBSET. THE USERS WILL THEN HAVE THE OPTION
     OF INDEXING THROUGH THE SUBSETS ON THEIR OWN OR BY RECALLING THIS
     ROUTINE (WITHOUT RESETTING 'INDEX') TO HAVE THE ROUTINE DO THE
     INDEXING.
 
     IF THE ORIGINAL BUFR MESSAGE DOES CONTAIN DELAYED REPLICATION
     ONE SUBSET/REPORT WILL BE DECODED AT A TIME AND PASSED BACK TO
     THE USER. THIS IS NOT AN OPTION.
 
   ================================
    TO USE THIS ROUTINE
   --------------------------------
        1. READ IN BUFR MESSAGE
        2. SET INDEX = 0
        3. CALL W3FI78(        )
        4. IF (IPTR(1).EQ.99) THEN
                       NO MORE SUBSETS
                      EITHER GO TO 1
                      OR TERMINATE IN NO MORE BUFR MESSAGES
           END IF
        5. IF (IPTR(1).NE.0) THEN
                         ERROR CONDITION
                      EITHER GO TO 1
                      OR TERMINATE IN NO MORE BUFR MESSAGES
           END IF
        6. THE VALUE OF INDEX INDICATES THE ACTIVE SUBSET SO
           IF INTERESTED IN GENERATING AN IFOD MESSAGE
               CALL W3FL05 (        )
           ELSE
               PROCESS DECODED INFORMATION AS REQUIRED
           END IF
        7. GO TO 3

        THE ARRAYS TO CONTAIN THE OUTPUT INFORMATION ARE DEFINED
        AS FOLLOWS:
 
            KDATA(A,B)  IS THE A DATA ENTRY  (INTEGER VALUE)
                        WHERE A IS THE MAXIMUM NUMBER OF REPORTS/SUBSETS
                        THAT MAY BE CONTAINED IN THE BUFR MESSAGE (THIS
                        IS NOW SET TO "MAXR" WHICH IS PASSED AS AN INPUT
                        ARGUMENT TO W3FI78), AND WHERE B IS THE MAXIMUM
                        NUMBER OF DESCRIPTOR COMBINATIONS THAT MAY
                        BE PROCESSED (THIS IS NOW SET TO "MAXD" WHICH
                        IS ALSO PASSED AS AN INPUT ARGUMENT TO W3FI78;
                        UPPER AIR DATA AND SOME SATELLITE DATA REQUIRE
                        A VALUE FOR MAXD OF 1600, BUT FOR MOST OTHER
                        DATA A VALUE FOR MAXD OF 500 WILL SUFFICE)
            MSTACK(1,B) CONTAINS THE DESCRIPTOR THAT MATCHES THE
                        DATA ENTRY (MAX. VALUE FOR B IS NOW "MAXD"
                        WHICH IS PASSED AS AN INPUT ARGUMENT TO W3FI78)
            MSTACK(2,B) IS THE SCALE (POWER OF 10) TO BE APPLIED TO
                        THE DATA (MAX. VALUE FOR B IS NOW "MAXD"
                        WHICH IS PASSED AS AN INPUT ARGUMENT TO W3FI78)

W3FI82

The W3FI82 routine converts to array of second differences and
           returns the original first value and the first
           first-difference as separate values.

USAGE:    CALL W3FI82 (IFLD,FVAL1,FDIFF1,NPTS)

   Input argument list:
      IFLD     - INTEGER INPUT ARRAY
      NPTS     - NUMBER OF POINTS IN ARRAY

   Output argument list:
      IFLD     - SECOND DIFFERENCED FIELD
      FVAL1    - FLOATING POINT ORIGINAL FIRST VALUE
      FDIFF1   -     "      "   FIRST FIRST-DIFFERENCE

REMARKS:
        Subprogram can be called from a multiprocessing environment.


W3FI83

The W3FI83 routine restores delta packed data to original values
           restore from boustrephedonic alignment.

USAGE:    CALL W3FI83(DATA,NPTS,FVAL1,FDIFF1,ISCAL2,
                      ISC10,KPDS,KGDS)

   Input argument list:
      DATA     - SECOND ORDER DIFFERENCES
      NPTS     - NUMBER OF POINTS IN ARRAY
      FVAL1    - ORIGINAL FIRST ENTRY IN ARRAY
      FDIFF1   - ORIGINAL FIRST FIRST-DIFFERENCE
      ISCAL2   - POWER-OF-TWO EXPONENT FOR UNSCALING
      ISC10    - POWER-OF-TEN EXPONENT FOR UNSCALING
      KPDS     - ARRAY OF INFORMATION FOR PDS
      KGDS     - ARRAY OF INFORMATION FOR GDS
 
   Output argument list:
      DATA     - EXPANDED ORIGINAL DATA VALUES
 
REMARKS:
        Subprogram can be called from a multiprocessing environment.



W3FI85

The W3FI85 routine generates a bufr message (WMO CODE FM94).
           There may be  a section 2 INCLUDED IN THE BUFR MESSAGE
           IF THE USER FOLLOWS PROPER PROCEDURE.  MESSAGES ARE 
           CONSTRUCTED IN ACCORDANCE WITH BUFR EDITION 2. ENTRIES
           FOR SECTION 1 MUST BE PASSED TO THIS ROUTINE IN THE ISECT1 ARRAY.
           ENTRIES FOR SECTION 3 MUST BE PASSED TO THIS ROUTINE IN ISECT3.

USAGE: CALL W3FI85(ISTEP,IUNITB,IUNITD,IBFSIZ,ISECT1,ISECT3,
                   JIF,JDESC,NEWNR,IDATA,RDATA,ATEXT,KASSOC,
                   KIF,KDESC,NRDESC,ISEC2D,ISEC2B,
                   KDATA,KARY,KBUFR,IERRTN)

   Input argument list:
      ISTEP    - KEY FOR SELECTION OF PROCESSING STEP
             1  = PROCESS INTEGER/TEXT ARRAY INTO KDATA
             2  = PROCESS REAL/TEXT ARRAY INTO KDATA
             3  = CONSTRUCT BUFR MESSAGE
      IUNITB   - UNIT NUMBER OF DEVICE CONTAINING TABLE B
      IUNITD   - UNIT NUMBER OF DEVICE CONTAINING TABLE D
      IBFSIZ   - SIZE IN BYTES OF BUFR MESSAGE ARRAY (KBUFR)
                   SHOULD BE A MULTIPLE OF WORD SIZE.
      ISECT1   - CONTAINS INFORMATION TO ENTER INTO SECTION 1
           ( 1) EDITION NUMBER
           ( 2) BUFR MASTER TABLE NUMBER
                    0 = METEOROLOGICAL
                    OTHERS NOT YET DEFINED
           ( 3) ORIGINATING CENTER - SUBCENTER NUMBER
           ( 4) ORIGINATING CENTER NUMBER
           ( 5) UPDATE SEQUENCE NUMBER
           ( 6) OPTIONAL SECTION FLAG
                    SHOULD BE SET TO ZERO UNLESS USER
                    WRITE ADDITIONAL CODE TO ENTER LOCAL
                    INFORMATION INTO SECTION 3
           ( 7) BUFR MESSAGE TYPE
           ( 8) BUFR MESSAGE SUB_TYPE
           ( 9) MASTER TABLE VERSION NUMBER
           (10) LOCAL TABLE VERSION NUMBER
           (11) YEAR OF CENTURY    - REPRESENTATIVE OF DATA
           (12) MONTH              - REPRESENTATIVE OF DATA
           (13) DAY                - REPRESENTATIVE OF DATA
           (14) HOUR               - REPRESENTATIVE OF DATA
           (15) MINUTE             - REPRESENTATIVE OF DATA
           (16)-(20)  UNUSED
 
      ISECT3   - VALUES TO BE INSERTED INTO SECTION 3, AND
                 TO CONTROL REPORT REDUCTION FOR OVERSIZED MESSAGES
           (1)  NUMBER OF SUBSETS
                    DEFINES THE NUMBER OF SUBSETS BEING PASSED TO THE
                    ENCODER ROUTINE FOR INCLUSION INTO A BUFR MESSAGE.
                    IF THE USER HAS SPECIFIED THE USE OF THE
                    SUBSET/REPORT REDUCTION ACTIVATION SWITCH, THEN
                    A PART OF THOSE SUBSETS MAY BE USED FOR THE CURRENT
                    MESSAGE AND THE REMAINDER RETAINED FOR A
                    SUBSEQUENT MESSAGE.
           (2)  OBSERVED FLAG
                    0 = OBSERVED DATA
                    1 = OTHER DATA
           (3)  COMPRESSED FLAG
                    0 = NONCOMPRESSED
                    1 = COMPRESSED
           (4)  SUBSET/REPORT REDUCTION ACTIVATION SWITCH
                    USED TO CONTROL THE NUMBER OF REPORTS ENTERED INTO
                    A BUFR MESSAGE WHEN MAXIMUM MESSAGE SIZE IS EXCEEDED
                    0 = OPTION NOT ACTIVE
                    1 = OPTION IS ACTIVE. UNUSED SUBSETS WILL BE
                        SHIFTED TO LOW ORDER POSITIONS OF ENTRY ARRAY.
                    2 = OPTION IS ACTIVE. UNUSED SUBSETS WILL REMAIN
                        IN ENTRY POSITIONS.
 
                        NOTE:- IF THIS FLAG IS SET TO ANY OTHER
                        VALUES, PROGRAM WILL BE TERMINATED WITH AN
                        ERROR CONDITION.
           (5)  NUMBER OF REPORTS TO DECREMENT BY, IF OVERSIZED MESSAGE
                    (MINIMUM VALUE = ONE).  IF ZERO IS ENTERED, IT WILL
                    BE REPLACED BY ONE.
           (6) NUMBER OF UNUSED REPORTS RETURNED TO USER
           (7) NUMBER OF REPORTS INCLUDED IN MESSAGE
           (8) NUMBER OF TABLE B ENTRIES AVAILABLE TO DECODER
           (9) NUMBER OF TABLE D ENTRIES AVAILABLE TO DECODER
          (10) TEXT INPUT FLAG
                    0  = ASCII INPUT
                    1  = EBCIDIC INPUT
 
      JIF      - JDESC INPUT FORMAT FLAG
                       0  = F X Y
                       1  = DECIMAL FORMAT
      JDESC    - LIST OF DESCRIPTORS TO GO INTO SECTION 3
                  EACH DESCRIPTOR = F * 16384 + X * 256 + Y
                      THEY MAY OR MAY NOT BE AN EXACT MATCH OF THE
                      WORKING DESCRIPTOR LIST IN KDESC.  THIS SET OF
                      DESCRIPTORS MAY CONTAIN SEQUENCE DESCRIPTORS TO
                      PROVIDE ADDITIONAL COMPRESSION WITHIN THE BUFR
                      MESSAGE.  THERE MAY BE AS FEW AS ONE SEQUENCE
                      DESCRIPTOR, OR AS MANY DESCRIPTORS AS THERE ARE
                      IN KDESC.
      NEWNR    - NR OF DESCRIPTORS IN JDESC
      IDATA    - INTEGER ARRAY DIMENSIONED BY THE NUMBER OF
                 DESCRIPTORS TO BE USED
      RDATA    - REAL ARRAY DIMENSIONED BY THE NUMBER OF
                 DESCRIPTORS TO BE USED
      ATEXT    - ARRAY CONTAINING ALL TEXT DATA ASSOCIATED WITH A
                 SPECIFIC REPORT.  ALL DATA IDENTIFIED AS TEXT DATA MUST
                 BE IN ASCII.
      KASSOC   - INTEGER ARRAY DIMENSIONED BY THE NUMBER OF DESCRIPTORS
                 TO BE USED, CONTAINING THE ASSOCIATED FIELD VALUES
                 FOR ANY ENTRY IN THE DESCRIPTOR LIST.
      KIF      - KDESC INPUT FORMAT FLAG
                       0  = F X Y
                       1  = DECIMAL FORMAT
      KDESC    - LIST OF DESCRIPTORS TO GO INTO SECTION 3
                      FULLY EXPANDED SET OF WORKING DESCRIPTORS. THERE
                      SHOULD BE AN ELEMENT DESCRIPTOR FOR EVERY DATA
                      ENTRY, BUT THERE SHOULD BE
                             NO SEQUENCE DESCRIPTORS
      NRDESC   - NR OF DESCRIPTORS IN KDESC
      ISEC2D - DATA OR TEXT TO BE ENTERED INTO SECTION 2
      ISEC2B - NUMBER OF BYTES OF DATA IN ISEC2D
 
      JIF      - JDESC INPUT FORMAT FLAG
                       0  = F X Y
                       1  = DECIMAL FORMAT
      JDESC    - LIST OF DESCRIPTORS TO GO INTO SECTION 3
                  EACH DESCRIPTOR = F * 16384 + X * 256 + Y
                      THEY MAY OR MAY NOT BE AN EXACT MATCH OF THE
                      WORKING DESCRIPTOR LIST IN KDESC.  THIS SET OF
                      DESCRIPTORS MAY CONTAIN SEQUENCE DESCRIPTORS TO
                      PROVIDE ADDITIONAL COMPRESSION WITHIN THE BUFR
                      MESSAGE.  THERE MAY BE AS FEW AS ONE SEQUENCE
                      DESCRIPTOR, OR AS MANY DESCRIPTORS AS THERE ARE
                      IN KDESC.
      NEWNR    - NR OF DESCRIPTORS IN JDESC
      IDATA    - INTEGER ARRAY DIMENSIONED BY THE NUMBER OF
                 DESCRIPTORS TO BE USED
      RDATA    - REAL ARRAY DIMENSIONED BY THE NUMBER OF
                 DESCRIPTORS TO BE USED
      ATEXT    - ARRAY CONTAINING ALL TEXT DATA ASSOCIATED WITH A
                 SPECIFIC REPORT.  ALL DATA IDENTIFIED AS TEXT DATA MUST
                 BE IN ASCII.
      KASSOC   - INTEGER ARRAY DIMENSIONED BY THE NUMBER OF DESCRIPTORS
                 TO BE USED, CONTAINING THE ASSOCIATED FIELD VALUES
                 FOR ANY ENTRY IN THE DESCRIPTOR LIST.
      KIF      - KDESC INPUT FORMAT FLAG
                       0  = F X Y
                       1  = DECIMAL FORMAT
      KDESC    - LIST OF DESCRIPTORS TO GO INTO SECTION 3
                      FULLY EXPANDED SET OF WORKING DESCRIPTORS. THERE
                      SHOULD BE AN ELEMENT DESCRIPTOR FOR EVERY DATA
                      ENTRY, BUT THERE SHOULD BE
                             NO SEQUENCE DESCRIPTORS
      NRDESC   - NR OF DESCRIPTORS IN KDESC
      ISEC2D - DATA OR TEXT TO BE ENTERED INTO SECTION 2
      ISEC2B - NUMBER OF BYTES OF DATA IN ISEC2D
 
    Output argument list:
      KDATA    - SOURCE DATA ARRAY . A 2-DIMENSION INTEGER ARRAY
                       WHERE KDATA(SUBSET,PARAM)
                              SUBSET = SUBSET NUMBER
                              PARAM  = PARAMETER NUMBER
      KARY     - WORKING ARRAY FOR MESSAGE UNDER CONSTRUCTION
             (1) UNUSED
             (2) PARAMETER POINTER
             (3) MESSAGE BIT POINTER
             (4) DELAYED REPLICATION FLAG
                    0 = NO DELAYED REPLICATION
                    1 = CONTAINS DELAYED REPLICATION
             (5) BIT POINTER FOR START OF SECTION 4
             (6) UNUSED
             (7) NR OF BITS FOR PARAMETER/DATA PACKING
             (8) TOTAL BITS FOR ASCII DATA
             (9) SCALE CHANGE VALUE
            (10) INDICATOR (USED IN W3FI85)
                                 1 = NUMERIC DATA
                                 2 = TEXT DATA
            (11) POINTER TO CURRENT POS IN KDESC
            (12) UNUSED
            (13) UNUSED
            (14) UNUSED
            (15) DATA TYPE
            (16) UNUSED
            (17) UNUSED
            (18) WORDS ADDED FOR TEXT OR ASSOCIATED FIELDS
            (19) LOCATION FOR TOTAL BYTE COUNT
            (20) SIZE OF SECTION 0
            (21) SIZE OF SECTION 1
            (22) SIZE OF SECTION 2
            (23) SIZE OF SECTION 3
            (24) SIZE OF SECTION 4
            (25) SIZE OF SECTION 5
            (26) NR BITS ADDED BY TABLE C OPERATOR
            (27) BIT WIDTH OF ASSOCIATED FIELD
            (28) JDESC INPUT FORM FLAG
                       0 = DESCRIPTOR IN F X Y FORM
                                   F IN JDESC(1,I)
                                   X IN JDESC(2,I)
                                   Y IN JDESC(3,I)
                       1 = DESCRIPTOR IN DECIMAL FORM IN JDESC(1,I)
            (29) KDESC INPUT FORM FLAG
                       0 = DESCRIPTOR IN F X Y FORM
                                   F IN KDESC(1,I)
                                   X IN KDESC(2,I)
                                   Y IN KDESC(3,I)
                       1 = DESCRIPTOR IN DECIMAL FORM IN KDESC(1,I)
            (30) BUFR MESSAGE TOTAL BYTE COUNT
      KBUFR    - ARRAY TO CONTAIN COMPLETED BUFR MESSAGE
      IERRTN   - ERROR RETURN FLAG
      KSEQ     - WORKING ARRAY FOR TABLE D INITIAL SEARCH KEY
      KNUM     - WORKING ARRAY FOR TABLE D NUMBER OF DESC'S IN SEQ
      KLIST    - WORKING ARRAY FOR TABLE D SEQUENCES
      ANAME    - TABLE B  DESCRIPTOR NAMES
      AUNITS   - TABLE B  DESCRIPTOR UNITS
      LDESC    - TABLE B  DECIMAL EQUIV OF F X Y VALUES
      KSCALE   - TABLE B  STANDARD SCALE VALUES
      KFRVAL   - TABLE B  REFERENCE VALUES
      KRFVSW   - TABLE B  SWITCHES TO INDICATE IF HAVE NEW/OLD REF VAL
      NEWRFV   - TABLE B  NEW REFERENCE VALUES
      KWIDTH   - ARRAY OF BIT WIDTHS FOR EACH ENTRY IN TABLE B
 
  REMARKS:
          IERRTN    = 0    NORMAL RETURN, BUFR MESSAGE RESIDES IN KBUFR
                           IF ISECT3(4)= 0, ALL REPORTS HAVE BEEN
                                            PROCESSED INTO A BUFR
                                            MESSAGE
                           IF ISECT3(4)= 1, A BUFR MESSAGE HAS BEEN
                                           GENERATED WITH ALL OR PART OF
                                           THE DATA PASSED TO THIS
                                           ROUTINE. ISECT3(6) CONTAINS
                                           THE NUMBER OF REPORTS THAT
                                           WERE NOT USED BUT ARE BEING
                                           HELD FOR THE NEXT MESSAGE.
                    = 1    BUFR MESSAGE CONSTRUCTION WAS HALTED
                           BECAUSE CONTENTS EXCEEDED MAXIMUM SIZE
                           (ONLY WHEN ISECT3(4) = 0)
                    = 2    BUFR MESSAGE CONSTRUCTION WAS HALTED
                           BECAUSE OF ENCOUNTER WITH A DESCRIPTOR
                           NOT FOUND IN TABLE B.
                    = 3    ROUTINE WAS CALLED WITH NO SUBSETS
                    = 4    ERROR OCCURED WHILE READING TABLE B
                    = 5    AN ATTEMPT WAS MADE TO EXPAND JDESC
                           INTO KDESC, BUT A DESCRIPTOR INDICATING
                           DELAYED REPLICATION WAS ENCOUNTERED
                    = 6    ERROR OCCURED WHILE READING TABLE D
                    = 7    DATA VALUE COULD NOT BE CONTAINED
                           IN SPECIFIED BIT WIDTH
                    = 8    DELAYED REPLICATION NOT PERMITTED
                           IN COMPRESSED DATA FORMAT
                    = 9    AN OPERATOR DESCRIPTOR 2 04 YYY OPENING
                           AN ASSOCIATED FIELD (YYY NOT EQ ZERO)
                           WAS NOT FOLLOWED BY THE DEFINING DESCRIPTOR
                           0 31 021 (7957 DECIMAL).
                    = 10   DELAYED REPLICATION DESCRIPTOR WAS NOT
                           FOLLOWED BY DESCRIPTOR FOR DELAYED
                           REPLICATION FACTOR.
                                 0 31 001
                                 0 31 002
                                 0 31 011
                                 0 31 012
                    = 11   ENCOUNTERED A REFERENCE VALUE THAT FORCED A
                           DATA ELEMENT TO BECOME NEGATIVE
                    = 12   NO MATCHING TABLE D ENTRY FOR SEQUENCE
                           DESCRIPTOR.
                    = 13   ENCOUNTERED A NON-ACCEPTABLE DATA ENTRY FLAG.
                           ISECT3(6) SHOULD BE 0 OR 1.
                    = 14   CONVERTING DESCRIPTORS FXY->DECIMAL,
                           NUMBER TO CONVERT = 0
                    = 15   NO DESCRIPTORS SPECIFIED FOR SECTION 3
                    = 16   INCOMPLETE TABLE B, NUMBER OF DESCRIPTORS
                           IN TABLE B DOES NOT MATCH NUMBER OF
                           DESCRIPTORS NEEDED TO CONSTRUCT BUFR MESSAGE
                    = 20   INCORRECT ENTRY OF REPLICATION OR SEQUENCE
                           DESCRIPTOR IN LIST OF REFERENCE VALUE CHANGES
                    = 21   INCORRECT OPERATOR DESCRIPTOR IN LIST OF
                           REFERENCE VALUE CHANGES
                    = 22   ATTEMPTING TO ENTER NEW REFERENCE VALUE INTO
                           TABLE B, BUT DESCRIPTOR DOES NOT EXIST IN
                           CURRENT MODIFIED TABLE B


W3FI88

The W3FI88 routine decodes a bufr message and places information
           extracted from the bufr message into selected arrays
           for the user.

USAGE:    CALL W3FI88(IPTR,IDENT,MSGA,ISTACK,MSTACK,KDATA,KNR,INDEX,
                      LDATA,LSTACK,MAXR,MAXD,IUNITB,IUNITD)

   Input argument list:
      MSGA     - ARRAY CONTAINING SUPPOSED BUFR MESSAGE
                 SIZE IS DETERMINED BY USER, CAN BE GREATER
                 THAN 15000 BYTES.
      MAXR     - MAXIMUM NUMBER OF REPORTS/SUBSETS THAT MAY BE
                 CONTAINED IN A BUFR MESSAGE
      MAXD     - MAXIMUM NUMBER OF DESCRIPTOR COMBINATIONS THAT
                 MAY BE PROCESSED; UPPER AIR DATA AND SOME SATELLITE
                 DATA REQUIRE A VALUE FOR MAXD OF 1700, BUT FOR MOST
                 OTHER DATA A VALUE FOR MAXD OF 500 WILL SUFFICE
      IUNITB   - UNIT NUMBER OF DATA SET HOLDING TABLE B, THIS IS THE
                 NUMBER OF A PAIR OF DATA SETS
      IUNITB+1 - UNIT NUMBER FOR A DATASET TO CONTAIN TABLE B ENTRIES
                 FROM MASTER TABLE B AND TABLE B ENTRIES EXTRACTED
                 FROM TYPE 11 BUFR MESSAGES THAT WERE USED TO DECODE
                 CURRENT BUFR MESSAGES.
      IUNITD   - UNIT NUMBER OF DATA SET HOLDING TABLE D
 
    Output argument list:      (INCLUDING WORK ARRAYS)
      ISTACK   - ORIGINAL ARRAY OF DESCRIPTORS EXTRACTED FROM
                 SOURCE BUFR MESSAGE.
 
      MSTACK(A,B)-LEVEL B - DESCRIPTOR NUMBER (LIMITED TO VALUE OF
                            INPUT ARGUMENT MAXD)
                  LEVEL A = 1 DESCRIPTOR
                          = 2 10**N SCALING TO RETURN TO ORIGINAL VALUE
      IPTR     - UTILITY ARRAY    (SHOULD HAVE AT LAST 42 ENTRIES)
          IPTR( 1)- ERROR RETURN
          IPTR( 2)- BYTE COUNT SECTION 1
          IPTR( 3)- POINTER TO START OF SECTION 1
          IPTR( 4)- BYTE COUNT SECTION 2
          IPTR( 5)- POINTER TO START OF SECTION 2
          IPTR( 6)- BYTE COUNT SECTION 3
          IPTR( 7)- POINTER TO START OF SECTION 3
          IPTR( 8)- BYTE COUNT SECTION 4
          IPTR( 9)- POINTER TO START OF SECTION 4
          IPTR(10)- START OF REQUESTED SUBSET, RESERVED FOR DAR
          IPTR(11)- CURRENT DESCRIPTOR PTR IN IWORK
          IPTR(12)- LAST DESCRIPTOR POS IN IWORK
          IPTR(13)- LAST DESCRIPTOR POS IN ISTACK
          IPTR(14)- NUMBER OF MASTER TABLE B ENTRIES
          IPTR(15)- REQUESTED SUBSET POINTER, RESERVED FOR DAR
          IPTR(16)- INDICATOR FOR EXISTANCE OF SECTION 2
          IPTR(17)- NUMBER OF REPORTS PROCESSED
          IPTR(18)- ASCII/TEXT EVENT
          IPTR(19)- POINTER TO START OF BUFR MESSAGE
          IPTR(20)- NUMBER OF ENTRIES FROM TABLE D
          IPTR(21)- NR TABLE B ENTRIES
          IPTR(22)- NR TABLE B ENTRIES FROM CURRENT MESSAGE
          IPTR(23)- CODE/FLAG TABLE SWITCH
          IPTR(24)- ADITIONAL WORDS ADDED BY TEXT INFO
          IPTR(25)- CURRENT BIT NUMBER
          IPTR(26)- DATA WIDTH CHANGE - ADD TO TABLE B WIDTH
          IPTR(27)- DATA SCALE CHANGE - MODIFIES TABLE B SCALE
          IPTR(28)- DATA REFERENCE VALUE CHANGE - ?????????
          IPTR(29)- ADD DATA ASSOCIATED FIELD
          IPTR(30)- SIGNIFY CHARACTERS
          IPTR(31)- NUMBER OF EXPANDED DESCRIPTORS IN MSTACK
          IPTR(32)- CURRENT DESCRIPTOR SEGMENT F
          IPTR(33)- CURRENT DESCRIPTOR SEGMENT X
          IPTR(34)- CURRENT DESCRIPTOR SEGMENT Y
          IPTR(35)- DATA/DESCRIPTOR REPLICATION IN PROGRESS
                    0  = NO
                    1  = YES
          IPTR(36)- NEXT DESCRIPTOR MAY BE UNDECIPHERABLE
          IPTR(37)- MACHINE TEXT TYPE FLAG
                    0  = EBCIDIC
                    1  = ASCII
          IPTR(38)- DATA/DESCRIPTOR REPLICATION FLAG
                       0 - DOES NOT EXIST IN CURRENT MESSAGE
                       1 - EXISTS IN CURRENT MESSAGE
          IPTR(39)- DELAYED REPLICATION FLAG
                       0 - NO DELAYED REPLICATION
                       1 - MESSAGE CONTAINS DELAYED REPLICATION
          IPTR(40)- NUMBER OF CHARACTERS IN TEXT FOR CURR DESCRIPTOR
          IPTR(41)- NUMBER OF ANCILLARY TABLE B ENTRIES
          IPTR(42)- NUMBER OF ANCILLARY TABLE D ENTRIES
          IPTR(43)- NUMBER OF ADDED TABLE B ENTRIES ENCOUNTERED WHILE
                     PROCESSING A BUFR MESSAGE. THESE ENTRIES ONLY
                     EXIST DURNG PROCESSING OF CURRENT BUFR MESSAGE
          IPTR(44)- BITS PER WORD
          IPTR(45)- BYTES PER WORD
      IDENT    - ARRAY CONTAINS MESSAGE INFORMATION EXTRACTED FROM
                   BUFR MESSAGE -
          IDENT(1) -EDITION NUMBER     (BYTE 4, SECTION 1)
          IDENT(2) -ORIGINATING CENTER (BYTES 5-6, SECTION 1)
          IDENT(3) -UPDATE SEQUENCE    (BYTE 7, SECTION 1)
          IDENT(4) -OPTIONAL SECTION   (BYTE 8, SECTION 1)
          IDENT(5) -BUFR MESSAGE TYPE  (BYTE 9, SECTION 1)
                   0 = SURFACE DATA (LAND)
                   1 = SURFACE DATA (SHIP)
                   2 = VERTICAL SOUNDINGS (OTHER THAN SATELLITE)
                   3 = VERTICAL SOUNDINGS (SATELLITE)
                   4 = SINGLE LVL UPPER-AIR DATA(OTHER THAN SATELLITE)
                   5 = SINGLE LEVEL UPPER-AIR DATA (SATELLITE)
                   6 = RADAR DATA
                   7 = SYNOPTIC FEATURES
                   8 = PHYSICAL/CHEMICAL CONSTITUENTS
                   9 = DISPERSAL AND TRANSPORT
                  10 = RADIOLOGICAL DATA
                  11 = BUFR TABLES (COMPLETE, REPLACEMENT OR UPDATE)
                  12 = SURFACE DATA (SATELLITE)
                  21 = RADIANCES (SATELLITE MEASURED)
                  31 = OCEANOGRAPHIC DATA
          IDENT(6) -BUFR MSG SUB-TYPE  (BYTE 10, SECTION 1)
               TYPE SBTYP
                2     7   = PROFILER
          IDENT(7) -                   (BYTES 11-12, SECTION 1)
          IDENT(8) -YEAR OF CENTURY    (BYTE 13, SECTION 1)
          IDENT(9) -MONTH OF YEAR      (BYTE 14, SECTION 1)
          IDENT(10)-DAY OF MONTH       (BYTE 15, SECTION 1)
          IDENT(11)-HOUR OF DAY        (BYTE 16, SECTION 1)
          IDENT(12)-MINUTE OF HOUR     (BYTE 17, SECTION 1)
          IDENT(13)-RSVD BY ADP CENTERS(BYTE 18, SECTION 1)
          IDENT(14)-NR OF DATA SUBSETS (BYTE 5-6, SECTION 3)
          IDENT(15)-OBSERVED FLAG      (BYTE 7, BIT 1, SECTION 3)
          IDENT(16)-COMPRESSION FLAG   (BYTE 7, BIT 2, SECTION 3)
          IDENT(17)-MASTER TABLE NUMBER(BYTE 4, SECTION 1, ED 2 OR GTR)
      KDATA    - ARRAY CONTAINING DECODED REPORTS FROM BUFR MESSAGE.
                 KDATA(REPORT NUMBER,PARAMETER NUMBER)
 
                 (REPORT NUMBER LIMITED TO VALUE OF INPUT ARGUMENT
                  MAXR AND PARAMETER NUMBER LIMITED TO VALUE OF INPUT
                  ARGUMENT MAXD)
      INDEX    - POINTER TO AVAILABLE SUBSET
 
   ===========================================================
             ARRAYS CONTAINING DATA FROM TABLE B
            NEW - BASE ARRAYS CONTAINING DATA FROM TABLE B
      KFXY1    - DECIMAL DESCRIPTOR VALUE OF F X Y VALUES
      ANAME1   - DESCRIPTOR NAME
      AUNIT1   - UNITS FOR DESCRIPTOR
      ISCAL1   - SCALE FOR VALUE OF DESCRIPTOR
      IRFVL1   - REFERENCE VALUE FOR DESCRIPTOR
      IWIDE1   - BIT WIDTH FOR VALUE OF DESCRIPTOR
   ===========================================================
            NEW - ANCILLARY ARRAYS CONTAINING DATA FROM TABLE B
                   CONTAINING TABLE B ENTRIES EXTRACTED
                   FROM TYPE 11 BUFR MESSAGES
      KFXY2    - DECIMAL DESCRIPTOR VALUE OF F X Y VALUES
      ANAME2   - DESCRIPTOR NAME
      AUNIT2   - UNITS FOR DESCRIPTOR
      ISCAL2   - SCALE FOR VALUE OF DESCRIPTOR
      IRFVL2   - REFERENCE VALUE FOR DESCRIPTOR
      IWIDE2   - BIT WIDTH FOR VALUE OF DESCRIPTOR
   ===========================================================
            NEW - ADDED ARRAYS CONTAINING DATA FROM TABLE B
                   CONTAINING TABLE B ENTRIES EXTRACTED
                   FROM NON-TYPE 11 BUFR MESSAGES
                   THESE EXIST FOR THE LIFE OF CURRENT BUFR MESSAGE
      KFXY3    - DECIMAL DESCRIPTOR VALUE OF F X Y VALUES
      ANAME3   - DESCRIPTOR NAME
      AUNIT3   - UNITS FOR DESCRIPTOR
      ISCAL3   - SCALE FOR VALUE OF DESCRIPTOR
      IRFVL3   - REFERENCE VALUE FOR DESCRIPTOR
      IWIDE3   - BIT WIDTH FOR VALUE OF DESCRIPTOR
   ===========================================================
 
REMARKS:
     Error returns:

     IPTR(1) = 1   'BUFR' NOT FOUND IN FIRST 125 CHARACTERS
             = 2   '7777' NOT FOUND IN LOCATION DETERMINED BY
                   BY USING COUNTS FOUND IN EACH SECTION. ONE OR
                   MORE SECTIONS HAVE AN ERRONEOUS BYTE COUNT OR
                   CHARACTERS '7777' ARE NOT IN TEST MESSAGE.
             = 3   MESSAGE CONTAINS A DESCRIPTOR WITH F=0 THAT DOES
                   NOT EXIST IN TABLE B.
             = 4   MESSAGE CONTAINS A DESCRIPTOR WITH F=3 THAT DOES
                   NOT EXIST IN TABLE D.
             = 5   MESSAGE CONTAINS A DESCRIPTOR WITH F=2 WITH THE
                   VALUE OF X OUTSIDE THE RANGE 1-6.
             = 6   DESCRIPTOR ELEMENT INDICATED TO HAVE A FLAG VALUE
                   DOES NOT HAVE AN ENTRY IN THE FLAG TABLE.
                   (TO BE ACTIVATED)
             = 7   DESCRIPTOR INDICATED TO HAVE A CODE VALUE DOES
                   NOT HAVE AN ENTRY IN THE CODE TABLE.
                   (TO BE ACTIVATED)
             = 8   ERROR READING TABLE D
             = 9   ERROR READING TABLE B
             = 10  ERROR READING CODE/FLAG TABLE
             = 11  DESCRIPTOR 2 04 004 NOT FOLLOWED BY 0 31 021
             = 12  DATA DESCRIPTOR OPERATOR QUALIFIER DOES NOT FOLLOW
                   DELAYED REPLICATION DESCRIPTOR.
             = 13  BIT WIDTH ON ASCII CHARACTERS NOT A MULTIPLE OF 8
             = 14  SUBSETS = 0, NO CONTENT BULLETIN
             = 20  EXCEEDED COUNT FOR DELAYED REPLICATION PASS
             = 21  EXCEEDED COUNT FOR NON-DELAYED REPLICATION PASS
             = 22  EXCEEDED COMBINED BIT WIDTH, BIT WIDTH > 32
             = 23  NO ELEMENT DESCRIPTORS FOLLOWING 2 03 YYY
             = 27  NON ZERO LOWEST ON TEXT DATA
             = 28  NBINC NOT NR OF CHARACTERS
             = 29  TABLE B APPEARS TO BE DAMAGED
             = 30  TABLE D ENTRY WITH MORE THAN 18 IN SEQUENCE
                   BEING ENTERED FROM TYPE 11 MESSAGE
             = 99  NO MORE SUBSETS (REPORTS) AVAILABLE IN CURRENT
                   BUFR MESAGE
 
             = 400 NUMBER OF SUBSETS EXCEEDS THE VALUE OF INPUT
                   ARGUMENT MAXR; MUST INCREASE MAXR TO VALUE OF
                   IDENT(14) IN CALLING PROGRAM
 
             = 401 NUMBER OF PARAMETERS (AND ASSOCIATED FIELDS)
                   EXCEEDS LIMITS OF THIS PROGRAM.
             = 500 VALUE FOR NBINC HAS BEEN FOUND THAT EXCEEDS
                   STANDARD WIDTH PLUS ANY BIT WIDTH CHANGE.
                   CHECK ALL BIT WIDTHS UP TO POINT OF ERROR.
             = 501 CORRECTED WIDTH FOR DESCRIPTOR IS 0 OR LESS
             = 888 NON-NUMERIC CHARACTER IN CONVERSION REQUEST
             = 890 CLASS 0 ELEMENT DESCRIPTOR W/WIDTH OF 0
 
         ON THE INITIAL CALL TO W3FI88 WITH A BUFR MESSAGE THE ARGUMENT
     INDEX MUST BE SET TO ZERO (INDEX = 0). ON THE RETURN FROM W3FI88
     'INDEX' WILL BE SET TO THE NEXT AVAILABLE SUBSET/REPORT. WHEN
     THERE ARE NO MORE SUBSETS AVAILABLE A 99 ERR RETURN WILL OCCUR.
 
     IF THE ORIGINAL BUFR MESSAGE DOES NOT CONTAIN DELAYED REPLICATION
     THE BUFR MESSAGE WILL BE COMPLETELY DECODED AND 'INDEX' WILL POINT
     TO THE FIRST DECODED SUBSET. THE USERS WILL THEN HAVE THE OPTION
     OF INDEXING THROUGH THE SUBSETS ON THEIR OWN OR BY RECALLING THIS
     ROUTINE (WITHOUT RESETTING 'INDEX') TO HAVE THE ROUTINE DO THE
     INDEXING.
 
     IF THE ORIGINAL BUFR MESSAGE DOES CONTAIN DELAYED REPLICATION
     ONE SUBSET/REPORT WILL BE DECODED AT A TIME AND PASSED BACK TO
     THE USER. THIS IS NOT AN OPTION.
 
   =============================================
    TO USE THIS ROUTINE
   =============================================
        THE ARRAYS TO CONTAIN THE OUTPUT INFORMATION ARE DEFINED
        AS FOLLOWS:
 
            KDATA(A,B)  IS THE A DATA ENTRY  (INTEGER VALUE)
                        WHERE A IS THE MAXIMUM NUMBER OF REPORTS/SUBSETS
                        THAT MAY BE CONTAINED IN THE BUFR MESSAGE (THIS
                        IS NOW SET TO "MAXR" WHICH IS PASSED AS AN INPUT
                        ARGUMENT TO W3FI88), AND WHERE B IS THE MAXIMUM
                        NUMBER OF DESCRIPTOR COMBINATIONS THAT MAY
                        BE PROCESSED (THIS IS NOW SET TO "MAXD" WHICH
                        IS ALSO PASSED AS AN INPUT ARGUMENT TO W3FI88;
                        UPPER AIR DATA AND SOME SATELLITE DATA REQUIRE
                        A VALUE FOR MAXD OF 1700, BUT FOR MOST OTHER
                        DATA A VALUE FOR MAXD OF 500 WILL SUFFICE)
            MSTACK(1,B) CONTAINS THE DESCRIPTOR THAT MATCHES THE
                        DATA ENTRY (MAX. VALUE FOR B IS NOW "MAXD"
                        WHICH IS PASSED AS AN INPUT ARGUMENT TO W3FI88)
            MSTACK(2,B) IS THE SCALE (POWER OF 10) TO BE APPLIED TO
                        THE DATA (MAX. VALUE FOR B IS NOW "MAXD"
                        WHICH IS PASSED AS AN INPUT ARGUMENT TO W3FI88)

W3FI92

The W3FI92 routine builds 80 character queue descriptor using
           information supplied by user, placing the completed
           queue descriptor in the location specified by the user.

USAGE:    CALL W3FI92 (LOC,TTAAII,KARY,KWBX,IERR)

   Input argument list:
      TTAAII   - FIRST 6 CHARACTERS OF WMO HEADER
      KARY     - INTEGER ARRAY CONTAINING USER INFORMATION
                (1) = DAY OF MONTH
                (2) = HOUR OF DAY
                (3) = HOUR * 100 + MINUTE
                (4) = CATALOG NUMBER
                (5) = NUMBER OF 80 BYTE INCREMENTS
                (6) = NUMBER OF BYTES IN LAST INCREMENT
                (7) = TOTAL SIZE OF MESSAGE
                      WMO HEADER + BODY OF MESSAGE IN BYTES
                      (NOT INCLUDING QUEUE DESCRIPTOR)
      KWBX     -    = 4 CHARACTERS, REPRESENTING TH FCST MODEL
                      THAT THE BULLETIN WAS DERIVED FROM.
 
   Output argument list:      (INCLUDING WORK ARRAYS)
      LOC      - LOCATION TO RECEIVE QUEUE DESCRIPTOR
      KARY     - SEE INPUT ARGUMENT LIST
      IERR     - ERROR RETURN
 
REMARKS:
        If total size is entered (kary(7)) then kary(5) and
           kary(6) will be calculated.
        If kary(5) and kary(6) are provided then kary(7) will
           be ignored.

W3FM07

The W3FM07 routine smooths data on a rectangular grid using a
           nine-point smoothing operator.

USAGE: CALL W3FM07 (FIN, FOUT, CWORK, GAMMA, NCOL, NROW)

   Input argument list:
      FIN     - REAL   SIZE(NCOL*NROW) ARRAY OF DATA TO BE SMOOTHED
      CWORK   - REAL   SIZE(2*NCOL*(NROW+2)) WORK ARRAY
      GAMMA   - COMPLEX SMOOTHING PARAMETER. THE IMAGINARY PART MUST
                BE POSITIVE.
      NCOL    - INTEGER   NUMBER OF COLUMNS IN THE GRID
      NROW    - INTEGER   NUMBER OF ROWS IN THE GRID

   Output argument list:
      FOUT    - REAL   SIZE(NCOL*NROW) ARRAY OF SMOOTHED DATA. MAY
                BE THE SAME ARRAY AS 'FIN' OR OVERLAP IT IN ANY
                FASHION.


W3FM08

The W3FM08 routine nine point smoother/desmoother. Smoothers
           pass uses an equivalent linear smoother with stencil 
           (.25 .5 .25) and the  desmoother uses with 
           stenciL (-.25 1.5 -.25).

USAGE: CALL W3FM08 (A,Z,LI,LJ)

   Input argument list:
        A  - REAL   SIZE (LI,LJ) ARRAY TO HOLD FIELD TO BE SMOOTHED
        Z  - REAL   SIZE (LI,LJ) WORK AREA
       LI  - INTEGER   NUMBER OF COLUMNS
       LJ  - INTEGER   NUMBER OF ROWS

   Output argument list:
        A  - ARRAY HOLDING SMOOTHED FIELD


W3FP04

The W3FP04 routine prints array of data points at their 
           approximate latitude/longitude positions on a
           polar stereographic projection.

USAGE: CALL W3FP04(IFLD,ALAT,ALON,TITLE,IDIM,CMIL,CMIR,CMJB,CMJT,
                   INUM,XFAC,IERR)

   Input variables:
      IFLD     REAL OR INTEGER FULLWORD ARRAY OF DATA POINTS
      ALAT     REAL ARRAY OF LATITUDE POSITIONS (>0 FOR NH,
               <0 FOR SH) FOR THE DATA TO BE PLOTTED
      ALON     REAL ARRAY OF LONGITUDES (WEST OF GREENWICH)
      TITLE    INTEGER SIZE 10 ALPHANUMERIC ARRAY OF
               CHARACTERS FOR TITLE TO BE WRITTEN ON PRINTOUT
      IDIM     INTEGER NUMBER OF DATA VALUES TO PLOT (SIZE OF
               ARRAYS IFLD, ALAT AND ALON)
      CMIL     REAL LEFT SIDE OF GRID - MINIMUM COARSE MESH
               I COORDINATE (MINIMUM VALUE OF 1.0)
      CMIR     REAL RIGHT SIDE OF GRID - MAXIMUM COARSE MESH
               I COORDINATE (MAXIMUM VALUE OF 65.0)
      CMJB     REAL BOTTOM OF GRID - MINIMUM COARSE MESH
               J COORDINATE (MINIMUM VALUE OF 1.0)
      CMJT     REAL TOP OF GRID - MAXIMUM COARSE MESH J
               COORDINATE (MAXIMUM VALUE OF 65.0)
      INUM     INTEGER THREE DIGIT NUMBER FOR THE FOLLOWING:
                       HUNDREDS DIGIT = TYPE OF DATA
                         1 = FIXED POINT
                         2 = FLOATING POINT
                         3 = ALPHANUMERIC
                       TENS DIGIT = HEMISPHERIC REFERENCE
                         0 = NORTHERN HEMISPHERE
                         1 = SOUTHERN HEMISPHERE
                       UNITS DIGIT = NUMBER OF CHARACTERS TO PLOT
                       MINIMUM = 1 CHARACTER
                       MAXIMUM = 4 CHARACTERS
      XFAC     REAL MAP SCALE FACTOR (DESIRED MAP SCALE = XFAC
                * 1:30,000,000 (STANDARD NMC 65X65 GRID SCALE))

   Output variables:
      TAPE6     PRINTED MAP WHEN EXECUTION IS SUCCESSFUL
      IERR      INTEGER RETURN CODE
 
REMARKS:
        BECAUSE THIS CODE COULD PRODUCE CONSIDERABLE OUTPUT
        THE SUBSET OF THE NMC 65X65 GRID WHICH CAN BE PRINTED IS A
        FUNCTION OF THE MAP SCALE FACTOR, E.G. FOR XFAC=5 THE MAXIMUM
        RANGE OF I AND J IS 27.0, FOR XFAC=2 THE RANGE IS 64.0.


W3FP05

The W3FP05 routine prints a two-dimensional grid of any shape
           with contouring.

USAGE: CALL W3FP05 (RDATA,KTBL,CNST,TITLE,KRECT,KCONTR,LINEV,IWIDTH)

   Input variables:
      RDATA     REAL ARRAY OF GRID DATA TO BE PRINTED.
      KTBL      INTEGER ARRAY WITH SHAPE OF ARRAY.
      CNST      REAL ARRAY OF FOUR ELEMENTS, USED IN
                       SCALING FOR PRINTING AND CONTOURING.
      TITLE     IS A ARRAY OF 132 CHARACTERS OR LESS OF
                       HOLLERITH DATA, 1ST CHAR. MUST BE BLANK.
                       PRINTED AT BOTTOM OF THE MAP.
      KRECT     1 IF GRID IS RECTANGULAR, 0 OTHERWISE.
      KCONTR    1 FOR CONTOURING , 0 OTHERWISE.
      LINEV     0 IS FOR 6 LINES PER VERTICAL INCH,
                       NON-ZERO 8 LINES PER VERTICAL INCH.
      IWIDTH    NUMBER OF CHARACTERS IN PRINT LINE,
                       132 IS STANDARD PRINTER.
 
   Output variables:
      TAPE6     MAPS ON STANDARD FORTRAN PRINT FILE
 
REMARKS:
        Normal subroutine return, unless number of rows
        is greater than 200, prints error message and exits.


W3FP06

The W3FP06 routine provides a title for data fields formulated
           according to NMC O.N. 84.

USAGE: CALL W3FP06 (ARG1, ARG2, N)

   Input variables:
      ARG1       12 WORD FIELD LABEL DESCRIBING THE DATA (6
                       INTEGER WORDS) OFFICE NOTE 84
      N          INTEGER NUMBER OF LINES OF OUTPUT DESIRED
                       = 1  FIRST 88 CHAR. THE ABBREVIATED TITLE
                            (LINE 1 STARTS AT ARG2(1))
                       = 2  FIRST 216 CHAR. DECIMAL VALUES OF THE
                            PARAMETERS
                       = 3  ALL 324 CHAR., HEXIDECIMAL DUMP OF THE 12
                            WORD FIELD LABEL (LINE 3 CHAR. 221
 
   Output variables:
      ARG2       CHARACTER*324 SIZE ARRAY TO CONTAIN
                 THE TITLE IN ACSII

REMARKS: 
        SEE NMC O.N. 84 FOR DATA FIELD ABBREVIATIONS


W3FP10

The W3FP10 routine prints a two-dimensional grid of any shape
           with contouring.

USAGE: CALL W3FP10 (RDATA,KTBL,CNST,TITLE,KRECT,KCONTR,LINEV,IWIDTH)

   Input arguments:
      RDATA  = REAL ARRAY OF GRID DATA TO BE PRINTED.
      KTBL   = INTEGER ARRAY WITH SHAPE OF ARRAY.
      CNST   = REAL ARRAY OF FOUR ELEMENTS, USED IN
               SCALING FOR PRINTING AND CONTOURING.
      TITLE  = IS A ARRAY OF 132 CHARACTERS OR LESS OF
               HOLLERITH DATA, 1ST CHAR. MUST BE BLANK.
               PRINTED AT BOTTOM OF THE MAP.
      KRECT  = 1 IF GRID IS RECTANGULAR, 0 OTHERWISE.
      KCONTR = 1 FOR CONTOURING , 0 OTHERWISE.
      LINEV  = 0 IS FOR 6 LINES PER VERTICAL INCH,
               NON-ZERO 8 LINES PER VERTICAL INCH.
      IWIDTH = NUMBER OF CHARACTERS IN PRINT LINE,
               132 IS STANDARD PRINTER.
 
   Input files:  NONE

   Output arguments:  NONE

   Output files: Standard FORTRAN print file

   Return conditions:
                     NORMAL SUBROUTINE RETURN, UNLESS NUMBER
                     OF ROWS IS GREATER THAN 200, PRINTS ERROR
                     MESSAGE AND EXITS.
REMARKS: 
        SPECIAL VERSION OF W3FP05, 1ST POINT IS UPPER LEFT HAND
        CORNER. WRITTEN ON REQUEST OF PETER CHASE BECAUSE SOME
        GRIB FIELDS CAN START WITH THE UPPER LEFT HAND CORNER
        AS THE 1ST POINT OF A GRID.


W3FP11

The W3FP11 routine converts grib formatted product definition section
           version 1 to a one line readable title.

USAGE:    CALL W3FP11  (IPDS0,  IPDS,  TITL, IERR )

   Input argument list:
      IPDS0    - GRIB SECTION 0 READ AS CHARACTER*8
      IPDS     - GRIB PDS SECTION READ AS CHARACTER*28

   Output argument list:
      TITL     - CHARACTER*86 OUTPUT PRINT LINE
      IERR   0 - COMPLETED SATISFACTORILY
             1 - GRIB SECTION 0, CAN NOT FIND 'GRIB'
             2 - GRIB IS NOT VERSION 1
             3 - LENGTH OF PDS SECTION IS LESS THAN 28
             4 - COULD NOT MATCH TYPE INDICATOR
             5 - COULD NOT MATCH TYPE LEVEL
             6 - COULD NOT INTERPRET ORIGINATOR OF CODE
             7 - COULD NOT INTERPRET SUB CENTER 7 ORIGINATOR OF CODE
             8 - COULD NOT INTERPRET SUB CENTER 9 ORIGINATOR OF CODE
             9 - PARAMETER TABLE VERSION NOT 1 OR 2


W3FP12

The W3FP12 routine the product definition section according to the
           specifications set by wmo. using  o.n. 84 id's
           (1st 8 words) as the input data.

USAGE:    CALL W3FP12  (ID8, IFLAG, IDPDS, ICENT, ISCALE, IER)

   Input argument list:
      ID8      - FIRST 8 ID WORKDS (O.N.84) INTEGER*4
      ICENT    - CENTURY, 2 DIGITS, FOR 1991 IT IS 20.
      IFLAG    - INDICATION OF INCLUSION OR OMISSION OF GRID DEFINITION
                 AND/OR BIT MAP CODE        CHARACTER*1
      ISCALE   - 10 SCALER INTEGER*4

   Output argument list:      (INCLUDING WORK ARRAYS)
      IDPDS    - GRIB PRODUCT DEFINITION SECTION  CHARACTER*1 (28)
      IER      = 0 COMPLETED SMOOTHLY
               = 1 INDICATOR PARAMETER N.A. TO GRIB
               = 2 LEVEL INDICATOR N.A. TO GRIB
               = 3 TIME RANGE N.A. TO GRIB NOTATION
               = 4 LAYERS OR LEVELS N.A. TO GRIB


W3FP13

The W3FP13 routine converts grib version 1 formatted
           product definition section to an Office Note
           84 id label. 

USAGE:    CALL W3FP13  (GRIB, PDS,  ID8, IERR )

   Input argument list:
      GRIB     - GRIB SECTION 0 READ AS CHARACTER*8
      PDS      - GRIB PDS SECTION 1 READ AS CHARACTER*1 PDS(*)
 
   Output argument list:      (INCLUDING WORK ARRAYS)
      ID8      - 12 INTEGER*4 FORMATTED O.N. 84 ID.
                  6 INTEGER 64 BIT WORDS ON CRAY
      IERR   0 - COMPLETED SATISFACTORILY
             1 - GRIB BLOCK 0 NOT CORRECT
             2 - LENGTH OF PDS NOT CORRECT
             3 - COULD NOT MATCH TYPE INDICATOR
             4 - GRID TYPE NOT IN TABLES
             5 - COULD NOT MATCH TYPE LEVEL
             6 - COULD NOT INTERPRET ORIGINATOR OF CODE
 
REMARKS:
        SOME OF THE ID'S WILL NOT BE EXACT TO THE O.N. 84
        FOR LOCATING FIELD ON THE DATASET.  THESE DIFFERENCES
        ARE MAINLY DUE TO TRUNCATION ERRORS WITH LAYERS.
        FOR EXAMPLE: .18019 SIG .47191 SIG R H FOR 36.O HRS
        WILL CONVERT TO: .18000 SIG .47000 SIG R H FOR 36.0 HRS

               THE ABOVE ID'S NOW FORCED TO BE EXACT         
        IF J THE WORD COUNT IS GREATER THEN 32743, J IS STORED
        IN THE 12TH ID WORD. BITS 16-31 OF THE 8TH ID WORD ARE
        SET TO ZERO.


W3FQ07

The W3FQ07 routine sends fax,varian,afos,awips, maps & bulls.

USAGE:    CALL W3FQ07(LPARM, NUMBYT, OUTFIL, CARDFIL, KRTN)

   Input argument list:
      LPARM    - CHARACTER*1 100 BYTE ARRAY CONTAINING ASCII
                 FLAGS AND KEY WORDS.
      NUMBYT   - INTEGER NUMBER OF BYTES OF ASCII DATA IN LPARM.
      OUTFIL   - INTEGER UNIT NUMBER OF FILE TO POST TO THE
                 TELECOMMUNICATIONS GATEWAY COMPUTER SYSTEM.
      CARDFIL  - INTEGER UNIT NUMBER OF FILE TO READ TO GET DATA
                 CONTROL CARD IN LUE OF PARM. THIS IS ONLY NECESSARY
                 WHEN PARM(5:5) = 'A'.

    Output argument list:
      KRTN     - SEE RETURN CONDITIONS.

    Return conditions:
        KRTN = 0 GOOD RETURN, FILE POSTED FOR TRANSMISSION
        KRTN = 1 GOOD RETURN, FILE NOT POSTED FOR TRANSMISSION
                 TEST FLAG WAS ON IE K=TEST OR THERE WAS AN "N"
                 THE 1ST BYTE OF THE INPUT DATA CARD.
        KRTN = 2 BAD  RETURN, POSTING NOT ATTEMPTED, THE "K" KEY
                 WAS MISSING.
        KRTN = 3 BAD  RETURN, POSTING NOT ATTEMPTED, PARM LESS THAN
                 THAN 6 BYTES.
        KRTN = 4 BAD  RETURN, CARD READER EMPTY.
        KRTN = 5 BAD  RETURN, ERROR RETURN FROM SUB DBN_ALERT.
 
    Input files:
      FTNNF001 - FILE THAT CONTAINS THE DATA TO SEND.
                 WHERE 'NN' CAN BE ANY NUMBER FROM 01 TO 99
                 EXCEPT 5 OR 6.  THIS FILE MUST BE ASSIGNED WITH U:NN.
      FTXXF001 - INPUT CARDS, ONLY NECESSARY IF LPARM(3-6) ='CARD'.
                 A SAMPLE DATA CARD IS:
                 M=FT24F001,K=AFOS
                 (ALL ON ONE CARD STARTING IN COL 1).
                 IF COL 1 = 'N' THEN THE DATA SET IS NOT POSTED
                 TO THE MONITIOR,IE., W3FQ07 WILL RETURN TO CALLING
                 PROGRAM WITH OUT SENDING THE PRODUCT.
                      (XX HAS DEFAULT OF 05. HOWEVER THIS NUMBER CAN
                 BE ANY UNIT NUMBER YOU WISH.
 
    Output files:
      FT06F001 - PRINT FILE.
 
REMARKS:
        THE KEY WORDS THAT ARE PASSED TO SUB IN LPARM MAY
        BE IN ANY ORDER IN THE LPARM ARRAY OR DATA CARD.
        THERE IS ONE KEY WORD THAT IS MANDATORY.
        THEY ARE:
        K=KKKKKKK
 
        WHERE KKKKKKKK IS UP TO A 24 BYTE ASCII KEYWORD LEFT-JUSTIFIED
        WHICH IDENTIFIES WHAT DBNET IS TO DO WITH THE INPUT DATA FILE.
   
        'KKKKKKKK' IS GENERALLY A KEYWORD SUCH AS:
        'FAXX', 'TRAN','AFOS','AWIP' BUT MAY BE:
        ANY ONE OF THESE type-keys.
 
   type-keys         FUNCTIONS
 
   AFOS,             Posts AFOS utf map file to CRAY OSO'S statusfile.
   AWIP,             Posts AWIPS map file to CRAY OSO'S statusfile.
   FAXX,             Posts nmc6bit map file to CRAY OSO'S statusfile.
   GRIB,             Posts wmo grib file to CRAY OSO'S statusfile.
   TRAN,             Posts wmo bulletin file to CRAY OSO'S statusfile.
   XTRN,             Posts xtrn file to CRAY OSO'S statusfile.
   IG_DATA_ipsa1,     Sends data file to the intergraph ipsa1.
   IG_DATA_ipsa2,     Sends data file to the intergraph ipsa2.
   IG_DATA_lzr_srv1,  Sends data file to the intergraph lzr_srv1.
   IG_PLTF_ipsa1,     Sends AFOS plot file to the intergraph ipsa1.
   IG_PLTF_ipsa2,     Sends AFOS plot file to the intergraph ipsa2.
   IG_PLTF_lzr_srv1,  Sends AFOS plot file to the intergraph lzr_srv1.
   IG_6BIT_lzr_srv1,  Sends nmc6bit file to the intergraph lzr_srv1.
   TPC_6BIT_nhc-hp13, Sends nmc6bit file to nhc-hp13 at TPC.
   OSO_IG_6BIT_lzr_srv1,  Posts nmc6bit file to CRAY OSO'S
                          statusfile and then Sends nmc6bit file
                          to the intergraph lzr_srv1.
   OSO_TPC_6BIT_nhc-hp13, Posts nmc6bit file to CRAY OSO'S
                          statusfile and then Sends nmc6bit file
                          to nhc-hp13 at TPC.
 
   WHERE OUTFIL IS THE FILE NUMBER CONTAING THE DATA.
     A SAMPLE:
     M=PETERS,K=FAXX WHERE A ',' OR A ' ' TERMINATES THE KEY WORD.
     WHERE A COMMA OR BLANK TERMINATES THE KEY WORD.
 
     THE M= IS AN OPTIONAL KEY WORD. THE 'M' KEY WORD IS THE MODEL NAME
     IF IF MISSING THE "MISSING" IS USED OTHER WISE IT MAY BY ANY
     24 BYTE ASCII STRING.
     A SAMPLE:
     M=AVN,K=AFOS,
     WHERE A COMMA OR BLANK TERMINATES THE KEY WORD.
 

W3FP12

The W3FS13 routine converts year, month and day to day of year.

USAGE:  CALL W3FS13(IYR, IMO, IDA, JDY)

   Input variables:
      IYR    ARG LIST  INTEGER YEAR OF CENTURY, 00-99 OR YEAR OF ERA,
                       1901-2099
      IMO    ARG LIST  INTEGER MONTH OF YEAR, 1-12
      IDA    ARG LIST  INTEGER DAY OF MONTH,  1-31
 
   Output variables:
      JDY    ARG LIST  INTEGER DAY OF YEAR,  1-366
 
REMARKS:
        THIS PROCEDURE IS VALID ONLY FROM THE YEARS 1901-2099
        INCLUSIVE.


W3FS15

The W3FS15 routine updates or backdates a fullword date/time
           word (O.N. 84) by a specified number of hours.

USAGE:    CALL W3FS15 (IDATE, JTAU, NDATE)

   Input argument list:
      IDATE    - PACKED BINARY DATE/TIME AS FOLLOWS:
                 BYTE 1  IS YEAR OF CENTURY  00-99
                 BYTE 2  IS MONTH            01-12
                 BYTE 3  IS DAY OF MONTH     01-31
                 BYTE 4  IS HOUR             00-23
                 SUBROUTINE TAKES ADVANTAGE OF FORTRAN ADDRESS
                 PASSING, IDATE AND NDATE MAY BE
                 A CHARACTER*1 ARRAY OF FOUR, THE LEFT 32
                 BITS OF 64 BIT INTEGER WORD. AN OFFICE NOTE 85
                 LABEL CAN BE STORED IN 4 INTEGER WORDS.
                 IF INTEGER THE 2ND WORD IS USED. OUTPUT
                 IS STORED IN LEFT 32 BITS. FOR A OFFICE NOTE 84
                 LABEL THE 7TH WORD IS IN THE 4TH CRAY 64 BIT
                 INTEGER, THE LEFT 32 BITS.
      JTAU     - INTEGER NUMBER OF HOURS TO UPDATE (IF POSITIVE)
                 OR BACKDATE (IF NEGATIVE)
 
   Output argument list:
      NDATE    - NEW DATE/TIME WORD RETURNED IN THE
                 SAME FORMAT AS 'IDATE'. 'NDATE' AND 'IDATE' MAY
                 BE THE SAME VARIABLE.
 
   NOTES:
         THE FORMAT OF THE DATE/TIME WORD IS THE SAME AS THE
         SEVENTH WORD OF THE PACKED DATA FIELD LABEL (SEE O.N. 84) AND
         THE THIRD WORD OF A BINARY DATA SET LABEL (SEE O.N. 85).

   EXIT STATES:
        AN ERROR FOUND BY OUT OF RANGE TESTS ON THE GIVEN DATE/TIME
        INFORMATION WILL BE INDICATED BY RETURNING A BINARY ZERO WORD
        IN 'NDATE'.


W3FS21

The W3FS21 routine calculates the number of minutes since
           0000, 1 JANUARY 1978.

USAGE:    CALL W3FS21 (IDATE, NMIN)

   Input argument list:
      IDATE    - INTEGER  SIZE 5 ARRAY CONTAINING YEAR OF CENTURY,
                 MONTH, DAY, HOUR AND MINUTE.  IDATE(1) MAY BE
                 A TWO DIGIT YEAR OR 4. IF 2 DIGITS AND GE THAN 78
                 1900 IS ADDED TO IT. IF LT 78 THEN 2000 IS ADDED
                 TO IT. IF 4 DIGITS THE SUBROUTINE WILL WORK
                 CORRECTLY TO THE YEAR 3300 A.D.

   Output argument list:
     NMIN     - INTEGER NUMBER OF MINUTES SINCE 1 JANUARY 1978


W3FS26

The W3FS26 routine computes year (4 digits), month, day,
           day of week, day of year from julian day number.
           This subroutine will work from 1583 A.D. to 3300 A.D.

USAGE:  CALL W3FS26(JLDAYN,IYEAR,MONTH,IDAY,IDAYWK,IDAYYR)

   Input variables:
      JLDAYN ARG LIST  INTEGER   JULIAN DAY NUMBER
 
   Output variables:
      IYEAR  ARG LIST  INTEGER   YEAR  (4 DIGITS)
      MONTH  ARG LIST  INTEGER   MONTH
      IDAY   ARG LIST  INTEGER   DAY
      IDAYWK ARG LIST  INTEGER   DAY OF WEEK (1 IS SUNDAY, 7 IS SAT)
      IDAYYR ARG LIST  INTEGER   DAY OF YEAR (1 TO 366)
 
REMARKS:
        A JULIAN DAY NUMBER CAN BE COMPUTED BY USING ONE OF THE
        FOLLOWING STATEMENT FUNCTIONS. A DAY OF WEEK CAN BE COMPUTED
        FROM THE JULIAN DAY NUMBER. A DAY OF YEAR CAN BE COMPUTED FROM
        A JULIAN DAY NUMBER AND YEAR.

       IYEAR (4 DIGITS)
 
       JDN(IYEAR,MONTH,IDAY) = IDAY - 32075
                  + 1461 * (IYEAR + 4800 + (MONTH - 14) / 12) / 4
                  + 367 * (MONTH - 2 - (MONTH -14) / 12 * 12) / 12
                  - 3 * ((IYEAR + 4900 + (MONTH - 14) / 12) / 100) / 4
 
       IYR (4 DIGITS) , IDYR(1-366) DAY OF YEAR
 
       JULIAN(IYR,IDYR) = -31739 + 1461 * (IYR + 4799) / 4
                          -3 * ((IYR + 4899) / 100) / 4 + IDYR
 
       DAY OF WEEK FROM JULIAN DAY NUMBER, 1 IS SUNDAY, 7 IS SATURDAY.
 
       JDAYWK(JLDAYN) = MOD((JLDAYN + 1),7) + 1
 
       DAY OF YEAR FROM JULIAN DAY NUMBER AND 4 DIGIT YEAR.
 
       JDAYYR(JLDAYN,IYEAR) = JLDAYN -
         (-31739+1461*(IYEAR+4799)/4-3*((IYEAR+4899)/100)/4)
 
       THE FIRST FUNCTION WAS IN A LETTER TO THE EDITOR COMMUNICATIONS
       OF THE ACM  VOLUME 11 / NUMBER 10 / OCTOBER, 1968. THE 2ND
       FUNCTION WAS DERIVED FROM THE FIRST. THIS SUBROUTINE WAS ALSO
       INCLUDED IN THE SAME LETTER. JULIAN DAY NUMBER 1 IS
       JAN 1,4713 B.C. A JULIAN DAY NUMBER CAN BE USED TO REPLACE A
       DAY OF CENTURY, THIS WILL TAKE CARE OF THE DATE PROBLEM IN
       THE YEAR 2000, OR REDUCE PROGRAM CHANGES TO ONE LINE CHANGE
       OF 1900 TO 2000. JULIAN DAY NUMBERS CAN BE USED FOR FINDING
       RECORD NUMBERS IN AN ARCHIVE OR DAY OF WEEK, OR DAY OF YEAR.


W3FT00

The W3FT00 routine transforms data contained in a grid
           array by translation, rotation about a common point
           and dilatation to a new grid array.

USAGE:  CALL W3FT00 (FA,FB,IA,JA,IB,JB,AIP,AJP,BIP,BJP,SC,ARG,LIN)

   Input argument list:
      FA         REAL  ORIGIONAL FIELD DIMENSIONED (IA,IJ)
      IA         INTEGER  I-DIMENSION OF THE INPUT ARRAY FA
      JA         INTEGER  J-DIMENSION OF THE INPUT ARRAY FA
      IB         INTEGER  I-DIMENSION OF THE OUTPUT ARRAY FB
      JB         INTEGER  J-DIMENSION OF THE OUTPUT ARRAY FB
      AIP        REAL   COMMON POINT I-COORDINATE OF THE ORIGIONAL
                       FIELD ASSUMING A RIGHT HAND CARTESIAN COORDINATE
                       SYSTEM. THE POINT NEED NOT BE IN EITHER GRID AND
                       CAN HAVE FRACTIONAL INDICES).
      AJP        REAL  COMMON POINT J-COORDINATE AS AIP ABOVE
      BIP        REAL  COMMON POINT I-COORDINATE FOR TRANSFORMED
                       GRID
      BJP        REAL  COMMON POINT J-COORDINATE FOR TRANSFORMED
                       GRID
      SC         REAL  SCALE CHANGE (DILATION) EXPRESSED AS
                       A RATIO OF THE TRANSFORMED TO THE ORIGIONAL FIELD
      ARG        REAL  DEGREE MEASURE OF THE ANGLE REQUIRED TO
                       ROTATE THE J-ROW OF THE ORIGIONAL GRID INTO
                       COINCIDENCE WITH THE NEW GRID. (+ COUNTER-
                       CLOCKWISE, - CLOCKWISE)
      LIN        INTEGER  INTERPOLATION METHOD SWITCH
                       .EQ. 1 BILINEAR INTERPOLATION
                       .NE. 1 BIQUADRATIC INTERPOLATION
 
   Output argument list:
      FB         REAL  TRANSFORMED FIELD DIMENSIONED (IB,JB)
 
REMARKS:
        IN GENERAL 'FA' AND 'FB' CANNOT BE EQUIVALENCED
        ALTHOUGH THERE ARE SITUATIONS IN WHICH IT WOULD BE SAFE TO DO
        SO. CARE SHOULD BE TAKEN THAT ALL OF THE NEW GRID POINTS LIE
        WITHIN THE ORIGIONAL GRID, NO ERROR CHECKS ARE MADE.


W3FT01

The W3FT01 routine interpolates values in a data field
           for a given grid coordinate in a data array, estimates
           a data value for that point using either a linear
           or quadratic interpolation method.

USAGE:  CALL W3FT01 (STI, STJ, FLD, HI, II, JJ, NCYCLK, LIN)

   Input argument list:
      STI       REAL*4 I GRID COORDINATE OF THE POINT FOR WHICH
                       AN INTERPOLATED VALUE IS DESIRED
      STJ       REAL*4 J GRID COORDINATE OF THE POINT FOR WHICH
                       AN INTERPOLATED VALUE IS DESIRED
      FLD       REAL*4 SIZE(II,JJ) DATA FIELD
      II        INTEGER*4 NUMBER OF COLUMNS IN 'FLD'
      JJ        INTEGER*4 NUMBER OF ROWS IN 'FLD'
      NCYCLK    INTEGER*4 CODE TO SPECIFY IF GRID IS CYCLIC OR
                       NOT:
                        = 0 NON-CYCLIC IN II, NON-CYCLIC IN JJ
                        = 1 CYCLIC IN II, NON-CYCLIC IN JJ
                        = 2 CYCLIC IN JJ, NON-CYCLIC IN II
                        = 3 CYCLIC IN II, CYCLIC IN JJ
      LIN       INTEGER*4 CODE SPECIFYING INTERPOLATION METHOD:
                        = 1 LINEAR INTERPOLATION
                       .NE.1  QUADRATIC INTERPOLATION

   Output argument list:
      HI        REAL*4 DATA FIELD VALUE AT (STI,STJ) OBTAINED
                       BY INTERPOLATION.


W3FT02

The W3FT02 routine interpolates, using a fancy non-linear
           method, gridded quantitative precipitation forecasts 
           to a specific interior point.

USAGE:  CALL W3FT02(RAIN, IMAX, JMAX, PI, PJ, AMOUNT)

   Input argument list:
      RAIN      REAL*4   GRID FIELD OF (FORECAST) PRECIPITATION
      IMAX      INTEGER*4   I-DIMENSION OF RAIN FIELD
      JMAX      INTEGER *4  J-DIMENSION OF RAIN FIELD
      PI        REAL*4   I-COORDINATE OF INTERPOLATION POINT
      PJ        REAL*4   J-COORDINATE OF INTERPOLATION POINT
 
   Output argument list:
      AMOUNT    REAL*4   AMOUNT OF PRECIP INTERPOLATED TO PI,PJ
  

W3FT03

The W3FT03 routine does either bilinear or biquadratic
           interpolation for a point within a two-dimensional
           data array.

USAGE:  CALL W3FT03(FL,HI,STI,STJ,MAXI,MAXJ,KQUAD)

   Input argument list:
      FL     ARG LIST  REAL*4 TWO-DIMENSIONAL CARTESIAN ARRAY OF DATA
      MAXI   ARG LIST  INTEGER*4 I-DIMENSION OF FL
      MAXJ   ARG LIST  INTEGER*4 J-DIMENSION OF FL
      STI    ARG LIST  REAL*4 I-COORDINATE TO WHICH A VALUE IS TO BE
                       INTERPOLATED
      STJ    ARG LIST  REAL*4 J-COORDINATE TO WHICH A VALUE IS TO BE
                       INTERPOLATED
      KQUAD  ARG LIST  INTEGER*4 INTERPOLATION METHOD:
                       IF = 2, BIQUADRATIC INTERPOLATION IS DONE,
                       IF = ANY OTHER VALUE, DO BILINEAR.
 
   Output argument list:
      HI     ARG LIST  REAL*4 INTERPOLATED OUTPUT VALUE
 
REMARKS:
        NO ERROR CHECKS ARE MADE. IT IS LEFT FOR THE USER TO
        DETERMINE THAT THE POINT FOR WHICH INTERPOLATION IS DESIRED
        LIES WITHIN THE GRID.


W3FT05

The W3FT05 routine converts a northern hemisphere 2.5 
           degree lat.,lon. 145 by 37 grid to a polar
           stereographic 65 by 65 grid. The polar
           stereographic map projection is true at 60 deg. North,
           the mesh length is 381 km. and the oriention is
           80 deg. west.

   Input argument list:
      ALOLA     145*37 GRID 2.5 LAT,LON GRID N. HEMI.
                       5365 POINT GRID IS TYPE 29 OR 1D HEX O.N. 84
      LINEAR    1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC
 
   Output argument list:
      APOLA     65*65 GRID OF NORTHERN HEMI.
                       4225 POINT GRID IS TYPE 27 OR 1B HEX O.N. 84
      W1        65*65 SCRATCH FIELD
      W2        65*65 SCRATCH FIELD

REMARKS:
       1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
          REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. IF THEY ARE
          OVER WRITTEN BY THE USER, A WARNING MESSAGE WILL BE PRINTED
          AND W1 AND W2 WILL BE RECOMPUTED.
       2. WIND COMPONENTS ARE NOT ROTATED TO THE 65*65 GRID ORIENTATION
          AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.
       3. THE GRID POINTS VALUES ON THE EQUATOR HAVE BEEN EXTRAPOLATED
          OUTWARD TO ALL THE GRID POINTS OUTSIDE THE EQUATOR ON THE 65*65
          GRID (ABOUT 1100 POINTS).
       4. YOU SHOULD USE THE CRAY VECTORIZED VERSION W3FT05V ON THE CRAY
          IT HAS 3 PARAMETERS IN THE CALL, RUNS ABOUT 10 TIMES FASTER. USES
          MORE MEMORY.


W3FT05V

The W3FT05V routine converts a northern hemisphere 2.5 degree
           lat.,lon. 145 by 37 grid to a polar stereographic 65 by 65
           grid. The polar stereographic map projection is true at
           60 deg. north , the mesh length is 381 km. and the oriention
           is 80 deg. west.

USAGE:  CALL W3FT05V(ALOLA,APOLA,INTERP)

   Input argument list:
      ALOLA  - 145*37 GID 2.5 LAT,LON GRID N. HEMISPHERE
                5365 POINT GRID IS O.N. 84 TYPE 29 OR 1D HEX
                INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output argument list:
      APOLA - 65*65 GRID OF NORTHERN HEMISPHERE.
              4225 POINT GRID IS O.N.84 TYPE 27 OR 1B HEX

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE.
 
    2. WIND COMPONENTS ARE NOT ROTATED TO THE 65*65 GRID ORIENTATION
       AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.
 
    3. THE GRID POINTS VALUES ON THE EQUATOR HAVE BEEN EXTRAPOLATED
       OUTWARD TO ALL THE GRID POINTS OUTSIDE THE EQUATOR ON THE 65*65
       GRID (ABOUT 1100 POINTS).


W3FT06

The W3FT06 routine converts a southern hemisphere 2.5 degree
           lat., lon. 145 by 37 grid to a polar stereographic
           65 by 65 grid. the polar stereographic map projection
           is true at 60 deg. south, the mesh length is 381 km. and
           the oriention is 260 deg. west (100E).

USAGE:  CALL W3FT06(ALOLA,APOLA,W1,W2,LINEAR)

   Input variables:
      ALOLA     145*37 DEG 2.5 LAT,LON GRID S. HEMI.
                       5365 POINT GRID IS TYPE 30 OR 1E HEX O.N. 84
      LINEAR    1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC
 
   Output variables:
      APOLA     65*65 GRID OF SOUTHERN HEMI.
                       4225 POINT GRID IS TYPE 28 OR 1C HEX O.N. 84
      W1        65*65 SCRATCH FIELD
      W2        65*65 SCRATCH FIELD
      FT06F001  ERROR MESSAGE
 
REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. IF THEY ARE
       OVER WRITTEN BY THE USER, A WARNING MESSAGE WILL BE PRINTED
       AND W1 AND W2 WILL BE RECOMPUTED.
 
    2. WIND COMPONENTS ARE NOT ROTATED TO THE 65*65 GRID ORIENTATION
       AFTER INTERPOLATION. YOU MAY USE W3FC10 TO DO THIS.
 
    3. THE GRID POINTS VALUES ON THE EQUATOR HAVE BEEN EXTRAPOLATED
       OUTWARD TO ALL THE GRID POINTS OUTSIDE THE EQUATOR ON THE 65*65
       GRID (ABOUT 1100 POINTS).
 
    4. YOU SHOULD USE THE CRAY VECTORIZED VERION W3FT06V ON THE CRAY
       IT HAS 3 PARAMETERS IN THE CALL, RUNS ABOUT TIMES FASTER, USES
       MORE MEMORY.
 

W3FT06V

The W3FT06V routine converts a southern hemisphere 2.5 degree
           lat., lon. 145 by 37 grid to a polar stereographic
           65 by 65 grid. The polar stereographic map projection is
           true at 60 deg. south , the mesh length is 381 km. and the
           oriention is 260 deg. west.

USAGE:  CALL W3FT06V(ALOLA,APOLA,INTERP)

   Input variables:
      ALOLA  - 145*37 GID 2.5 LAT,LON GRID S. HEMISHERE
               5365 POINT GRID IS O.N.84 TYPE 30 OR 1E HEX
               INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output variables:
      APOLA - 65*65 GRID OF NORTHERN HEMI.
              4225 POINT GRID IS O.N.84 TYPE 28 OR 1C HEX

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE.
    2. WIND COMPONENTS ARE NOT ROTATED TO THE 65*65 GRID ORIENTATION
       AFTER INTERPOLATION. YOU MAY USE W3FC10 TO DO THIS.
    3. THE GRID POINTS VALUES ON THE EQUATOR HAVE BEEN EXTRAPOLATED
       OUTWARD TO ALL THE GRID POINTS OUTSIDE THE EQUATOR ON THE 65*65
       GRID (ABOUT 1100 POINTS).


W3FT07

The W3FT07 routine transforms data contained in a given
           grid array by translation, rotation about a common
           point and dilatation in order to create a new grid 
           array according to specifications.

USAGE:    CALL W3FT07(FLDA,IA,JA,AIPOLE,AJPOLE,BIPOLE,BJPOLE,DSCALE,
                      ANGLE,LINEAR,LDEFQQ,DEFALT,FLDB,IB,JB)

   Input argument list:
      FLDA(IA,JA)   - REAL*4 ORIGINAL SOURCE GRID-POINT DATA FIELD
      AIPOLE,AJPOLE - REAL*4 COMMON POINT I- AND J-COORDINATES OF THE
                      ORIGINAL FIELD, ASSUMING A RIGHT-HAND CARTESIAN
                      COORDINATE SYSTEM. THE POINT NEED NOT BE INSIDE
                      THE BOUNDS OF EITHER GRID
                      AND CAN HAVE FRACTIONAL VALUES.
                      COMMON POINT ABOUT WHICH TO ROTATE THE GRIDPOINTS
      BIPOLE,BJPOLE - REAL*4 COMMON POINT I- AND J-COORDINATES FOR
                      TRANSFORMED DESTINATION GRID
      DSCALE - REAL*4 SCALE-CHANGE (DILATION) EXPRESSED AS
                      A RATIO OF THE TRANSFORMED FIELD TO THE ORIGINAL
                      FIELD
                      DSCALE = GRDLENKM(DESTINATION) / GRDLENKM(SOURCE)
 
      ANGLE  - REAL*4 DEGREE MEASURE OF THE ANGLE REQUIRED TO
                      ROTATE THE J-ROW OF THE ORIGINAL GRID INTO
                      COINCIDENCE WITH THE NEW GRID. (+ COUNTER-
                      CLOCKWISE, - CLOCKWISE)
                      ANGLE = VERTLONW(SOURCE) - VERTLONW(DESTINATION)
 
      LINEAR - LOGICAL*4 INTERPOLATION-METHOD SELECTION SWITCH:
                       .TRUE.   BI-LINEAR INTERPOLATION
                       .FALSE.  BI-QUADRATIC INTERPOLATION
 
      LDEFQQ - LOGICAL*4 DEFAULT-VALUE SWITCH:
                       IF .TRUE. THEN
                         USE DEFAULT-VALUE FOR DESTINATION POINT
                         OUT-OF-BOUNDS OF GIVEN GRID;
                       ELSE
                         EXTRAPOLATE COARSELY FROM NEARBY BNDRY POINT
 
      DEFALT - REAL*4  THE DEFAULT-VALUE TO USE IF LDEFQQ = .TRUE.
 
   Output argument list:
      FLDB(IB,JB) - REAL*4 RESULTING TRANSFORMED DESTINATION FIELD
 
REMARKS:
        LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION
        IN GENERAL 'FLDA' AND 'FLDB' CANNOT BE EQUIVALENCED
        ALTHOUGH THERE ARE SITUATIONS IN WHICH IT WOULD BE SAFE TO DO
        SO. CARE SHOULD BE TAKEN THAT ALL OF THE NEW GRID POINTS LIE
        WITHIN THE ORIGINAL GRID, NO ERROR CHECKS ARE MADE.
 

W3FT08

The W3FT08 routine computes 2.5 x 2.5 N. hemi. grid 
           of 145 x 37 points from spectral coefficients in a
           rhomboidal 30 resolution representing a scaler field.

USAGE:  CALL W3FT08(FLN,GN,PLN,EPS,FL,WORK,TRIGS)

   Input variables:
      FLN       961 COMPLEX COEFF.
      PLN       992 REAL SPACE FOR LEGENDRE POLYNOMIALS.
      EPS       992 REAL SPACE FOR
                       COEFFS. USED IN COMPUTING PLN.
      FL        31 COMPLEX SPACE FOR FOURIER COEFF.
      WORK      144 REAL WORK SPACE FOR SUBR. W3FT12
      TRIGS     216 PRECOMPUTED TRIG FUNCS. USED
                       IN W3FT12, COMPUTED BY W3FA13
 
   Output variables:
      GN        (145,37) GRID VALUES.
                       5365 POINT GRID IS TYPE 29 OR 1D HEX O.N. 84
 
REMARKS:
        THIS SUBROUTINE WAS OPTIMIZED TO RUN IN A SMALL AMOUNT OF
        MEMORY, IT IS NOT OPTIMIZED FOR SPEED, 70 PERCENT OF THE TIME IS
        USED BY SUBROUTINE W3FA12 COMPUTING THE LEGENDRE POLYNOMIALS. SINCE
        THE LEGENDRE POLYNOMIALS ARE CONSTANT THEY NEED TO BE COMPUTED
        ONLY ONCE IN A PROGRAM. BY MOVING W3FA12 TO THE MAIN PROGRAM AND
        COMPUTING PLN AS A (32,31,37) ARRAY AND CHANGING THIS SUBROUTINE
        TO USE PLN AS A THREE DIMENSION ARRAY YOU CAN CUT THE RUNNING TIME
        70 PERCENT.  W3FT38 HAS THESE IMPROVEMENTS.


W3FT09

The W3FT09 routine computes 2.5 x 2.5 N. hemi. grid
           of 145 x 37 points from spectral coefficients in
           a rhomboidal 30 resolution representing a vector field.

USAGE:  CALL W3FT09(VLN,GN,PLN,EPS,FL,WORK,TRIGS,RCOS)

   Input variables:
      VLN    ARG LIST  992 COMPLEX COEFF.
      PLN    ARG LIST  992 SPACE FOR LEGENDRE POLYNOMIALS.
      EPS    ARG LIST  992 REAL SPACE FOR
                       COEFFS. USED IN COMPUTING PLN.
      FL     ARG LIST  31 COMPLEX SPACE FOR FOURIER COEFF.
      WORK   ARG LIST  144 WORK SPACE FOR SUBR. W3FT12
      TRIGS  ARG LIST  216 PRECOMPUTED TRIG FUNCS. USED
                       IN W3FT12, COMPUTED BY W3FA13
      RCOS   ARG LIST  37 RECIPROCAL COSINE LATITUDES OF
                       2.5 X 2.5 GRID MUST BE COMPUTED BEFORE
                       FIRST CALL TO W3FT11 USING SR W3FA13.
 
   Output variables:
      GN     ARG LIST  (145,37) GRID VALUES.
                       5365 POINT GRID IS TYPE 29 OR 1D O.N. 84
 
REMARKS:
        THIS SUBROUTINE WAS OPTIMIZED TO RUN IN A SMALL AMOUNT OF
        MEMORY, IT IS NOT OPTIMIZED FOR SPEED, 70 PERCENT OF THE TIME IS
        USED BY SUBROUTINE W3FA12 COMPUTING THE LEGENDRE POLYNOMIALS. SINCE
        THE LEGENDRE POLYNOMIALS ARE CONSTANT THEY NEED TO BE COMPUTED
        ONLY ONCE IN A PROGRAM. BY MOVING W3FA12 TO THE MAIN PROGRAM AND
        COMPUTING PLN AS A (32,31,37) ARRAY AND CHANGING THIS SUBROUTINE
        TO USE PLN AS A THREE DIMENSION ARRAY YOU CAN CUT THE RUNNING
        TIME 70 PERCENT.
  

W3FT10

The W3FT10 routine computes 2.5 x 2.5 S. hemi. grid
           of 145 x 37 points from spectral coefficients in
           a rhomboidal 30 resolution representing a scaler field.

USAGE:  CALL W3FT10(FLN,GN,PLN,EPS,FL,WORK,TRIGS)
 
    Input variables:
      FLN       961 COMPLEX COEFF.
      PLN       992 REAL SPACE FOR LEGENDRE POLYNOMIALS.
      EPS       992 REAL SPACE FOR
                    COEFFS. USED IN COMPUTING PLN.
      FL        31  COMPLEX SPACE FOR FOURIER COEFF.
      WORK      144 REAL WORK SPACE FOR SUBR. W3FT12
      TRIGS     216 PRECOMPUTED TRIG FUNCS. USED
                    IN W3FT12, COMPUTED BY W3FA13
  
    Output variables:
      GN        (145,37) GRID VALUES.
                5365 POINT GRID IS TYPE 30 OR 1E O.N. 84
  
REMARKS:
    THIS SUBROUTINE WAS OPTIMIZED TO RUN IN A SMALL AMOUNT OF
    MEMORY, IT IS NOT OPTIMIZED FOR SPEED, 70 PERCENT OF THE TIME IS
    USED BY SUBROUTINE W3FA12 COMPUTING THE LEGENDRE POLYNOMIALS. SINCE
    THE LEGENDRE POLYNOMIALS ARE CONSTANT THEY NEED TO BE COMPUTED
    ONLY ONCE IN A PROGRAM. BY MOVING W3FA12 TO THE MAIN PROGRAM AND
    COMPUTING PLN AS A (32,31,37) ARRAY AND CHANGING THIS SUBROUTINE
    TO USE PLN AS A THREE DIMENSION ARRAY YOU CAN CUT THE RUNNING TIME
    70 PERCENT.


W3FT11

The W3FT11 routine computes 2.5 x 2.5 S. hemi. grid
           of 145 x 37 points from spectral coefficients in 
           a rhomboidal 30 resolution representing a vector field.

USAGE:  CALL W3FT11(VLN,GN,PLN,EPS,FL,WORK,TRIGS,RCOS)

   Input variables:
      VLN       992 COMPLEX COEFF.
      PLN       992 REAL SPACE FOR LEGENDRE POLYNOMIALS.
      EPS       992 REAL SPACE FOR
                COEFFS. USED IN COMPUTING PLN.
      FL        31 COMPLEX SPACE FOR FOURIER COEFF.
      WORK      144 REAL WORK SPACE FOR SUBR. W3FT12
      TRIGS     216 PRECOMPUTED TRIG FUNCS. USED
                IN W3FT12, COMPUTED BY W3FA13
      RCOS      37 RECIPROCAL COSINE LATITUDES OF
                2.5 X 2.5 GRID MUST BE COMPUTED BEFORE
                FIRST CALL TO W3FT11 USING SUBR. W3FA13.
  
   Output variables:
      GN        (145,37) GRID VALUES.
                5365 POINT GRID IS TYPE 30 OR 1E HEX O.N. 84
 
REMARKS:
    THIS SUBROUTINE WAS OPTIMIZED TO RUN IN A SMALL AMOUNT OF
    MEMORY, IT IS NOT OPTIMIZED FOR SPEED, 70 PERCENT OF THE TIME IS
    USED BY SUBROUTINE W3FA12 COMPUTING THE LEGENDRE POLYNOMIALS. SINCE
    THE LEGENDRE POLYNOMIALS ARE CONSTANT THEY NEED TO BE COMPUTED
    ONLY ONCE IN A PROGRAM. BY MOVING W3FA12 TO THE MAIN PROGRAM AND
    COMPUTING PLN AS A (32,31,37) ARRAY AND CHANGING THIS SUBROUTINE
    TO USE PLN AS A THREE DIMENSION ARRAY YOU CAN CUT THE RUNNING TIME
    70 PERCENT.


W3FT12

The W3FT12 routine Fast Fourier to compute 145 grid values at
           desired latitude from 31 complex Fourier coefficients.
           This subroutinE is special purpose for converting 
           coefficients to a 2.5 degree lat,lon grid.

USAGE:  CALL W3FT12(COEF,WORK,GRID,TRIGS)

   Input variables:
      COEF      31 COMPLEX FOURIER COEFFICIENTS.
      TRIGS     216 TRIG FUNCTIONS ASSUMED PRECOMPUTED
                       BY W3FA13 BEFORE FIRST CALL TO W3FT12.
      WORK      144 REAL WORK SPACE

   Output variables:
      GRID      145 GRID VALUES, GRID(1)=GRID(145)


W3FT16

The W3FT16 routine converts a northern hemisphere 1.0 degree
           lat., lon. 95 by 91 grid to a WAFS 1.25 degree thinned
           3447 point grid.

USAGE:  CALL W3FT16(ALOLA,BTHIN,INTERP)

   Input variables:
      ALOLA  - 95 * 91 GRID 1.0 DEG. LAT,LON GRID
                       NORTHERN HEMISPHERE 8645 POINT GRID.
                       INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output variables:
      BTHIN  - 3447 POINT THINNED GRID OF N. HEMISPERE
                    3447 GRID IS FOR GRIB GRIDS 37-40.
 
   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE
 
REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. 10 OTHER ARRAYS
       ARE SAVED AND REUSED ON THE NEXT CALL.
 

W3FT17

The W3FT17 routine converts a southern hemisphere 
           1.0 degree lat.,lon. 95 by 91 grid to a WAFS 1.25
           degree thinned 3447 point grid.

USAGE:  CALL W3FT17(ALOLA,BTHIN,INTERP)

   Input arguments:
      ALOLA  - 95 * 91 GRID 1.0 DEG. LAT,LON GRID
                       SOUTHERN HEMISPHERE 8645 POINT GRID.
                       INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      BTHIN  - 3447 POINT THINNED GRID OF S. HEMISPERE
                    3447 GRID IS FOR GRIB GRIDS 41-44.

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. 10 OTHER ARRAYS
       ARE SAVED AND REUSED ON THE NEXT CALL.


W3FT201

The W3FT201 routine converts a global 1.0 degree lat.,lon.
            361 by 181 grid to a polar stereographic 65 by 65 grid.
            the polar stereographic map projection is true at 60 deg.
            N. , The mesh length is 381 km. and the oriention is
            105 deg. W. This is the same as w3ft43v except the 
            oriention is 105 deg. W.

USAGE:  CALL W3FT201(ALOLA,APOLA,INTERP)

   Input arguments:
      ALOLA  - 361*181 GRID 1.0 DEG. LAT,LON GRID
               65341 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE TO MAKE 361 * 181.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      APOLA - 65*65 GRID OF NORTHERN HEMISPHERE.
              4225 POINT GRID IS AWIPS GRID TYPE 201

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE.

    2. WIND COMPONENTS ARE NOT ROTATED TO THE 65*65 GRID ORIENTATION
       AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.

    3. ALL POINTS BELOW EQUATOR ARE ON THIS GRID.


W3FT202

The W3FT202 routine converts a northern hemisphere 1.0 degree 
            lat.,lon. 361 by 91 grid to a polar stereographic 65 by
            43 grid. The polar stereographic map projection is true
            at 60 deg. N., The mesh length is 190.5 km. and the
            oriention is 105 deg. W.

USAGE:  CALL W3FT202(ALOLA,APOLA,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 LAT,LON GRID N. HEMISPHERE
               32851 POINT GRID IS O.N. 84 TYPE ?? OR ?? HEX
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments: 
      APOLA - 65*43 GRID OF NORTHERN HEMISPHERE.
              2795 POINT GRID IS AWIPS GRID TYPE 202

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE.
 
    2. WIND COMPONENTS ARE NOT ROTATED TO THE 65*43 GRID ORIENTATION
       AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.
 
    3. THE GRID POINTS VALUES ON THE EQUATOR HAVE BEEN EXTRAPOLATED
       OUTWARD TO ALL THE GRID POINTS OUTSIDE THE EQUATOR ON THE 65*43
       GRID (ABOUT 1100 POINTS).


W3FT203

The W3FT203 routine converts a northern hemisphere 1.0 degree
            lat.,lon. 361 by 91 grid to a polar stereographic
            45 by 39 grid. The polar stereographic map projection is
            true at 60 deg. N., The mesh length is 190.5 km. and the
            oriention is 150 deg. W.

USAGE:  CALL W3FT203(ALOLA,APOLA,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 LAT,LON GRID N. HEMISPHERE
                      32851 POINT GRID IS O.N. 84 TYPE ?? OR ?? HEX
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC
 
   Output arguments:
      APOLA - 45*39 GRID OF NORTHERN HEMISPHERE.
              1755 POINT GRID IS AWIPS GRID TYPE 203
 
   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE
 
REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE.
 
    2. WIND COMPONENTS ARE NOT ROTATED TO THE 45*39 GRID ORIENTATION
       AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.
 

W3FT204

The W3FT204 routine converts a n. s. hemisphere 1.0 degree
            lat.,lon. 361 by 181 grid to a National - Hawaii
            (Mercator) 93*68 AWIPS 204 grid.

USAGE:  CALL W3FT204(ALOLA,AMERC,INTERP)

   Input arguments:
      ALOLA  - 361*181 GRID 1.0 DEG. LAT,LON GRID N. HEMI.
               65341 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      AMERC - 93*68 GRID NATIONAL - HAWAII (MERCATOR)
              6324 POINT GRID IS AWIPS GRID TYPE 204

   Input files:  NONE
 
   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE
 
REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. 20 OTHER ARRAY
       ARE SAVED AND REUSED ON THE NEXT CALL.


W3FT205

The W3FT205 routine converts a northern hemisphere 1.0 degree
            lat.,lon. 361 by 91 grid to a polar stereographic
            45 by 39 grid. The polar stereographic map projection
            is true at 60 deg. N., the mesh length is 190.5 km. and
            the oriention is 60 deg. W. pole point is at
            (i,j) = (27,57). New map is awips map 205.

USAGE:  CALL W3FT205(ALOLA,APOLA,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 LAT,LON GRID N. HEMISPHERE
               32851 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGH SIDE AND CUT TO 361 * 91.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      APOLA - 45*39 GRID OF NORTHERN HEMISPHERE.
              1755 POINT GRID IS AWIPS GRID TYPE 205

   INPUT FILES:  NONE

   OUTPUT FILES: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE.
 
    2. WIND COMPONENTS ARE NOT ROTATED TO THE 45*39 GRID ORIENTATION
       AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.


W3FT206

The W3FT206 routine converts a northern hemisphere 1.0 degree
            lat.,lon. 361 by 91 grid to a Lambert Conformal 51 by 41
            AWIPS grib 206.

USAGE:  CALL W3FT206(ALOLA,ALAMB,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 DEG. LAT,LON GRID N. HEMI.
               32851 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE AND CUT TO 361 * 91.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      ALAMB  - 51*41 REGIONAL - CENTRAL US MARD
               (LAMBERT CONFORMAL). 2091 POINT GRID
               IS AWIPS GRID TYPE 206

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. 11 OTHER ARRAY
       ARE SAVED AND REUSED ON THE NEXT CALL.

    2. WIND COMPONENTS ARE NOT ROTATED TO THE 51*41 GRID ORIENTATION
       AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.


W3FT207

The W3FT207 routine converts a northern hemisphere 1.0 
            degree lat.,lon. 361 by 91 grid to a polar 
            stereographic 49 by 35 grid. The polar stereographic
            map projection is true at 60 deg. N. , the mesh
            length is 95.25 km. and the oriention is 150 deg. W.

USAGE:  CALL W3FT207(ALOLA,APOLA,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 DEG. LAT,LON GRID N. HEMI.
               32851 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE AND CUT TO 361 * 91.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      APOLA - 49*35 GRID OF NORTHERN HEMISPHERE.
              1715 POINT GRID IS AWIPS GRID TYPE 207

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE.

    2. WIND COMPONENTS ARE NOT ROTATED TO THE 49*35 GRID ORIENTATION
      AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.


W3FT208

The W3FT208 routine convert a northern hemisphere 1.0 degree
            lat.,lon. 361 by 91 grid to a regional - Hawaii
            (Mercator) 29*27 awips 208 grid.

USAGE:  CALL W3FT208(ALOLA,AMERC,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 DEG. LAT,LON GRID N. HEMI.
               32851 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE AND CUT TO 361 * 91.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      AMERC - 29*27 GRID OF NORTHERN MERCATOR
              783 POINT GRID IS AWIPS GRID TYPE 208

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. 20 OTHER ARRAY
       ARE SAVED AND REUSED ON THE NEXT CALL.


W3FT209

The W3FT209 routine converts a northern hemisphere 1.0 
            degree lat.,lon. 361 by 91 grid to a Lambert Conformal
            101 by 81 awips grib 209.

USAGE:  CALL W3FT209(ALOLA,ALAMB,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 DEG. LAT,LON GRID N. HEMI.
               32851 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE AND CUT TO 361 * 91.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      ALAMB  - 101*81 REGIONAL - CENTRAL US MARD DOUBLE RES.
               (LAMBERT CONFORMAL). 8181 POINT GRID IS AWIPSi
               GRID TYPE 209

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. 11 OTHER ARRAY
       ARE SAVED AND REUSED ON THE NEXT CALL.

    2. WIND COMPONENTS ARE NOT ROTATED TO THE 101*81 GRID ORIENTATION
       AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.

W3FT21

The W3FT21 routine computes 2.5 x 2.5 N. hemi. grid
           of 145 x 37 points from spectral coefficients in
           a rhomboidal 30 resolution representing a scalar field.

USAGE:  CALL W3FT21(FLN,GN,PLN,EPS,FL,WORK,TRIGS,L1,L2,I2)

   Input variables:
      FLN        961 COMPLEX COEFF.
      PLN        992 REAL SPACE FOR LEGENDRE POLYNOMIALS
      EPS        992 REAL SPACE FOR COEFFS. USED IN COMPUTING PLN.
      FL         31 COMPLEX SPACE FOR FOURIER COEFF.
      WORK       144 REAL WORK SPACE FOR SUBR. W3FT12
      TRIGS      216 PRECOMPUTED TRIG FUNCS,  USED
                 IN W3FT12, COMPUTED BY W3FA13
      L1         STARTING WAVE NUMBER
      L2         ENDING WAVE NUMBER
      I2         MODE OF SPECTRAL COEFFICIENTS
 
   Output variables:
      GN         (145,37) GRID VALUES.
                 5365 POINT GRID IS TYPE 29 OR 1D HEX O.N. 84

REMARKS:
        THIS SUBROUTINE WAS OPTIMIZED TO RUN IN A SMALL AMOUNT OF
        MEMORY, IT IS NOT OPTIMIZED FOR SPEED, 70 PERCENT OF THE TIME IS
        USED BY SUBROUTINE W3FA12 COMPUTING THE LEGENDRE POLYNOMIALS. SINCE
        THE LEGENDRE POLYNOMIALS ARE CONSTANT THEY NEED TO BE COMPUTED
        ONLY ONCE IN A PROGRAM. BY MOVING W3FA12 TO THE MAIN PROGRAM AND
        COMPUTING PLN AS A (32,31,37) ARRAY AND CHANGING THIS SUBROUTINE
        TO USE PLN AS A THREE DIMENSION ARRAY YOU CAN CUT THE RUNNING
        TIME 70 PERCENT.


W3FT210

The W3FT210 routine converts a northern hemisphere 1.0 degree
            lat.,lon. 361 by 91 grid to a regional - Puerto Rico
            (Mercator) 25*25 AWIPS 210 grid.

USAGE:  CALL W3FT210(ALOLA,AMERC,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 DEG. LAT,LON GRID N. HEMI.
               32851 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE AND CUT TO 361 * 91.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      AMERC - 25*25 GRID OF NORTHERN MERCATOR
              625 POINT GRID IS AWIPS GRID TYPE 210

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
   1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
      REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. 20 OTHER ARRAY
      ARE SAVED AND REUSED ON THE NEXT CALL.


W3FT211

The W3FT211 routine converts a northern hemisphere 1.0
            degree lat.,lon. 361 by 91 grid to a Lambert Conformal
            93 by 65 AWIPS grib 211.

USAGE:  CALL W3FT211(ALOLA,ALAMB,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 DEG. LAT,LON GRID N. HEMI.
               32851 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE AND CUT TO 361 * 91.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      ALAMB  - 93*65 REGIONAL - CONUS
               (LAMBERT CONFORMAL). 6045 POINT GRID
               IS AWIPS GRID TYPE 211

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
   1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
      REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. 11 OTHER ARRAY
      ARE SAVED AND REUSED ON THE NEXT CALL.

   2. WIND COMPONENTS ARE NOT ROTATED TO THE 93*65 GRID ORIENTATION
      AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.


W3FT212

The W3FT212 routine converts a northern hemisphere 1.0
            degree lat.,lon. 361 by 91 grid to a Lambert
            Conformal 185 by 129 AWIPS grib 212.

USAGE:  CALL W3FT212(ALOLA,ALAMB,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 DEG. LAT,LON GRID N. HEMI.
               32851 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE AND CUT TO 361 * 91.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      ALAMB  - 185*129 REGIONAL - CONUS
               DOUBLE RESOLUTION
               (LAMBERT CONFORMAL). 23865 POINT GRID
               IS AWIPS GRID TYPE 212

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. 11 OTHER ARRAY
       ARE SAVED AND REUSED ON THE NEXT CALL.

    2. WIND COMPONENTS ARE NOT ROTATED TO THE 185*129 GRID ORIENTATION
       AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.


W3FT213

The W3FT213 routine converts a northern hemisphere 1.0 degree
            lat.,lon. 361 by 91 grid to a Polar Stereographic
            129 by 85 grid. The Polar Stereographic map projection
            is true at 60 deg. N. , The mesh length is 95.25 km. and
            the oriention is 105 deg. W.
            awips grid 213  National - Conus - double resolution

USAGE:  CALL W3FT213(ALOLA,APOLA,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 DEG. LAT,LON GRID N. HEMI.
               32851 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE AND CUT TO 361 * 91.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      APOLA  - 129*85 GRID OF NORTHERN HEMISPHERE.
               10965 POINT GRID IS AWIPS GRID TYPE 213

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
    1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
       REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE.

    2. WIND COMPONENTS ARE NOT ROTATED TO THE 129*85 GRID ORIENTATION
       AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.


W3FT214

The W3FT214 routine converts a northern hemisphere 1.0
            degree lat.,lon. 361 by 91 grid to a Polar Stereographic
            97 by 69 grid. The Polar Stereographic map projection is
            true at 60 deg. N. , The mesh length is 47.625 km. and
            the oriention is 150 deg. W.
            AWIPS grid 214 Regional - Alaska - double resolution

USAGE:  CALL W3FT214(ALOLA,APOLA,INTERP)

   Input arguments:
      ALOLA  - 361*91 GRID 1.0 DEG. LAT,LON GRID N. HEMI.
               32851 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE AND CUT TO 361 * 91.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      APOLA - 97*69 GRID OF NORTHERN HEMISPHERE.
              6693 POINT GRID IS AWIPS GRID TYPE 214

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
   1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
      REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE.

   2. WIND COMPONENTS ARE NOT ROTATED TO THE 97*69 GRID ORIENTATION
      AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.


W3FT26

The W3FT26 routine converts a 360x181 1-degree grid into
           a NH or SH 360X91 1-Degree grid.  This NH/SH grid is 
           flipped for grib purposes and then converted to the
           desired 1.25 degree WAFS (quadrant) thinned grid.

USAGE:  CALL W3FT26 (MAPNUM,FLD,HI,IGPTS,NSTOP)

   Input argument list:
      MAPNUM   -  NUMBER OF GRID, 37 TO 44
      FLD      -  NORTHERN OR SOUTHERN HEM. SPECTRAL FIELD
 
   Output argument list:
      HI       - INTERPOLATED WAFS FIELD (3447 POINTS)
      IGPTS    - NUMBER OF POINTS IN INTERPOLATED FIELD
      NSTOP    - 24, WHEN MAPNUM .NE. 37 THRU 44


W3FT32

The W3FT32 routine interpolates scalar quantity from any 
           given NMC field (in Office Note 84) to any other field.
           The routine can do bilinearly or biquadratically and It
           will not rotate wind components.

USAGE:  CALL W3FT32(FIELD, MAPIN, DATA, MAPOUT, INTERP, IER)

   Input arguments:
      FIELD  - REAL*4    - TWO DIMENSIONAL ARRAY.
      MAPIN  - INTEGER*4 - NMC MAP NUMBER (K) FOR GIVEN INPUT FIELD.
      MAPOUT - INTEGER*4 - NMC MAP NUMBER (K) FOR WANTED OUTPUT FIELD.
      INTERP - INTEGER*4 - SET INTERPOLATION METHOD:
                           EQ 1 - LINEAR
                           NE 1 - BIQUADRATIC
 
   Output arguments:
      DATA - REAL*4 - ARRAY TO HOLD OUTPUT MAP (UNPACKED).
      IER - INTEGER*4 - COMPLETION CONDITION FLAG
 
   INPUT FILES:  NONE

   OUTPUT FILES: NONE
 
   RETURN CONDITIONS:
      IER = 0  -  NO DIFFICULTIES
            1  -  MAPIN NOT RECOGNIZED
            2  -  MAPOUT NOT RECOGNIZED
            3  -  PARTICULAR POLA MAPOUT NOT RECOGNIZED
            4  -  PARTICULAR LOLA MAPOUT NOT RECOGNIZED
            5  -  PARTICULAR LOLA MAPIN NOT RECOGNIZED
            6  -  PARTICULAR POLA MAPOUT NOT RECOGNIZED
            7  -  PARTICULAR LOLA MAPIN NOT RECOGNIZED
            8  -  PARTICULAR LOLA MAPOUT NOT RECOGNIZED
            THESE FLAGS ARE SET AT VARIOUS TEST LOCATIONS
            PLEASE REFER TO THE CODE LISTING FOR DETAILS


W3FT33

The W3FT33 routine thickens one thinned WAFS grib grid
           to A real array of 5329 numbers (73,73) 1.25 degree
           grid.

USAGE:    CALL W3FT33(AIN, OUT, NSFLAG)

   Input argument list:
      AIN      - REAL 3447 WORD ARRAY WITH UNPACKED THINNED WAFS
                 GRIB TYPE 37-44.
      NSFLAG   - INTEGER =  1  AIN IS WAFS GRIB GRID 37-40  N. HEMI.
                         = -1  AIN IS WAFS GRIB GRID 41-44  S. HEMI.
 
   Output argument list:
      OUT      - REAL (73,73) WORD ARRAY WITH THICKENED WAFS GRIB
                 GRID 37-44.
 
REMARKS: 
        The pole point for u and v wind components will have only
        one point. If you need the pole row corrected see page 9 section
        1 in Office Note 388. You need both u and v to make the
        correction.


W3FT38

The W3FT38 routine computes 2.5 x 2.5 N. Hemi. grid of
           145 x 37 points from spectral coefficients in a
           Rhomboidal 30 resolution representing a scaler field.

USAGE:  CALL W3FT38(FLN,GN,PLN,FL,WORK,TRIGS)

   Input variables:
      FLN        961 COMPLEX COEFF.
      PLN        (32,31,37) REAL SPACE WITH LEGENDRE POLYNOMIALS
	         COMPUTED BY W3FA12.
      FL         31 COMPLEX SPACE FOR FOURIER COEFF.
      WORK       144 REAL WORK SPACE FOR SUBR. W3FT12
      TRIGS      216 PRECOMPUTED TRIG FUNCS. USED
	         IN W3FT12, COMPUTED BY W3FA13

   Output variables:
      GN         (145,37) GRID VALUES.
	         5365 POINT GRID IS TYPE 29 OR 1D HEX O.N. 84

REMARKS:
     MEMORY, IT WAS NOT OPTIMIZED FOR SPEED, 70 PERCENT OF THE TIME WAS
     USED BY SUBROUTINE W3FA12 COMPUTING THE LEGENDRE POLYNOMIALS. SINCE
     THE LEGENDRE POLYNOMIALS ARE CONSTANT THEY NEED TO BE COMPUTED
     ONLY ONCE IN A PROGRAM. BY MOVING W3FA12 TO THE MAIN PROGRAM AND
     COMPUTING PLN AS A (32,31,37) ARRAY AND CHANGING THIS SUBROUTINE
     TO USE PLN AS A THREE DIMENSION ARRAY THE RUNNING TIME WAS CUT
     70 PERCENT. ADD FOLLOWING CODE TO MAIN PROGRAM TO COMPUTE EPS, PLN,
     TRIGS, AND RCOS ONE TIME IN PROGRAM.


W3FT39

The W3FT39 routine computes 2.5 x 2.5 N. HEMI. grid of
           145 x 37 points from spectral coefficients in a 
           Rhomboidal 30 resolution representing a vector field.

USAGE:  CALL W3FT39(VLN,GN,PLN,FL,WORK,TRIGS,RCOS)

   Input variables:
      VLN    ARG LIST  992 COMPLEX COEFF.
      PLN    ARG LIST  (32,31,37) REAL SPACE WITH LEGENDRE POLYNOMIALS
                       COMPUTED BY W3FA12.
      FL     ARG LIST  31 COMPLEX SPACE FOR FOURIER COEFF.
      WORK   ARG LIST  144 WORK SPACE FOR SUBR. W3FT12
      TRIGS  ARG LIST  216 PRECOMPUTED TRIG FUNCS. USED
                       IN W3FT12, COMPUTED BY W3FA13
      RCOS   ARG LIST  37 RECIPROCAL COSINE LATITUDES OF
                       2.5 X 2.5 GRID MUST BE COMPUTED BEFORE
                       FIRST CALL TO W3FT11 USING SR W3FA13.
 
    Output variables:
      GN     ARG LIST  (145,37) GRID VALUES.
                       5365 POINT GRID IS TYPE 29 OR 1D O.N. 84

REMARKS:
    W3FT09 WAS OPTIMIZED TO RUN IN A SMALL AMOUNT OF
    MEMORY, IT WAS NOT OPTIMIZED FOR SPEED, 70 PERCENT OF THE TIME WAS
    USED BY SUBROUTINE W3FA12 COMPUTING THE LEGENDRE POLYNOMIALS. SINCE
    THE LEGENDRE POLYNOMIALS ARE CONSTANT THEY NEED TO BE COMPUTED
    ONLY ONCE IN A PROGRAM. BY MOVING W3FA12 TO THE MAIN PROGRAM AND
    COMPUTING PLN AS A (32,31,37) ARRAY AND CHANGING THIS SUBROUTINE
    TO USE PLN AS A THREE DIMENSION ARRAY THE RUNNING TIME WAS CUT
    70 PERCENT. ADD FOLLOWING CODE TO MAIN PROGRAM TO COMPUTE EPS, PLN,
    TRIGS, AND RCOS ONE TIME IN PROGRAM.


W3FT40

The W3FT40 routine computes 2.5 x 2.5 S. HEMI. grid 
           of 145 x 37 points from spectral coefficients in
           a Rhomboidal 30 resolution representing a scaler field.

USAGE:  CALL W3FT40(FLN,GN,PLN,FL,WORK,TRIGS)

   Input variables:
      FLN        961 COMPLEX COEFF.
      PLN        (32,31,37) REAL SPACE WITH LEGENDRE POLYNOMIALS
                 COMPUTED BY W3FA12.
      FL         31 COMPLEX SPACE FOR FOURIER COEFF.
      WORK       144 REAL WORK SPACE FOR SUBR. W3FT12
      TRIGS      216 PRECOMPUTED TRIG FUNCS. USED
                 IN W3FT12, COMPUTED BY W3FA13
 
    Output variables:
      GN         (145,37) GRID VALUES.
                 5365 POINT GRID IS TYPE 30 OR 1E O.N. 84
 
REMARKS:
    W3FT10 WAS OPTIMIZED TO RUN IN A SMALL AMOUNT OF
    MEMORY, IT WAS NOT OPTIMIZED FOR SPEED, 70 PERCENT OF THE TIME WAS
    USED BY SUBROUTINE W3FA12 COMPUTING THE LEGENDRE POLYNOMIALS. SINCE
    THE LEGENDRE POLYNOMIALS ARE CONSTANT THEY NEED TO BE COMPUTED
    ONLY ONCE IN A PROGRAM. BY MOVING W3FA12 TO THE MAIN PROGRAM AND
    COMPUTING PLN AS A (32,31,37) ARRAY AND CHANGING THIS SUBROUTINE
    TO USE PLN AS A THREE DIMENSION ARRAY THE RUNNING TIME WAS CUT
    70 PERCENT. ADD FOLLOWING CODE TO MAIN PROGRAM TO COMPUTE EPS, PLN,
    TRIGS, AND RCOS ONE TIME IN PROGRAM.
 

W3FT41

The W3FT41 routine computes 2.5 x 2.5 S. HEMI. grid of
           145 x 37 points from spectral coefficients in a
           Rhomboidal 30 resolution representing a vector field.

USAGE:  CALL W3FT41(VLN,GN,PLN,FL,WORK,TRIGS,RCOS)

   Input variables:
      VLN        992 COMPLEX COEFF.
      PLN        (32,31,37) REAL SPACE WITH LEGENDRE POLYNOMIALS
                 COMPUTED BY W3FA12.
      FL         31 COMPLEX SPACE FOR FOURIER COEFF.
      WORK       144 REAL WORK SPACE FOR SUBR. W3FT12
      TRIGS      216 PRECOMPUTED TRIG FUNCS. USED
                 IN W3FT12, COMPUTED BY W3FA13
      RCOS       37 RECIPROCAL COSINE LATITUDES OF
                 2.5 X 2.5 GRID MUST BE COMPUTED BEFORE
                 FIRST CALL TO W3FT11 USING SUBR. W3FA13.
 
   Output variables:
      GN         (145,37) GRID VALUES.
                 5365 POINT GRID IS TYPE 30 OR 1E HEX O.N. 84
 
REMARKS:
     W3FT11 WAS OPTIMIZED TO RUN IN A SMALL AMOUNT OF
     MEMORY, IT WAS NOT OPTIMIZED FOR SPEED, 70 PERCENT OF THE TIME WAS
     USED BY SUBROUTINE W3FA12 COMPUTING THE LEGENDRE POLYNOMIALS. SINCE
     THE LEGENDRE POLYNOMIALS ARE CONSTANT THEY NEED TO BE COMPUTED
     ONLY ONCE IN A PROGRAM. BY MOVING W3FA12 TO THE MAIN PROGRAM AND
     COMPUTING PLN AS A (32,31,37) ARRAY AND CHANGING THIS SUBROUTINE
     TO USE PLN AS A THREE DIMENSION ARRAY THE RUNNING TIME WAS CUT
     70 PERCENT. ADD FOLLOWING CODE TO MAIN PROGRAM TO COMPUTE EPS, PLN,
     TRIGS, AND RCOS ONE TIME IN PROGRAM.


W3FT43V

The W3FT43V routine converts a global 1.0 degree lat.,lon.
           361 by 181 grid to a Polar Stereographic 65 by 65 grid.
           the Polar Stereographic map projection is true at 60 deg. N.
           The mesh length is 381 km. and the oriention is 80 deg. W.

USAGE:  CALL W3FT43V(ALOLA,APOLA,INTERP)

   Input arguments:
      ALOLA  - 361*181 GRID 1.0 DEG. LAT,LON GRID N. HEMI.
               65341 POINT GRID. 360 * 181 ONE DEGREE
               GRIB GRID 3 WAS FLIPPED, GREENWISH ADDED
               TO RIGHT SIDE TO MAKE 361 * 181.
      INTERP - 1 LINEAR INTERPOLATION , NE.1 BIQUADRATIC

   Output arguments:
      APOLA - 65*65 GRID OF NORTHERN HEMISPHERE.
              4225 POINT GRID IS O.N.84 TYPE 27 OR 1B HEX

   Input files:  NONE

   Output files: ERROR MESSAGE TO FORTRAN OUTPUT FILE

REMARKS:
   1. W1 AND W2 ARE USED TO STORE SETS OF CONSTANTS WHICH ARE
      REUSABLE FOR REPEATED CALLS TO THE SUBROUTINE. 20 OTHER ARRAYS
      ARE SAVED AND REUSED ON THE NEXT CALLS TO THE SUBROUTINE.

   2. WIND COMPONENTS ARE NOT ROTATED TO THE 65*65 GRID ORIENTATION
      AFTER INTERPOLATION. YOU MAY USE W3FC08 TO DO THIS.

   3. THE ABOUT 1100 POINTS BELOW THE EQUATOR WILL BE IN THIS MAP.


W3LOCDAT

The W3LOCDAT routine returns the local date and time
             in the ncep absolute date and time data structure.

USAGE:  CALL W3LOCDAT(IDAT)

   Output variables:
      IDAT       INTEGER (8) NCEP ABSOLUTE DATE AND TIME
                 (YEAR, MONTH, DAY, TIME ZONE,
                 HOUR, MINUTE, SECOND, MILLISECOND)


W3MISCAN

The W3MISCAN routine reads one ssm/i scan line (64 retrievals)
             from the NCEP bufr ssm/i dump file.  Each scan is time 
             checked against the user-requested time window and
             satellite id combinations.  When a valid scan is read
             the program returns to the calling program. The user
             must pass in the type of the input ssm/i dump file, either
             derived products (regardless of source) or brightness
             temperatures (7-channels).  If the latter is chosen, the
             user has the further option of processing, in addition
             to the brightness temperatures, in-line calculation of
             wind speed product via the Goodberlet algorithm, and/or
             in-line calculation of both wind speed and total column
             precipitable water (tpw) products using the neural net
             3 algorithm.  If the wind speed or tpw is calculated here
             (either algorithm), this subroutine will check for brightness
             temperatures outside of a preset range and will return a 
             missing wind speed/tpw if any b. temp is unreasonable.  Also,
             for calculated wind speeds and tpw, this program will check
             to see if the b. temps are over land or ice, and if they are
             it will also return missing values since these data are 
             valid only over ocean.

USAGE:    CALL W3MISCAN(INDTA,INLSF,INGBI,INGBD,LSAT,LPROD,LBRIT,
          NNALG,GBALG,KDATE,LDATE,IGNRTM,IBUFTN,IER)

   Input argument list:
      INDTA    - UNIT NUMBER OF NCEP BUFR SSM/I DUMP DATA SET
      INLSF    - UNIT NUMBER OF DIRECT ACCESS NESDIS LAND/SEA FILE
               - (VALID ONLY IF LBRIT AND EITHER NNALG OR GBALG TRUE)
      INGBI    - UNIT NUMBER OF GRIB INDEX FILE FOR GRIB FILE
               - CONTAINING GLOBAL 1-DEGREE SEA-SURFACE TEMP FIELD
               - (VALID ONLY IF LBRIT AND EITHER NNALG OR GBALG TRUE)
      INGBD    - UNIT NUMBER OF GRIB FILE CONTAINING GLOBAL 1-DEGREE
               - SEA-SURFACE TEMP FIELD (VALID ONLY IF LBRIT AND EITHER
               - NNALG OR GBALG TRUE)
      LSAT     - 10-WORD LOGICAL ARRAY (240:249) INDICATING WHICH
                 SATELLITE IDS SHOULD BE PROCESSED (SEE REMARKS)
      LPROD    - LOGICAL INDICATING IF THE INPUT BUFR FILE CONTAINS
               - PRODUCTS (REGARDLESS OF SOURCE) - IN THIS CASE ONE OR
               - MORE AVAILABLE PRODUCTS CAN BE PROCESSED AND RETURNED
      LBRIT    - LOGICAL INDICATING IF THE INPUT BUFR FILE CONTAINS
               - BRIGHTNESS TEMPERATURES - IN THIS CASE B. TEMPS ARE
               - PROCESSED AND RETURNED ALONG WITH, IF REQUESTED, IN-
               - LINE GENERATED PRODUCTS FROM ONE OR BOTH ALGORITHMS
               - (SEE NEXT TWO SWITCHES)

               THE FOLLOWING TWO SWITCHES APPLY ONLY IF LBRIT IS TRUE
                  NNALG    - LOGICAL INDICATING IF THE SUBROUTINE SHOULD
                           - CALCULATE AND RETURN SSM/I WIND SPEED AND TPW
                           - VIA THE NEURAL NET 3 ALGORITHM (NOTE: B O T H
                           - WIND SPEED AND TPW ARE RETURNED HERE)
                  GBALG    - LOGICAL INDICATING IF THE SUBROUTINE SHOULD
                           - CALCULATE AND RETURN SSM/I WIND SPEED VIA THE
                           - GOODBERLET ALGORITHM
 
      KDATE    - REQUESTED EARLIEST YEAR(YYYY), MONTH, DAY, HOUR,
               - MIN FOR ACCEPTING SCANS
      LDATE    - REQUESTED LATEST   YEAR(YYYY), MONTH, DAY, HOUR,
               - MIN FOR ACCEPTING SCANS
      IGNRTM   - SWITCH TO INDICATE WHETHER SCANS SHOULD BE TIME-
               - CHECKED (= 0) OR NOT TIME CHECKED (=1) {IF =1, ALL
               - SCANS READ IN ARE PROCESSED REGARDLESS OF THEIR TIME.
               - THE INPUT ARGUMENTS "KDATE" AND "LDATE" (EARLIEST AND
               - LATEST DATE FOR PROCESSING DATA) ARE IGNORED IN THE
               - TIME CHECKING FOR SCANS. (NOTE: THE EARLIEST AND
               - LATEST DATES SHOULD STILL BE SPECIFIED TO THE
               - "EXPECTED" TIME RANGE, BUT THEY WILL NOT BE USED FOR
               - TIME CHECKING IN THIS CASE)}
 
   Output argument list:
      IBUFTN   - OUTPUT BUFFER HOLDING DATA FOR A SCAN (1737 WORDS -
               - SEE REMARKS FOR FORMAT. SOME WORDS MAY BE MISSING
               - DEPENDING UPON LPROD, LBRIT, NNALG AND GBALG
      IER      - ERROR RETURN CODE (SEE REMARKS)

   Input files:
      UNIT AA  - (WHERE AA IS EQUAL TO INPUT ARGUMENT 'INDTA') NCEP
               - BUFR SSM/I DUMP DATA SET HOLDING SCANS (SEE REMARKS
               - REGARDING ASSIGN)
      UNIT BB  - (WHERE BB IS EQUAL TO INPUT ARGUMENT 'INLSF')
               - DIRECT ACCESS NESDIS LAND/SEA FILE (SEE REMARKS
               - REGARDING ASSIGN) (VALID ONLY IF LBRIT AND EITHER
               - NNALG OR GBALG TRUE)
      UNIT CC  - (WHERE CC IS EQUAL TO INPUT ARGUMENT 'INGBI') GRIB
               - INDEX FILE FOR GRIB FILE CONTAINING GLOBAL 1-DEGREE
               - SEA-SURFACE TEMPERATURE FIELD (SEE REMARKS
               - REGARDING CREATION AND ASSIGN) (VALID ONLY IF LBRIT
               - AND EITHER NNALG OR GBALG TRUE)
      UNIT DD  - (WHERE DD IS EQUAL TO INPUT ARGUMENT 'INGBD')
               - UNBLOCKED GRIB FILE CONTAINING GLOBAL 1-DEGREE SEA-
               - SURFACE TEMPERATURE FIELD (SEE REMARKS REGARDING
               - ASSIGN) (VALID ONLY IF LBRIT AND EITHER NNALG OR
               - GBALG TRUE)
 
   Output files:
      UNIT 06  - PRINTOUT
 
REMARKS:  
        RETURN CODE IER CAN HAVE THE FOLLOWING VALUES:
                IER = 0  SUCCESSFUL RETURN OF SCAN
                IER = 1  ALL SCANS HAVE BEEN READ, ALL DONE
                IER = 2  ABNORMAL RETURN - INPUT BUFR FILE IN UNIT
                         'INDTA' IS EITHER EMPTY (NULL) OR IS NOT BUFR
                IER = 3  ABNORMAL RETURN - REQUESTED EARLIEST AND
                         LATEST DATES ARE BACKWARDS
                IER = 4  ABNORMAL RETURN - ERROR OPENING RANDOM
                         ACCESS FILE HOLDING LAND/SEA TAGS
                IER = 5  ABNORMAL RETURN - THE NUMBER OF DECODED
                         "LEVELS" IS NOT WHAT IS EXPECTED
                IER = 6  ABNORMAL RETURN - SEA-SURFACE TEMPERATURE
                         NOT FOUND IN GRIB INDEX FILE - ERROR RETURNED
                         FROM GRIB DECODER GETGB IS 96
                IER = 7  ABNORMAL RETURN - SEA-SURFACE TEMPERATURE
                         GRIB MESSAGE HAS A DATE THAT IS EITHER:
                         1) MORE THAN 7-DAYS PRIOR TO THE EARLIEST
                         REQUESTED DATE OR 2) MORE THAN 7-DAYS AFTER
                         THE LATEST REQUESTED DATE
                IER = 8  ABNORMAL RETURN - BYTE-ADDRESSABLE READ ERROR
                         FOR GRIB FILE CONTAINING SEA-SURFACE
                         TEMPERATURE FIELD - ERROR RETURNED FROM GRIB
                         DECODER GETGB IS 97-99
                IER = 9  ABNORMAL RETURN - ERROR RETURNED FROM GRIB
                         DECODER - GETGB - FOR SEA-SURFACE
                         TEMPERATURE FIELD - > 0 BUT NOT 96-99
  
          INPUT ARGUMENT LSAT IS SET-UP AS FOLLOWS:
 
          LSAT(X) = TRUE -- PROCESS SCANS FROM SATELLITE ID X (WHERE X
                          IS CODE FIGURE FROM BUFR CODE TABLE 0-01-007)
          LSAT(X) = FALSE - DO NOT PROCESS SCANS FROM SATELLITE ID X
 
                    X = 240 IS F-7  DMSP SATELLITE (THIS SATELLITE IS
                            NO LONGER AVAILABLE)
                    X = 241 IS F-8  DMSP SATELLITE (THIS SATELLITE IS
                            NO LONGER AVAILABLE)
                    X = 242 IS F-9  DMSP SATELLITE (THIS SATELLITE IS
                            NO LONGER AVAILABLE)
                    X = 243 IS F-10 DMSP SATELLITE (THIS SATELLITE IS
                            NO LONGER AVAILABLE)
                    X = 244 IS F-11 DMSP SATELLITE (THIS IS AVAILABLE
                            AS OF 8/96 BUT IS NOT CONSIDERED TO BE AN
                            OPERATIONAL DMSP SSM/I SATELLITE)
                    X = 245 IS F-12 DMSP SATELLITE (THIS SATELLITE IS
                            NO LONGER AVAILABLE)
                    X = 246 IS F-13 DMSP SATELLITE (THIS IS AVAILABLE
                            AND IS CONSIDERED TO BE AN OPERATIONAL
                            ODD DMSP SSM/I SATELLITE AS OF 8/1996)
                    X = 247 IS F-14 DMSP SATELLITE (THIS IS AVAILABLE
                            AS OF 5/97 BUT IS NOT CONSIDERED TO BE AN
                            OPERATIONAL DMSP SSM/I SATELLITE)
                    X = 248 IS F-15 DMSP SATELLITE (THIS IS AVAILABLE
                            AS OF 2/2000 AND IS CONSIDERED TO BE AN
                            OPERATIONAL ODD DMSP SSM/I SATELLITE AS OF
                            2/2000)
                    X = 249 IS RESERVED FOR A FUTURE DMSP SATELLITE
 
         NOTE: HERE "EVEN" MEANS VALUE IN IBUFTN(1) IS AN ODD NUMBER
               WHILE "ODD" MEANS VALUE IN IBUFTN(1) IS AN EVEN NUMBER
  
 
    CONTENTS OF ARRAY 'IBUFTN' HOLDING ONE COMPLETE SCAN (64 INDIVIDUAL
    RETRIEVLAS (1737 WORDS)
 
     =====> ALWAYS RETURNED:
 
           WORD   CONTENTS
           ----   --------
             1    SATELLITE ID (244 IS F-11; 246 IS F-13; 247 IS F-14;
                   248 IS F-15)
             2    4-DIGIT YEAR FOR SCAN
             3    2-DIGIT MONTH OF YEAR FOR SCAN
             4    2-DIGIT DAY OF MONTH FOR SCAN
             5    2-DIGIT HOUR OF DAY FOR SCAN
             6    2-DIGIT MINUTE OF HOUR FOR SCAN
             7    2-DIGIT SECOND OF MINUTE FOR SCAN
             8    SCAN NUMBER IN ORBIT
             9    ORBIT NUMBER FOR SCAN
 
            10    RETRIEVAL #1 LATITUDE  (*100 DEGREES: + N, - S)
            11    RETRIEVAL #1 LONGITUDE (*100 DEGREES EAST)
            12    RETRIEVAL #1 POSITION NUMBER
            13    RETRIEVAL #1 SURFACE TAG (CODE FIGURE)
 
     =====> FOR LPROD = TRUE (INPUT PRODUCTS FILE: NOTE ALL PRODUCTS
             BELOW ARE AVAILABLE IN THE FNOC "OPERATIONAL" PRODUCTS
             DATA DUMP; MOST NCEP PRODUCTS DATA DUMPS CONTAIN ONLY
             WIND SPEED AND TOTAL PRECIPITABLE WATER):
 
            14    RETRIEVAL #1 CLOUD WATER (*100 KILOGRAM/METER**2)
            15    RETRIEVAL #1 RAIN RATE (*1000000 MILLIMETERS/SECOND)
            16    RETRIEVAL #1 WIND SPEED (*10 METERS/SECOND)
            17    RETRIEVAL #1 SOIL MOISTURE (MILLIMETERS)
            18    RETRIEVAL #1 SEA-ICE CONCENTRATION (PER CENT)
            19    RETRIEVAL #1 SEA-ICE AGE (CODE FIGURE)
            20    RETRIEVAL #1 ICE EDGE (CODE FIGURE)
            21    RETRIEVAL #1 TOTAL PRECIP. WATER (*10 MILLIMETERS)
            22    RETRIEVAL #1 SURFACE TEMPERATURE (*100 DEG. KELVIN)
            23    RETRIEVAL #1 SNOW DEPTH (MILLIMETERS)
            24    RETRIEVAL #1 RAIN FLAG (CODE FIGURE)
            25    RETRIEVAL #1 CALCULATED SURFACE TYPE (CODE FIGURE)
 
     =====> FOR LBRIT = TRUE (INPUT BRIGHTNESS TEMPERATURE FILE):
 
            26    RETRIEVAL #1 19 GHZ V BRIGHTNESS TEMP (*100 DEG. K)
            27    RETRIEVAL #1 19 GHZ H BRIGHTNESS TEMP (*100 DEG. K)
            28    RETRIEVAL #1 22 GHZ V BRIGHTNESS TEMP (*100 DEG. K)
            29    RETRIEVAL #1 37 GHZ V BRIGHTNESS TEMP (*100 DEG. K)
            30    RETRIEVAL #1 37 GHZ H BRIGHTNESS TEMP (*100 DEG. K)
            31    RETRIEVAL #1 85 GHZ V BRIGHTNESS TEMP (*100 DEG. K)
            32    RETRIEVAL #1 85 GHZ H BRIGHTNESS TEMP (*100 DEG. K)
 
     =====> FOR LBRIT = TRUE AND NNALG = TRUE (INPUT BRIGHTNESS
             TEMPERATURE FILE):
 
            33    RETRIEVAL #1 NEURAL NET 3 ALGORITHM WIND SPEED
                   (GENERATED IN-LINE) (*10 METERS/SECOND)
            34    RETRIEVAL #1 NEURAL NET 3 ALGORITHM TOTAL PRECIP.
                   WATER (GENERATED IN-LINE) (*10 MILLIMETERS)
 
     =====> FOR LBRIT = TRUE AND GBALG = TRUE (INPUT BRIGHTNESS
             TEMPERATURE FILE):
 
            35    RETRIEVAL #1 GOODBERLET ALGORITHM WIND SPEED
                   (GENERATED IN-LINE) (*10 METERS/SECOND)
            36    RETRIEVAL #1 GOODBERLET ALGORITHM RAIN FLAG
                   (CODE FIGURE)
 
       37-1737    REPEAT 10-36 FOR 63 MORE RETRIEVALS
 
              (NOTE:  ALL MISSING DATA OR DATA NOT SELECTED BY
                      CALLING PROGRAM ARE SET TO 99999)
 

W3MOVDAT

The W3MOVDAT routine returns the date and time that is a given
             NCEP relative time interval from an NCEP absolute date 
             and time.  The output is in the NCEP absolute date and
             time data structure.

USAGE:  CALL W3MOVDAT(RINC,IDAT,JDAT)

   Input variables:
      RINC       REAL (5) NCEP RELATIVE TIME INTERVAL
                 (DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS)
      IDAT       INTEGER (8) NCEP ABSOLUTE DATE AND TIME
                 (YEAR, MONTH, DAY, TIME ZONE,
                 HOUR, MINUTE, SECOND, MILLISECOND)

   Output variables:
      JDAT       INTEGER (8) NCEP ABSOLUTE DATE AND TIME
                 (YEAR, MONTH, DAY, TIME ZONE,
                  HOUR, MINUTE, SECOND, MILLISECOND)
                 (JDAT IS LATER THAN IDAT IF TIME INTERVAL IS POSITIVE.)


W3NOGDS

The W3NOGDS routine makes a complete grib message from a
            user supplied array of floating point or integer data
            The user has the option of supplying the PDS or an
            integer array that will be used to create a PDS
            (with the routine W3FI68).  The user must also
            supply other necessary info; See usage section below.

USAGE:  CALL W3NOGDS(ITYPE,FLD,IFLD,IBITL,
                     IPFLAG,ID,PDS,IGFLAG,IGRID,
                     IGDS,ICOMP,IBFLAG,IBMAP,IBLEN,
                     IBDSFL,IBDSFL,NPTS,KBUF,ITOT,JERR)

   Input argument list:
      ITYPE    - 0 = FLOATING POINT DATA SUPPLIED IN ARRAY 'FLD'
                 1 = INTEGER DATA SUPPLIED IN ARRAY 'IFLD'
      FLD      - REAL ARRAY OF DATA (AT PROPER GRIDPOINTS) TO BE
                 CONVERTED TO GRIB FORMAT IF ITYPE=0.
                 SEE REMARKS #1 & 2.
      IFLD     - INTEGER ARRAY OF DATA (AT PROPER GRIDPOINTS) TO BE
                 CONVERTED TO GRIB FORMAT IF ITYPE=1.
                 SEE REMARKS #1 & 2.
      IBITL    - 0 = COMPUTER COMPUTES LENGTH FOR PACKING DATA FROM
                     POWER OF 2 (NUMBER OF BITS) BEST FIT OF DATA
                     USING 'VARIABLE' BIT PACKER W3FI58.
                 8, 12, ETC. COMPUTER RESCALES DATA TO FIT INTO THAT
                     'FIXED' NUMBER OF BITS USING W3FI59.
                 SEE REMARKS #3.
 
      IPFLAG   - 0 = MAKE PDS FROM USER SUPPLIED ARRAY (ID)
                 1 = USER SUPPLYING PDS
                 NOTE: IF PDS IS GREATER THAN 30, USE IPLFAG=1.
                 THE USER COULD CALL W3FI68 BEFORE HE CALLS
                 W3NOGDS. THIS WOULD MAKE THE FIRST 30 BYTES OF
                 THE PDS, USER THEN WOULD MAKE BYTES AFTER 30.
      ID       - INTEGER ARRAY OF  VALUES THAT W3FI68 WILL USE
                 TO MAKE AN EDITION 1 PDS IF IPFLAG=0.  (SEE THE
                 DOCBLOCK FOR W3FI68 FOR LAYOUT OF ARRAY)
      PDS      - CHARACTER ARRAY OF VALUES (VALID PDS SUPPLIED
                 BY USER) IF IPFLAG=1. LENGTH MAY EXCEED 28 BYTES
                 (CONTENTS OF BYTES BEYOND 28 ARE PASSED
                 THROUGH UNCHANGED).
 
      IGFLAG   - 0 = MAKE GDS BASED ON 'IGRID' VALUE.
                 1 = MAKE GDS FROM USER SUPPLIED INFO IN 'IGDS'
                     AND 'IGRID' VALUE.
                 SEE REMARKS #4.
                 2 = NO GDS WILL BE INCLUDED...for international grids
                 *** THIS IS AN EXCEPTION TO REMARKS #4!!!!
      IGRID    - #   = GRID IDENTIFICATION (TABLE B)
                 255 = IF USER DEFINED GRID; IGDS MUST BE SUPPLIED
                       AND IGFLAG MUST =1.
      IGDS     - INTEGER ARRAY CONTAINING USER GDS INFO (SAME
                 FORMAT AS SUPPLIED BY W3FI71 - SEE DOCKBLOCK FOR
                 LAYOUT) IF IGFLAG=1.
      ICOMP    - RESOLUTION AND COMPONENT FLAG FOR BIT 5 OF GDS(17)
                 0 = EARTH ORIENTED WINDS
                 1 = GRID ORIENTED WINDS
 
      IBFLAG   - 0 = MAKE BIT MAP FROM USER SUPPLIED DATA
                 # = BIT MAP PREDEFINED BY CENTER
                 SEE REMARKS #5.
      IBMAP    - INTEGER ARRAY CONTAINING BIT MAP
      IBLEN    - LENGTH OF BIT MAP WILL BE USED TO VERIFY LENGTH
                 OF FIELD (ERROR IF IT DOESN'T MATCH).
 
      IBDSFL   - INTEGER ARRAY CONTAINING TABLE 11 FLAG INFO
                 BDS OCTET 4:
                 (1) 0 = GRID POINT DATA
                     1 = SPHERICAL HARMONIC COEFFICIENTS
                 (2) 0 = SIMPLE PACKING
                     1 = SECOND ORDER PACKING
                 (3) ... SAME VALUE AS 'ITYPE'
                     0 = ORIGINAL DATA WERE FLOATING POINT VALUES
                     1 = ORIGINAL DATA WERE INTEGER VALUES
                 (4) 0 = NO ADDITIONAL FLAGS AT OCTET 14
                     1 = OCTET 14 CONTAINS FLAG BITS 5-12
                 (5) 0 = RESERVED - ALWAYS SET TO 0
          BYTE 6 OPTION 1 NOT AVAILABLE (AS OF 5-16-93)
                 (6) 0 = SINGLE DATUM AT EACH GRID POINT
                     1 = MATRIX OF VALUES AT EACH GRID POINT
          BYTE 7 OPTION 0 WITH SECOND ORDER PACKING N/A (AS OF 5-16-93)
                 (7) 0 = NO SECONDARY BIT MAPS
                     1 = SECONDARY BIT MAPS PRESENT
                 (8) 0 = SECOND ORDER VALUES HAVE CONSTANT WIDTH
                     1 = SECOND ORDER VALUES HAVE DIFFERENT WIDTHS
 
   Output argument list:
      NPTS     - NUMBER OF GRIDPOINTS IN ARRAY FLD OR IFLD
      KBUF     - ENTIRE GRIB MESSAGE ('GRIB' TO '7777')
                 EQUIVALENCE TO INTEGER ARRAY TO MAKE SURE IT
                 IS ON WORD BOUNARY.
      ITOT     - TOTAL LENGTH OF GRIB MESSAGE IN BYTES
      JERR     - = 0, COMPLETED MAKING GRIB FIELD WITHOUT ERROR
                   1, IPFLAG NOT 0 OR 1
                   2, IGFLAG NOT 0 OR 1 OR 2
                   3, ERROR CONVERTING IEEE F.P. NUMBER TO IBM370 F.P.
                   4, W3FI71 ERROR/IGRID NOT DEFINED
                   5, W3FK74 ERROR/GRID REPRESENTATION TYPE NOT VALID
                   6, GRID TOO LARGE FOR PACKER DIMENSION ARRAYS
                      SEE AUTOMATION DIVISION FOR REVISION!
                   7, LENGTH OF BIT MAP NOT EQUAL TO SIZE OF FLD/IFLD
                   8, W3FI73 ERROR, ALL VALUES IN IBMAP ARE ZERO
   Output files:
      FT06F001 - STANDARD FORTRAN OUTPUT PRINT FILE
 
REMARKS:
    1)  IF BIT MAP TO BE INCLUDED IN MESSAGE, NULL DATA SHOULD
        BE INCLUDED IN FLD OR IFLD.  THIS ROUTINE WILL TAKE CARE
        OF 'DISCARDING' ANY NULL DATA BASED ON THE BIT MAP.
    2)  UNITS MUST BE THOSE IN GRIB DOCUMENTATION:  NMC O.N. 388
        OR WMO PUBLICATION 306.
    3)  IN EITHER CASE, INPUT NUMBERS WILL BE MULTIPLIED BY
        '10 TO THE NTH' POWER FOUND IN ID(25) OR PDS(27-28),
        THE D-SCALING FACTOR, PRIOR TO BINARY PACKING.
    4)  ALL NMC PRODUCED GRIB FIELDS WILL HAVE A GRID DEFINITION
        SECTION INCLUDED IN THE GRIB MESSAGE.  ID(6) WILL BE
        SET TO '1'.
        - GDS WILL BE BUILT BASED ON GRID NUMBER (IGRID), UNLESS
          IGFLAG=1 (USER SUPPLYING IGDS).  USER MUST STILL SUPPLY
          IGRID EVEN IF IGDS PROVIDED.
    5)  IF BIT MAP USED THEN ID(7) OR PDS(8) MUST INDICATE THE
        PRESENCE OF A BIT MAP.
    6)  ARRAY KBUF SHOULD BE EQUIVALENCED TO AN INTEGER VALUE OR
        ARRAY TO MAKE SURE IT IS ON A WORD BOUNDARY.
    7)  SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
 

W3PRADAT

The W3PRADAT routine forms various character strings useful
             in describing an NCEP absolute date and time.

USAGE:  CALL W3PRADAT(IDAT,CDAT)

   Input variables:
      IDAT       INTEGER (8) NCEP ABSOLUTE DATE AND TIME
                 (YEAR, MONTH, DAY, TIME ZONE,
                  HOUR, MINUTE, SECOND, MILLISECOND)
 
   Output variables:
      CDAT       CHARACTER*10 (8) STRINGS DESCRIBING DATE AND TIME
                    CDAT(1) IS THE NAME OF THE DAY OF THE WEEK;
                    CDAT(2) IS THE NAME OF THE MONTH;
                    CDAT(3) IS THE DAY OF MONTH, YEAR;
                    CDAT(4) IS THE DATE IN YYYY-MM-DD FORMAT;
                    CDAT(5) IS THE DATE IN YYYY.DOY FORMAT;
                    CDAT(6) IS THE TIME IN HH:MM:SS FORMAT;
                    CDAT(7) IS THE MILLISECONDS IN .XXX FORMAT;
                    CDAT(8) IS THE TIME ZONE.)


W3PRRDAT

The W3PRRDAT routine forms various character strings useful
             in describing an ncep relative time interval.

USAGE:  CALL W3PRRDAT(RINC,CINC)

   Input variables:
      RINC       REAL (5) NCEP RELATIVE TIME INTERVAL
                 (DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS)

   Output variables:
      CINC       CHARACTER*10 (8) STRINGS DESCRIBING TIME INTERVAL
                    CINC(1) IS THE SIGNED INTEGER NUMBER OF DAYS;
                    CINC(2) IS THE TIME IN HH:MM:SS FORMAT;
                    CINC(3) IS THE MILLISECONDS IN .XXX FORMAT;
                    CINC(4) IS THE SIGNED REAL NUMBER OF DAYS;
                    CINC(5) IS THE SIGNED REAL NUMBER OF HOURS;
                    CINC(6) IS THE SIGNED REAL NUMBER OF MINUTES;
                    CINC(7) IS THE SIGNED REAL NUMBER OF SECONDS;
                    CINC(8) IS THE SIGNED REAL NUMBER OF MILLISECONDS.


W3REDDAT

The W3REDDAT routine reduces an NCEP relative time interval
             into one of seven canonical forms, depending on thei
             input it value.

    First reduced format type (IT=-1):
         RINC(1) is an arbitrary integer.
         RINC(2) is an integer between 00 and 23, inclusive.
         RINC(3) is an integer between 00 and 59, inclusive.
         RINC(4) is an integer between 00 and 59, inclusive.
         RINC(5) is an integer between 000 and 999, inclusive.
       If RINC(1) is negative, then the time interval is negative.
 
    Second reduced format type (IT=0):
       If the time interval is not negative, then the format is:
         RINC(1) is zero or a positive integer.
         RINC(2) is an integer between 00 and 23, inclusive.
         RINC(3) is an integer between 00 and 59, inclusive.
         RINC(4) is an integer between 00 and 59, inclusive.
         RINC(5) is an integer between 000 and 999, inclusive.
       Otherwise if the time interval is negative, then the format is:
         RINC(1) is zero or a negative integer.
         RINC(2) is an integer between 00 and -23, inclusive.
         RINC(3) is an integer between 00 and -59, inclusive.
         RINC(4) is an integer between 00 and -59, inclusive.
         RINC(5) is an integer between 000 and -999, inclusive.
 
    Days format type (IT=1):
         RINC(1) is arbitrary.
         RINC(2) is zero.
         RINC(3) is zero.
         RINC(4) is zero.
         RINC(5) is zero.
 
    Hours format type (IT=2):
         RINC(1) is zero.
         RINC(2) is arbitrary.
         RINC(3) is zero.
         RINC(4) is zero.
         RINC(5) is zero.
       (This format should not express time intervals longer than 300 years.)
 
    Minutes format type (IT=3):
         RINC(1) is zero.
         RINC(2) is zero.
         RINC(3) is arbitrary.
         RINC(4) is zero.
         RINC(5) is zero.
       (This format should not express time intervals longer than five years.)
 
    Seconds format type (IT=4):
         RINC(1) is zero.
         RINC(2) is zero.
         RINC(3) is zero.
         RINC(4) is arbitrary.
         RINC(5) is zero.
       (This format should not express time intervals longer than one month.)
 
    Milliseconds format type (IT=5):
         RINC(1) is zero.
         RINC(2) is zero.
         RINC(3) is zero.
         RINC(4) is zero.
         RINC(5) is arbitrary.
      (This format should not express time intervals longer than one hour.)
 
USAGE:  CALL W3REDDAT(IT,RINC,DINC)
 
   Input variables:
      IT         INTEGER RELATIVE TIME INTERVAL FORMAT TYPE
                 (-1 FOR FIRST REDUCED TYPE (HOURS ALWAYS POSITIVE),
                 0 FOR SECOND REDUCED TYPE (HOURS CAN BE NEGATIVE),
                 1 FOR DAYS ONLY, 2 FOR HOURS ONLY, 3 FOR MINUTES ONLY,
                 4 FOR SECONDS ONLY, 5 FOR MILLISECONDS ONLY)
      RINC       REAL (5) NCEP RELATIVE TIME INTERVAL
                 (DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS)

   Output variables:
      DINC       REAL (5) NCEP RELATIVE TIME INTERVAL
                 (DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS)


W3TAGB

The W3TAGB routine prints identifying information for
           operational codes. called at the beginning of a code,
           w3tagb prints the program name, the year and julian day
           of its compilation, and the responsible organization. 
           On a 2nd line it prints the starting date-time. Called at
           the end of a job, entry routine, w3tage prints a line with
           the c   ending date-time and a 2nd line stating the program name
           and that it has ended.

USAGE:  CALL W3TAGB(PROG, KYR, JD, LF, ORG)

   Input variables:
      PROG      PROGRAM NAME   CHARACTER*1
      KYR       YEAR OF COMPILATION   INTEGER
      JD        JULIAN DAY OF COMPILATION   INTEGER
      LF        HUNDRETHS OF JULIAN DAY OF COMPILATION
                INTEGER     (RANGE IS 0 TO 99 INCLUSIVE)
      ORG       ORGANIZATION CODE (SUCH AS WD42)
                CHARACTER*1

   Output variables:
      DDATE     YEAR AND JULIAN DAY (NEAREST HUNDRETH)
                OF COMPILATION  REAL


REMARKS:
        FULL WORD USED IN ORDER TO HAVE AT LEAST
        SEVEN DECIMAL DIGITS ACCURACY FOR VALUE OF DDATE.
        SUBPROGRAM CLOCK AND DATE MAY DIFFER FOR EACH TYPE
        COMPUTER. YOU MAY HAVE TO CHANGE THEM FOR ANOTHER
        TYPE OF COMPUTER.


W3TRNARG

The W3TRNARG routine reads argument lines from standard input
             and obtains, subdirectory, bufr tankname, characters to
             append for adding an orbit, and options for limiting the
             time window.

USAGE:    CALL W3TRNARG(SUBDIR,LSUBDR,TANKID,LTNKID,APPCHR,LAPCHR,
                        TLFLAG,IYMDHB,IYMDHE,IERR)

   Output argument list:
      SUBDIR   - NAME OF SUB-DIRECTORY INCLUDING BUFR DATA TYPE WHERE
                 BUFR DATA TANK IS LOCATED.
      LSUBDR   - NUMBER OF CHARACTERS IN 'SUBDIR'.
      TANKID   - NAME OF FILE INCLUDING BUFR DATA SUB-TYPE CONTAINING
                 BUFR DATA TANK.
      LTNKID   - NUMBER OF CHARACTERS IN 'TANKID'.
      APPCHR   - CHARACTERS TO BE APPENDED TO 'TANKID' GIVING A
                 UNIQUELY NAMED FILE TO CONTAIN THE ORIGINAL TANK
                 WITH ONE ORBIT APPENDED TO IT.
      LAPCHR   - NUMBER OF CHARACTERS IN 'APPCHR'.
      TLFLAG   - 8 CHARACTER FLAG INDICATING WHETHER TIME ACCEPTANCE
                 CHECKS ATRE TO BE PERFORMED.
                 = 'TIMLIM  ' : PERFORM TIME ACCEPTANCE CHECKS.
                 = 'NOTIMLIM' : DO NOT PERFORM TIME ACCEPTANCE CHECKS.
                                JDATE AND KDATE ARE DISREGARDED.
      IYMDHB   - START OF TIME ACCEPTANCE WINDOW, IN FORM YYYYMMDDHH.
      IYMDHE   - END OF TIME ACCEPTANCE WINDOW, IN FORM YYYYMMDDHH.
 
   Input files :
      UNIT 05  - STANDARD INPUT FOR PASSING IN ARGUMENTS. ARGUMENTS
                 (FOR LIST-DIRECTED I/O) ARE AS FOLLOWS :
                 RECORD 1 - (1) SUBDIRECTORY. CONTAINS BUFR DATA TYPE
                            (2) TANKFILE. CONTAINS BUFR DATA SUB-TYPE
                            (3) APPEND CHARACTERS. APPENDED TO TANKFILE
                                TO GIVE UNIQUE OUTPUT FILE NAME.
                            (4) DATE IN YYYYMMDDHH FORMAT.
                 NEXT THREE RECORDS ARE OPTIONAL :
                 RECORD 2 - (1) TIME LIMIT FLAG. MAY BE EITHER
                                'TIMLIM  ' OR 'NOTIMLIM'.  SEE
                                DESCRIPTION OF 'TLFLAG' ABOVE.
                                (DEFAULT IS 'NOTIMLIM')
                 RECORD 3 - (1) HOURS BEFORE CURRENT TIME.
                 RECORD 4 - (1) HOURS AFTER CURRENT TIME.
                 IF 'TIMLIM  ' IS SPECIFIED IN RECORD 2, THE
                 QUANTITIES IN RECORDS 3 AND 4 ARE USED TO
                 COMPUTE THE LIMITS OF THE TIME ACCEPTANCE WINDOW.
                 IF RECORDS 3 AND 4 ARE OMITTED, THE VALUES
                 DEFAULT TO -48 (48 HOURS BEFORE CURRENT TIME)
                 AND +12 (12 HOURS AFTER CURRENT TIME).
                 IF 'NOTIMLIM  ' IS SPECIFIED IN RECORD 2, THEN
                 THESE QUANTITIES ARE NOT USED REGARDLESS OF WHETHER
                 OR NOT THEY WERE SPECIFIED.
 

W3UNPK77

The W3UNPK77 routine decodes a single report from bufr messages
             in a jbufr-type data file.  Currently wind profiler, 
             nexrad (vad) wind and goes sounding/radiance data types
             are valid.  Report is returned in quasi-office note 29
             unpacked format (see remarks 4.).

USAGE:    CALL W3UNPK77(IDATE,IHE,IHL,LUNIT,RDATA,IRET)

   Input argument list:
      IDATE    - 4-WORD ARRAY HOLDING "CENTRAL" DATE TO PROCESS
               - (YYYY, MM, DD, HH)
      IHE      - NUMBER OF WHOLE HOURS RELATIVE TO "IDATE" FOR DATE OF
               - EARLIEST BUFR MESSAGE THAT IS TO BE DECODED; EARLIEST
               - DATE IS "IDATE" + "IHE" HOURS (IF "IHE" IS POSITIVE,
               - LATEST MESSAGE DATE IS AFTER "IDATE"; IF "IHE" IS
               - NEGATIVE LATEST MESSAGE DATE IS PRIOR TO "IDATE")
               - EXAMPLE: IF IHE=1, THEN EARLIEST DATE IS 1-HR AFTER
               - IDATE; IF IHE=-3, THEN EARLIEST DATE IS 3-HR PRIOR
               - TO IDATE
      IHL      - NUMBER OF WHOLE HOURS RELATIVE TO "IDATE" FOR DATE OF
               - LATEST BUFR MESSAGE THAT IS TO BE DECODED; LATEST
               - DATE IS "IDATE" + ("IHL" HOURS PLUS 59 MIN) IF "IHL"
               - IS POSITIVE (LATEST MESSAGE DATE IS AFTER "IDATE"),
               - AND "IDATE" + ("IHL"+1 HOURS MINUS 1 MIN) IF "IHL"
               - IS NEGATIVE (LATEST MESSAGE DATE IS PRIOR TO "IDATE")
               - EXAMPLE: IF IHL=3, THEN LATEST DATE IS 3-HR 59-MIN
               - AFTER IDATE; IF IHL=-2, THEN LATEST DATE IS 1-HR 1-MIN
               - PRIOR TO IDATE
      LUNIT    - FORTRAN UNIT NUMBER FOR INPUT DATA FILE
      IRET     - CONTROLS DEGREE OF UNIT 6 PRINTOUT (.GE. 0 -LIMITED
               - PRINTOUT; = -1 SOME ADDITIONAL DIAGNOSTIC PRINTOUT;
               = .LT. -1 -EXTENSIVE PRINTOUT) (SEE REMARKS 3.)
 
   Output argument list:      (INCLUDING WORK ARRAYS)
      RDATA    - SINGLE REPORT RETURNED AN A QUASI-OFFICE NOTE 29
               - UNPACKED FORMAT (SEE REMARKS 4.) (MINIMUM SIZE IS
               - 1200 WORDS)
      IRET     - RETURN CODE AS FOLLOWS:
        IRET = 0 ---> REPORT SUCCESSFULLY RETURNED
        IRET > 0 ---> NO REPORT RETURNED DUE TO:
             = 1 ---> ALL REPORTS READ IN, END
             = 2 ---> LAT AND/OR LON DATA MISSING
             = 3 ---> RESERVED
             = 4 ---> SOME/ALL DATE INFORMATION MISSING
             = 5 ---> NO DATA LEVELS PROCESSED (ALL LEVELS ARE MISSING)
             = 6 ---> NUMBER OF LEVELS IN REPORT HEADER IS NOT 1
             = 7 ---> NUMBER OF LEVELS IN ANOTHER SINGLE LEVEL SEQUENCE
                      IS NOT 1
 
   Input files:
      UNIT AA  - (WHERE AA IS LUNIT ABOVE) FILE HOLDING THE DATA
               - IN THE FORM OF BUFR MESSAGES
 
   Output files:
      UNIT 06  - PRINTOUT
 
REMARKS:
           1) A CONDITION CODE (STOP) OF 15 WILL OCCUR IF THE INPUT
              DATES FOR START AND/OR STOP TIME ARE SPECIFIED INCORRECTLY.
           2) A CONDITION CODE (STOP) OF 22 WILL OCCUR IF THE
              CHARACTERS ON THIS MACHINE ARE NEITHER ASCII NOR EBCDIC.
           3) THE INPUT ARGUMENT "IRET" SHOULD BE SET PRIOR TO EACH
              CALL TO THIS SUBROUTINE.
           4) BELOW IS THE FORMAT OF AN UNPACKED REPORT IN OUTPUT
              ARRAY RDATA (EACH WORD REPRESENTS A FULL-WORD ACCORDING
              TO THE MACHINE)

    N O T E : THIS IS THE SAME FORMAT AS FOR W3LIB ROUTINE W3FI77
              EXCEPT WHERE NOTED

                FORMAT FOR WIND PROFILER REPORTS
WORD CONTENT UNIT FORMAT ---- ---------------------- ------------------- --------- 1 LATITUDE 0.01 DEGREES REAL 2 LONGITUDE 0.01 DEGREES WEST REAL 3 TIME SIGNIFICANCE (BUFR CODE TABLE "0 08 021") INTEGER 4 OBSERVATION TIME 0.01 HOURS (UTC) REAL 5 YEAR/MONTH 4-CHAR. 'YYMM' CHARACTER LEFT-JUSTIFIED 6 DAY/HOUR 4-CHARACTERS 'DDHH' CHARACTER 7 STATION ELEVATION METERS REAL 8 SUBMODE/EDITION NO. (SM X 10) + ED. NO. INTEGER (ED. NO.=2, CONSTANT; SEE &,~) 9 REPORT TYPE 71 (CONSTANT) INTEGER 10 AVERAGING TIME MINUTES INTEGER (NEGATIVE MEANS PRIOR TO OBS. TIME) 11 STN. ID. (FIRST 4 CHAR.) 4-CHARACTERS CHARACTER LEFT-JUSTIFIED 12 STN. ID. (LAST 2 CHAR.) 2-CHARACTERS CHARACTER LEFT-JUSTIFIED 13-34 ZEROED OUT - NOT USED INTEGER 35 CATEGORY 10, NO. LEVELS COUNT INTEGER 36 CATEGORY 10, DATA INDEX COUNT INTEGER 37 CATEGORY 11, NO. LEVELS COUNT INTEGER 38 CATEGORY 11, DATA INDEX COUNT INTEGER 39-42 ZEROED OUT - NOT USED INTEGER 43-END UNPACKED DATA GROUPS (FOLLOWS) REAL CATEGORY 10 - WIND PROFILER SFC DATA (EACH LEVEL, SEE WORD 35 ABOVE) WORD PARAMETER UNITS FORMAT ---- --------- ----------------- ------------- (SEE @)1 SEA-LEVEL PRESSURE 0.1 MILLIBARS REAL (SEE *)2 STATION PRESSURE 0.1 MILLIBARS REAL (SEE @)3 HORIZ. WIND DIR. DEGREES REAL (SEE @)4 HORIZ. WIND SPEED 0.1 M/S REAL (SEE @)5 AIR TEMPERATURE 0.1 DEGREES K REAL (SEE @)6 RELATIVE HUMIDITY PERCENT REAL (SEE @)7 RAINFALL RATE 0.0000001 M/S REAL CATEGORY 11 - WIND PROFILER UPPER-AIR DATA (FIRST LEVEL IS SURFACE) (EACH LEVEL, SEE WORD 37 ABOVE) WORD PARAMETER UNITS FORMAT ---- --------- ----------------- ------------- 1 HEIGHT ABOVE SEA-LVL METERS REAL 2 HORIZ. WIND DIR. DEGREES REAL 3 HORIZ. WIND SPEED 0.1 M/S REAL 4 QUALITY CODE (SEE %) INTEGER 5 VERT. WIND COMP. (W) 0.01 M/S REAL (SEE @)6 HORIZ. CONSENSUS NO. (SEE $) INTEGER (SEE @)7 VERT. CONSENSUS NO. (SEE $) INTEGER (SEE @)8 SPECTRAL PEAK POWER DB REAL 9 HORIZ. WIND SPEED 0.1 M/S REAL STANDARD DEVIATION 0.1 M/S REAL 10 VERT. WIND COMPONENT 0.1 M/S REAL STANDARD DEVIATION 0.1 M/S REAL (SEE @)11 MODE (SEE #) INTEGER *- ALWAYS MISSING &- THIS IS A CHANGE FROM FORMAT IN W3LIB ROUTINE W3FI77 %- 0 - MEDIAN AND SHEAR CHECKS BOTH PASSED 2 - MEDIAN AND SHEAR CHECK RESULTS INCONCLUSIVE 4 - MEDIAN CHECK PASSED; SHEAR CHECK FAILED 8 - MEDIAN CHECK FAILED; SHEAR CHECK PASSED 12 - MEDIAN AND SHEAR CHECKS BOTH FAILED $- NO. OF INDIVIDUAL 6-MINUTE AVERAGE MEASUREMENTS THAT WERE INCLUDED IN FINAL ESTIMATE OF AVERAGED WIND (RANGE: 0, 2-10) (BASED ON A ONE-HOUR AVERAGE) #- 1 - DATA FROM LOW MODE 2 - DATA FROM HIGH MODE 3 - MISSING @- THIS PARAMETER IS NO LONGER AVAILABLE AFTER 3/2002 AND IS SET TO MISSING (99999 FOR INTEGER OR 99999. FOR REAL) ~- SUBMODE IS NO LONGER AVAILABLE AFTER 3/2002 AND IS SET TO 3 (ITS MISSING VALUE) FORMAT FOR GOES SOUNDING/RADIANCE REPORTS WORD CONTENT UNIT FORMAT ---- ---------------------- ------------------- --------- 1 LATITUDE 0.01 DEGREES REAL 2 LONGITUDE 0.01 DEGREES WEST REAL 3 FIELD OF VIEW NUMBER NUMERIC INTEGER 4 OBSERVATION TIME 0.01 HOURS (UTC) REAL 5 YEAR/MONTH 4-CHAR. 'YYMM' CHARACTER LEFT-JUSTIFIED 6 DAY/HOUR 4-CHARACTERS 'DDHH' CHARACTER 7 STATION ELEVATION METERS REAL 8 PROCESS. TECHNIQUE (=21-CLEAR; INTEGER 8 PROCESS. TECHNIQUE =23-CLOUD-CORRECTED) 9 REPORT TYPE 61 (CONSTANT) INTEGER 10 QUALITY FLAG (BUFR CODE TABLE "0 33 002") INTEGER 11 STN. ID. (FIRST 4 CHAR.) 4-CHARACTERS CHARACTER LEFT-JUSTIFIED 12 STN. ID. (LAST 2 CHAR.) 2-CHARACTERS CHARACTER LEFT-JUSTIFIED (SEE %) 13-26 ZEROED OUT - NOT USED 27 CATEGORY 08, NO. LEVELS COUNT INTEGER 28 CATEGORY 08, DATA INDEX COUNT INTEGER 29-38 ZEROED OUT - NOT USED 39 CATEGORY 12, NO. LEVELS COUNT INTEGER 40 CATEGORY 12, DATA INDEX COUNT INTEGER 41 CATEGORY 13, NO. LEVELS COUNT INTEGER 42 CATEGORY 13, DATA INDEX COUNT INTEGER 43-END UNPACKED DATA GROUPS (FOLLOWS) REAL CATEGORY 12 - SATELLITE SOUNDING LEVEL DATA (FIRST LEVEL IS SURFACE; EACH LEVEL, SEE 39 ABOVE) WORD PARAMETER UNITS FORMAT ---- --------- ----------------- ------------- 1 PRESSURE 0.1 MILLIBARS REAL 2 GEOPOTENTIAL METERS REAL #- FIRST CHARACTER IS Q.M. FOR THE DATUM 4 DEWPOINT TEMPERATURE 0.1 DEGREES C REAL 5 NOT USED SET TO MISSING REAL 6 NOT USED SET TO MISSING REAL 7 QUALITY MARKERS 4-CHARACTERS CHARACTER LEFT-JUSTIFIED (SEE &) CATEGORY 13 - SATELLITE RADIANCE "LEVEL" DATA (EACH "LEVEL", SEE 41 ABOVE) WORD PARAMETER UNITS FORMAT ---- --------- ----------------- ------------- 1 CHANNEL NUMBER NUMERIC INTEGER 2 BRIGHTNESS TEMP. 0.01 DEG. KELVIN REAL 3 QUALITY MARKERS 4-CHARACTERS CHARACTER LEFT-JUSTIFIED (SEE &&) CATEGORY 08 - ADDITIONAL (MISCELLANEOUS) DATA (EACH LEVEL, SEE @ BELOW) WORD PARAMETER UNITS FORMAT ---- --------- ----------------- ------------- 1 VARIABLE SEE @ BELOW REAL 2 CODE FIGURE SEE @ BELOW REAL 3 MARKERS 2-CHARACTERS CHARACTER LEFT-JUSTIFIED (SEE #) %- SIXTH CHARACTER OF STATION ID IS A TAGGED AS FOLLOWS: "I" - GOES-EVEN-1 (252, 256, ...) SAT. , CLEAR COLUMN RETR. "J" - GOES-EVEN-1 (252, 256, ...) SAT. , CLD-CORRECTED RETR. "L" - GOES-ODD-1 (253, 257, ...) SAT. , CLEAR COLUMN RETR. "M" - GOES-ODD-1 (253, 257, ...) SAT. , CLD-CORRECTED RETR. "O" - GOES-EVEN-2 (254, 258, ...) SAT. , CLEAR COLUMN RETR. "P" - GOES-EVEN-2 (254, 258, ...) SAT. , CLD-CORRECTED RETR. "Q" - GOES-ODD-2 (251, 255, ...) SAT. , CLEAR COLUMN RETR. "R" - GOES-ODD-2 (251, 255, ...) SAT. , CLD-CORRECTED RETR. "?" - EITHER SATELLITE AND/OR RETRIEVAL TYPE UNKNOWN &- FIRST CHARACTER IS Q.M. FOR GEOPOTENTIAL SECOND CHARACTER IS Q.M. FOR TEMPERATURE THIRD CHARACTER IS Q.M. FOR DEWPOINT TEMPERATURE FOURTH CHARACTER IS NOT USED " " - INDICATES DATA NOT SUSPECT "Q" - INDICATES DATA ARE SUSPECT "F" - INDICATES DATA ARE BAD &&- FIRST CHARACTER IS Q.M. FOR BRIGHTNESS TEMPERATURE SECOND-FOURTH CHARACTERS ARE NOT USED " " - INDICATES DATA NOT SUSPECT "Q" - INDICATES DATA ARE SUSPECT "F" - INDICATES DATA ARE BAD @- NUMBER OF "LEVELS" FROM WORD 27. MAXIMUM IS 12, AND ARE ORDERED AS FOLLOWS (IF A DATUM ARE MISSING THAT LEVEL NOT STORED) 1 - LIFTED INDEX ---------- .01 DEG. KELVIN -- C. FIG. 250. 2 - TOTAL PRECIP. WATER -- .01 MILLIMETERS -- C. FIG. 251. 3 - 1. TO .9 SIGMA P.WATER- .01 MILLIMETERS -- C. FIG. 252. 4 - .9 TO .7 SIGMA P.WATER- .01 MILLIMETERS -- C. FIG. 253. 5 - .7 TO .3 SIGMA P.WATER- .01 MILLIMETERS -- C. FIG. 254. 6 - SKIN TEMPERATURE ----- .01 DEG. KELVIN -- C. FIG. 255. 7 - CLOUD TOP TEMPERATURE- .01 DEG. KELVIN -- C. FIG. 256. 8 - CLOUD TOP PRESSURE --- .1 MILLIBARS ----- C. FIG. 257. 9 - CLOUD AMOUNT (BUFR TBL. C.T. 0-20-011) -- C. FIG. 258. 10 - INSTR. DATA USED IN PROC. (BUFR TBL. C.T. 0-02-021) -- C. FIG. 259. 11 - SOLAR ZENITH ANGLE --- .01 DEGREE ------- C. FIG. 260. 12 - SAT. ZENITH ANGLE ---- .01 DEGREE ------- C. FIG. 261. #- FIRST CHARACTER IS Q.M. FOR THE DATUM " " - INDICATES DATA NOT SUSPECT "Q" - INDICATES DATA ARE SUSPECT "F" - INDICATES DATA ARE BAD SECOND CHARACTER IS NOT USED FORMAT FOR NEXRAD (VAD) WIND REPORTS WORD CONTENT UNIT FORMAT ---- ---------------------- ------------------- --------- 1 LATITUDE 0.01 DEGREES REAL 2 LONGITUDE 0.01 DEGREES WEST REAL 3 ** RESERVED ** SET TO 99999 INTEGER 4 OBSERVATION TIME 0.01 HOURS (UTC) REAL 5 YEAR/MONTH 4-CHAR. 'YYMM' CHARACTER LEFT-JUSTIFIED 6 DAY/HOUR 4-CHARACTERS 'DDHH' CHARACTER 7 STATION ELEVATION METERS REAL 8 ** RESERVED ** SET TO 99999 INTEGER 9 REPORT TYPE 72 (CONSTANT) INTEGER 10 ** RESERVED ** SET TO 99999 INTEGER 11 STN. ID. (FIRST 4 CHAR.) 4-CHARACTERS CHARACTER LEFT-JUSTIFIED 12 STN. ID. (LAST 2 CHAR.) 2-CHARACTERS CHARACTER LEFT-JUSTIFIED 13-18 ZEROED OUT - NOT USED INTEGER 19 CATEGORY 04, NO. LEVELS COUNT INTEGER 20 CATEGORY 04, DATA INDEX COUNT INTEGER 21-42 ZEROED OUT - NOT USED INTEGER 43-END UNPACKED DATA GROUPS (FOLLOWS) REAL CATEGORY 04 - UPPER-AIR WINDS-BY-HEIGHT DATA(FIRST LEVEL IS SURFACE) (EACH LEVEL, SEE WORD 19 ABOVE) WORD PARAMETER UNITS FORMAT ---- --------- ----------------- ------------- 1 HEIGHT ABOVE SEA-LVL METERS REAL 2 HORIZ. WIND DIR. DEGREES REAL 3 HORIZ. WIND SPEED 0.1 M/S (SEE *) REAL 4 QUALITY MARKERS 4-CHARACTERS CHARACTER LEFT-JUSTIFIED (SEE %) *- UNITS HERE DIFFER FROM THOSE IN TRUE UNPACKED OFFICE NOTE 29 (WHERE UNITS ARE KNOTS) %- THE FIRST THREE CHARACTERS ARE ALWAYS BLANK, THE FOURTH CHARACTER IS A "CONFIDENCE LEVEL" WHICH IS RELATED TO THE ROOT- MEAN-SQUARE VECTOR ERROR FOR THE HORIZONTAL WIND. IT IS DEFINED AS FOLLOWS: 'A' = RMS OF 1.9 KNOTS 'B' = RMS OF 3.9 KNOTS 'C' = RMS OF 5.8 KNOTS 'D' = RMS OF 7.8 KNOTS 'E' = RMS OF 9.7 KNOTS 'F' = RMS OF 11.7 KNOTS 'G' = RMS > 13.6 KNOTS FOR ALL REPORT TYPES, MISSING VALUES ARE: 99999. FOR REAL 99999 FOR INTEGER 9'S FOR CHARACTERS IN WORD 5, 6 OF HEADER BLANK FOR CHARACTERS IN WORD 11, 12 OF HEADER AND FOR CHARACTERS IN ANY CATEGORY LEVEL W3UTCDAT The W3UTCDAT routine returns the utc (Greenwich) date and time in the NCEP absolute date and time data structure. USAGE: CALL W3UTCDAT(IDAT) OUTPUT VARIABLES: IDAT INTEGER (8) NCEP ABSOLUTE DATE AND TIME (YEAR, MONTH, DAY, TIME ZONE, HOUR, MINUTE, SECOND, MILLISECOND) W3VALDAT The W3VALDAT function returns true if the input is a valid NCEP absolute date and time. USAGE: ...=W3VALDAT(IDAT) Input variables: IDAT INTEGER (8) NCEP ABSOLUTE DATE AND TIME (YEAR, MONTH, DAY, TIME ZONE, HOUR, MINUTE, SECOND, MILLISECOND) Output variables: W3VALDAT LOGICAL TRUE IF IDAT IS A VALID NCEP DATE AND TIME W3YMDH4 The W3YMDH4 routine obtains the components of the NMC date word, or given its components, forms an NMC type date word. The packing is done using base 32. If the first byte of IDATE is less than 101, then the old Office Note 84 packing is assumed. A four-digit year is always returned. To pack the "old" way, pass in a 2-digit year. This program will work for the years ranging from A.D. 101 through 79359. On unpacking, years less than or equal to 100 are returned as follows: 0-50 2000--2050 51-100 1951--2000 USAGE: CALL W3YMDH4 (IDATE, IYEAR, MONTH, IDAY, IHOUR, NN) Input variables: IDATE LEFT 4 BYTES OF INTEGER 64 BIT WORD, OR CAN BE CHARACTER*1 IDATE(4) OR CHARACTER*4 IDATE. IYEAR INTEGER YEAR (4 DIGITS or 2 DIGITS for ON84) MONTH INTEGER MONTH IDAY INTEGER DAY IHOUR INTEGER HOUR NN INTEGER CODE: .EQ. 0 PACK IYEAR, MONTH, IDAY, IHOUR INTO IDATE .NE. 0 UNPACK IDATE INTO IYEAR, MONTH, IDAY, IHOUR Output variables: IDATE LEFT 4 BYTES OF INTEGER 64 BIT WORD, OR CAN BE CHARACTER*1 IDATE(4) OR CHARACTER*4 IDATE. IYEAR INTEGER YEAR (4 DIGITS) MONTH INTEGER MONTH IDAY INTEGER DAY IHOUR INTEGER HOUR XDOPEN The XDOPEN routine and the corresponding entries: "ERRSET", "XDCHEK", "XDCLOS", "XDWRIT", "XDREAD", and "XDFORM" are placed here to allow calling routines which reside on both the NAS and the CRAY to compile. These subroutines perform NAS-SPECIFIC functions, but have no corresponding function on the CRAY. Therefore this subroutine is a "DUMMY". ft06 print is provided to alert the user that the call to the subroutine results in an immediate return with no function. USAGE: CALL XDOPEN REMARKS: NONE XSTORE The XSTORE routine stores an 8-byte (fullword) value through consecutive storage locations. USAGE: CALL XSTORE(COUT,CON,MWORDS) Input argument list: CON - CONSTANT TO BE STORED INTO "MWORDS" CONSECUTIVE FULLWORDS BEGINNING WITH "COUT" ARRAY MWORDS - NUMBER OF FULLWORDS IN "COUT" ARRAY TO STORE "CON"; MUST BE .GT. ZERO (NOT CHECKED FOR THIS) Output argument list: (INCLUDING WORK ARRAYS) COUT - STARTING ADDRESS FOR ARRAY OF "MWORDS" FULLWORDS SET TO THE CONTENTS OF THE VALUE "CON" REMARKS: THE VERSION OF THIS SUBROUTINE ON THE HDS COMMON LIBRARY IS NAS-SPECIFIC SUBR. WRITTEN IN ASSEMBLY LANG. TO ALLOW FAST COMPUTATION TIME. SUBR. PLACED IN CRAY W3LIB TO ALLOW CODES TO COMPILE ON BOTH THE HDS AND CRAY MACHINES. SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
 
W3lib.tar Library contains FORTRAN 90 decoder/encoder routines for GRIB edition 1.
Date posted: 9/05/2012
bacio.tar Library contains FORTRAN 90 I/O routines for GRIB edition 1.
Date posted: 9/05/2012