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

 
W3lib.tar Library contains Fortran 90 decoder/encoder routines for GRIB edition 1. (Fortran90)
Date posted: 2/22/2007