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)
W3lib.tar |
Library contains Fortran 90 decoder/encoder
routines for GRIB edition 1. (Fortran90)
Date posted: 2/22/2007 |