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)

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