SUBROUTINE W3FI63(MSGA,KPDS,KGDS,KBMS,DATA,KPTR,KRET) C$$$ SUBPROGRAM DOCUMENTATION BLOCK C . . . . C SUBPROGRAM: W3FI63 UNPK GRIB FIELD TO GRIB GRID C PRGMMR: FARLEY ORG: NMC421 DATE:94-11-22 C C ABSTRACT: UNPACK A GRIB (EDITION 1) FIELD TO THE EXACT GRID C SPECIFIED IN THE GRIB MESSAGE, ISOLATE THE BIT MAP, AND MAKE C THE VALUES OF THE PRODUCT DESCRIPTON SECTION (PDS) AND THE C GRID DESCRIPTION SECTION (GDS) AVAILABLE IN RETURN ARRAYS. C C WHEN DECODING IS COMPLETED, DATA AT EACH GRID POINT HAS BEEN C RETURNED IN THE UNITS SPECIFIED IN THE GRIB MANUAL. C C PROGRAM HISTORY LOG: C 91-09-13 CAVANAUGH C 91-11-12 CAVANAUGH MODIFIED SIZE OF ECMWF GRIDS 5-8 C 91-12-22 CAVANAUGH CORRECTED PROCESSING OF MERCATOR PROJECTIONS C IN GRID DEFINITION SECTION (GDS) IN C ROUTINE FI633 C 92-08-05 CAVANAUGH CORRECTED MAXIMUM GRID SIZE TO ALLOW FOR C ONE DEGREE BY ONE DEGREE GLOBAL GRIDS C 92-08-27 CAVANAUGH CORRECTED TYPO ERROR, ADDED CODE TO COMPARE C TOTAL BYTE SIZE FROM SECTION 0 WITH SUM OF C SECTION SIZES. C 92-10-21 CAVANAUGH CORRECTIONS WERE MADE (IN FI634) TO REDUCE C PROCESSING TIME FOR INTERNATIONAL GRIDS. C REMOVED A TYPOGRAPHICAL ERROR IN FI635. C 93-01-07 CAVANAUGH CORRECTIONS WERE MADE (IN FI635) TO C FACILITATE USE OF THESE ROUTINES ON A PC. C A TYPOGRAPHICAL ERROR WAS ALSO CORRECTED C 93-01-13 CAVANAUGH CORRECTIONS WERE MADE (IN FI632) TO C PROPERLY HANDLE CONDITION WHEN C TIME RANGE INDICATOR = 10. C ADDED U.S.GRID 87. C 93-02-04 CAVANAUGH ADDED U.S.GRIDS 85 AND 86 C 93-02-26 CAVANAUGH ADDED GRIDS 2, 3, 37 THRU 44,AND C GRIDS 55, 56, 90, 91, 92, AND 93 TO C LIST OF U.S. GRIDS. C 93-04-07 CAVANAUGH ADDED GRIDS 67 THRU 77 TO C LIST OF U.S. GRIDS. C 93-04-20 CAVANAUGH INCREASED MAX SIZE TO ACCOMODATE C GAUSSIAN GRIDS. C 93-05-26 CAVANAUGH CORRECTED GRID RANGE SELECTION IN FI634 C FOR RANGES 67-71 & 75-77 C 93-06-08 CAVANAUGH CORRECTED FI635 TO ACCEPT GRIB MESSAGES C WITH SECOND ORDER PACKING. ADDED ROUTINE FI636 C TO PROCESS MESSAGES WITH SECOND ORDER PACKING. C 93-09-22 CAVANAUGH MODIFIED TO EXTRACT SUB-CENTER NUMBER FROM C PDS BYTE 26 C 93-10-13 CAVANAUGH MODIFIED FI634 TO CORRECT GRID SIZES FOR C GRIDS 204 AND 208 C 93-10-14 CAVANAUGH INCREASED SIZE OF KGDS TO INCLUDE ENTRIES FOR C NUMBER OF POINTS IN GRID AND NUMBER OF WORDS C IN EACH ROW C 93-12-08 CAVANAUGH CORRECTED TEST FOR EDITION NUMBER INSTEAD C OF VERSION NUMBER C 93-12-15 CAVANAUGH MODIFIED SECOND ORDER POINTERS TO FIRST ORDER C VALUES AND SECOND ORDER VALUES CORRECTLY C IN ROUTINE FI636 C 94-03-02 CAVANAUGH ADDED CALL TO W3FI83 WITHIN DECODER. USER C NO LONGER NEEDS TO MAKE CALL TO THIS ROUTINE C 94-04-22 CAVANAUGH MODIFIED FI635, FI636 TO PROCESS ROW BY ROW C SECOND ORDER PACKING, ADDED SCALING CORRECTION C TO FI635, AND CORRECTED TYPOGRAPHICAL ERRORS C IN COMMENT FIELDS IN FI634 C 94-05-17 CAVANAUGH CORRECTED ERROR IN FI633 TO EXTRACT RESOLUTION C FOR LAMBERT-CONFORMAL GRIDS. ADDED CLARIFYING C INFORMATION TO DOCBLOCK ENTRIES C 94-05-25 CAVANAUGH ADDED CODE TO PROCESS COLUMN BY COLUMN AS WELL C AS ROW BY ROW ORDERING OF SECOND ORDER DATA C 94-06-27 CAVANAUGH ADDED PROCESSING FOR GRIDS 45, 94 AND 95. C INCLUDES CONSTRUCTION OF SECOND ORDER BIT MAPS C FOR THINNED GRIDS IN FI636. C 94-07-08 CAVANAUGH COMMENTED OUT PRINT OUTS USED FOR DEBUGGING C 94-09-08 CAVANAUGH ADDED GRIDS 220, 221, 223 FOR FNOC C 94-11-10 FARLEY INCREASED MXSIZE FROM 72960 TO 260000 C FOR .5 DEGREE SST ANALYSIS FIELDS C 94-12-06 R.E.JONES CHANGES IN FI632 FOR PDS GREATER THAN 28 C 95-02-14 R.E.JONES CORRECT IN FI633 FOR NAVY WAFS GRIB C 95-03-20 M.BALDWIN FI633 MODIFICATION TO GET C DATA REP TYPES [KGDS(1)] 201 AND 202 TO WORK. C 95-04-10 E.ROGERS ADDED GRIDS 96 AND 97 FOR ETA MODEL IN FI634. C 95-04-26 R.E.JONES FI636 CORECTION FOR 2ND ORDER COMPLEX C UNPACKING. R C 95-05-19 R.E.JONES ADDED GRID 215, 20 KM AWIPS GRID C 95-07-06 R.E.JONES ADDED GAUSSIAN T62, T126 GRID 98, 126 C 95-10-19 R.E.JONES ADDED GRID 216, 45 KM ETA AWIPS ALASKA GRID C 95-10-31 IREDELL REMOVED SAVES AND PRINTS C 96-03-07 R.E.JONES CONTINUE UNPACK WITH KRET ERROR 9 IN FI631. C 96-08-19 R.E.JONES ADDED MERCATOR GRIDS 8 AND 53, AND GRID 196 C 97-02-12 W BOSTELMAN CORRECTS ECMWF US GRID 2 PROCESSING C 98-06-17 IREDELL REMOVED ALTERNATE RETURN IN FI637 C 98-08-31 IREDELL ELIMINATED NEED FOR MXSIZE C 98-09-02 Gilbert Corrected error in map size for U.S. Grid 92 C 98-09-08 BALDWIN ADD DATA REP TYPE [KGDS(1)] 203 C 01-03-08 ROGERS CHANGED ETA GRIDS 90-97, ADDED ETA GRIDS C 194, 198. ADDED AWIPS GRIDS 241,242,243, C 245, 246, 247, 248, AND 250 C 01-03-19 VUONG ADDED AWIPS GRIDS 238,239,240, AND 244 C 01-05-03 ROGERS ADDED GRID 249 (12KM FOR ALASKA) C 01-10-10 ROGERS REDEFINED GRID 218 FOR 12 KM ETA C REDEFINED GRID 192 FOR NEW 32-KM ETA GRID C 02-03-27 VUONG ADDED RSAS GRID 88 AND AWIPS GRIDS 219, 220, C 223, 224, 225, 226, 227, 228, 229, 230, 231, C 232, 233, 234, 235, 251, AND 252 C 02-08-06 ROGERS REDEFINED GRIDS 90-93,97,194,245-250 FOR THE C 8KM HI-RES-WINDOW MODEL AND ADD AWIPS GRID 253 C 2003-06-30 GILBERT SET NEW VALUES IN ARRAY KPTR TO PASS BACK ADDITIONAL C PACKING INFO. C KPTR(19) - BINARY SCALE FACTOR C KPTR(20) - NUM BITS USED TO PACK EACH DATUM C 2003-06-30 GILBERT ADDED GRIDS 145 and 146 for CMAQ C and GRID 175 for AWIPS over GUAM. C 2003-07-08 VUONG ADDED GRIDS 110, 127, 171, 172 AND MODIFIED GRID 170 C 2004-09-02 VUONG ADDED AWIPS GRIDS 147, 148, 173 AND 254 C 2005-01-04 COOKE ADDED AWIPS GRIDS 160 AND 161 C 2005-03-03 VUONG MOVED GRID 170 TO GRID 174 AND ADD GRID 170 C 2005-03-21 VUONG ADDED AWIPS GRIDS 130 C 2005-10-11 VUONG ADDED AWIPS GRID 163 C 2006-12-12 VUONG ADDED AWIPS GRID 120 C C USAGE: CALL W3FI63(MSGA,KPDS,KGDS,KBMS,DATA,KPTR,KRET) C INPUT ARGUMENT LIST: C MSGA - GRIB FIELD - "GRIB" THRU "7777" CHAR*1 C (MESSAGE CAN BE PRECEDED BY JUNK CHARS) C C OUTPUT ARGUMENT LIST: C DATA - ARRAY CONTAINING DATA ELEMENTS C KPDS - ARRAY CONTAINING PDS ELEMENTS. (EDITION 1) C (1) - ID OF CENTER C (2) - GENERATING PROCESS ID NUMBER C (3) - GRID DEFINITION C (4) - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8) C (5) - INDICATOR OF PARAMETER C (6) - TYPE OF LEVEL C (7) - HEIGHT/PRESSURE , ETC OF LEVEL C (8) - YEAR INCLUDING (CENTURY-1) C (9) - MONTH OF YEAR C (10) - DAY OF MONTH C (11) - HOUR OF DAY C (12) - MINUTE OF HOUR C (13) - INDICATOR OF FORECAST TIME UNIT C (14) - TIME RANGE 1 C (15) - TIME RANGE 2 C (16) - TIME RANGE FLAG C (17) - NUMBER INCLUDED IN AVERAGE C (18) - VERSION NR OF GRIB SPECIFICATION C (19) - VERSION NR OF PARAMETER TABLE C (20) - NR MISSING FROM AVERAGE/ACCUMULATION C (21) - CENTURY OF REFERENCE TIME OF DATA C (22) - UNITS DECIMAL SCALE FACTOR C (23) - SUBCENTER NUMBER C (24) - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS C 128 IF FORECAST FIELD ERROR C 64 IF BIAS CORRECTED FCST FIELD C 32 IF SMOOTHED FIELD C WARNING: CAN BE COMBINATION OF MORE THAN 1 C (25) - PDS BYTE 30, NOT USED C (26-35) - RESERVED C (36-N) - CONSECUTIVE BYTES EXTRACTED FROM PROGRAM C DEFINITION SECTION (PDS) OF GRIB MESSAGE C KGDS - ARRAY CONTAINING GDS ELEMENTS. C (1) - DATA REPRESENTATION TYPE C (19) - NUMBER OF VERTICAL COORDINATE PARAMETERS C (20) - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE C PARAMETERS C OR C OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS C IN EACH ROW C OR C 255 IF NEITHER ARE PRESENT C (21) - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID C (22) - NUMBER OF WORDS IN EACH ROW C LATITUDE/LONGITUDE GRIDS C (2) - N(I) NR POINTS ON LATITUDE CIRCLE C (3) - N(J) NR POINTS ON LONGITUDE MERIDIAN C (4) - LA(1) LATITUDE OF ORIGIN C (5) - LO(1) LONGITUDE OF ORIGIN C (6) - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17) C (7) - LA(2) LATITUDE OF EXTREME POINT C (8) - LO(2) LONGITUDE OF EXTREME POINT C (9) - DI LONGITUDINAL DIRECTION OF INCREMENT C (10) - DJ LATITUDINAL DIRECTION INCREMENT C (11) - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28) C GAUSSIAN GRIDS C (2) - N(I) NR POINTS ON LATITUDE CIRCLE C (3) - N(J) NR POINTS ON LONGITUDE MERIDIAN C (4) - LA(1) LATITUDE OF ORIGIN C (5) - LO(1) LONGITUDE OF ORIGIN C (6) - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17) C (7) - LA(2) LATITUDE OF EXTREME POINT C (8) - LO(2) LONGITUDE OF EXTREME POINT C (9) - DI LONGITUDINAL DIRECTION OF INCREMENT C (10) - N - NR OF CIRCLES POLE TO EQUATOR C (11) - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28) C (12) - NV - NR OF VERT COORD PARAMETERS C (13) - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS C OR C PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN C EACH ROW (IF NO VERT COORD PARAMETERS C ARE PRESENT C OR C 255 IF NEITHER ARE PRESENT C POLAR STEREOGRAPHIC GRIDS C (2) - N(I) NR POINTS ALONG LAT CIRCLE C (3) - N(J) NR POINTS ALONG LON CIRCLE C (4) - LA(1) LATITUDE OF ORIGIN C (5) - LO(1) LONGITUDE OF ORIGIN C (6) - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17) C (7) - LOV GRID ORIENTATION C (8) - DX - X DIRECTION INCREMENT C (9) - DY - Y DIRECTION INCREMENT C (10) - PROJECTION CENTER FLAG C (11) - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28) C SPHERICAL HARMONIC COEFFICIENTS C (2) - J PENTAGONAL RESOLUTION PARAMETER C (3) - K " " " C (4) - M " " " C (5) - REPRESENTATION TYPE C (6) - COEFFICIENT STORAGE MODE C MERCATOR GRIDS C (2) - N(I) NR POINTS ON LATITUDE CIRCLE C (3) - N(J) NR POINTS ON LONGITUDE MERIDIAN C (4) - LA(1) LATITUDE OF ORIGIN C (5) - LO(1) LONGITUDE OF ORIGIN C (6) - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17) C (7) - LA(2) LATITUDE OF LAST GRID POINT C (8) - LO(2) LONGITUDE OF LAST GRID POINT C (9) - LATIT - LATITUDE OF PROJECTION INTERSECTION C (10) - RESERVED C (11) - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28) C (12) - LONGITUDINAL DIR GRID LENGTH C (13) - LATITUDINAL DIR GRID LENGTH C LAMBERT CONFORMAL GRIDS C (2) - NX NR POINTS ALONG X-AXIS C (3) - NY NR POINTS ALONG Y-AXIS C (4) - LA1 LAT OF ORIGIN (LOWER LEFT) C (5) - LO1 LON OF ORIGIN (LOWER LEFT) C (6) - RESOLUTION (RIGHT ADJ COPY OF OCTET 17) C (7) - LOV - ORIENTATION OF GRID C (8) - DX - X-DIR INCREMENT C (9) - DY - Y-DIR INCREMENT C (10) - PROJECTION CENTER FLAG C (11) - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28) C (12) - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER C (13) - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER C STAGGERED ARAKAWA ROTATED LAT/LON GRIDS (TYPE 203) C (2) - N(I) NR POINTS ON LATITUDE CIRCLE C (3) - N(J) NR POINTS ON LONGITUDE MERIDIAN C (4) - LA(1) LATITUDE OF ORIGIN C (5) - LO(1) LONGITUDE OF ORIGIN C (6) - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17) C (7) - LA(2) LATITUDE OF CENTER C (8) - LO(2) LONGITUDE OF CENTER C (9) - DI LONGITUDINAL DIRECTION OF INCREMENT C (10) - DJ LATITUDINAL DIRECTION INCREMENT C (11) - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28) C KBMS - BITMAP DESCRIBING LOCATION OF OUTPUT ELEMENTS. C (ALWAYS CONSTRUCTED) C KPTR - ARRAY CONTAINING STORAGE FOR FOLLOWING PARAMETERS C (1) - TOTAL LENGTH OF GRIB MESSAGE C (2) - LENGTH OF INDICATOR (SECTION 0) C (3) - LENGTH OF PDS (SECTION 1) C (4) - LENGTH OF GDS (SECTION 2) C (5) - LENGTH OF BMS (SECTION 3) C (6) - LENGTH OF BDS (SECTION 4) C (7) - VALUE OF CURRENT BYTE C (8) - BIT POINTER C (9) - GRIB START BIT NR C (10) - GRIB/GRID ELEMENT COUNT C (11) - NR UNUSED BITS AT END OF SECTION 3 C (12) - BIT MAP FLAG (COPY OF BMS OCTETS 5,6) C (13) - NR UNUSED BITS AT END OF SECTION 2 C (14) - BDS FLAGS (RIGHT ADJ COPY OF OCTET 4) C (15) - NR UNUSED BITS AT END OF SECTION 4 C (16) - RESERVED C (17) - RESERVED C (18) - RESERVED C (19) - BINARY SCALE FACTOR C (20) - NUM BITS USED TO PACK EACH DATUM C KRET - FLAG INDICATING QUALITY OF COMPLETION C C REMARKS: WHEN DECODING IS COMPLETED, DATA AT EACH GRID POINT HAS BEEN C RETURNED IN THE UNITS SPECIFIED IN THE GRIB MANUAL. C C VALUES FOR RETURN FLAG (KRET) C KRET = 0 - NORMAL RETURN, NO ERRORS C = 1 - 'GRIB' NOT FOUND IN FIRST 100 CHARS C = 2 - '7777' NOT IN CORRECT LOCATION C = 3 - UNPACKED FIELD IS LARGER THAN 260000 C = 4 - GDS/ GRID NOT ONE OF CURRENTLY ACCEPTED VALUES C = 5 - GRID NOT CURRENTLY AVAIL FOR CENTER INDICATED C = 8 - TEMP GDS INDICATED, BUT GDS FLAG IS OFF C = 9 - GDS INDICATES SIZE MISMATCH WITH STD GRID C =10 - INCORRECT CENTER INDICATOR C =11 - BINARY DATA SECTION (BDS) NOT COMPLETELY PROCESSED. C PROGRAM IS NOT SET TO PROCESS FLAG COMBINATIONS C SHOWN IN OCTETS 4 AND 14. C =12 - BINARY DATA SECTION (BDS) NOT COMPLETELY PROCESSED. C PROGRAM IS NOT SET TO PROCESS FLAG COMBINATIONS C C SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT. C C ATTRIBUTES: C LANGUAGE: FORTRAN 90 C C$$$ C 4 AUG 1988 C W3FI63 C C C GRIB UNPACKING ROUTINE C C C THIS ROUTINE WILL UNPACK A 'GRIB' FIELD TO THE EXACT GRID C TYPE SPECIFIED IN THE MESSAGE, RETURN A BIT MAP AND MAKE THE C VALUES OF THE PRODUCT DEFINITION SEC (PDS) AND THE GRID C DESCRIPTION SEC (GDS) AVAILABLE IN RETURN ARRAYS. C SEE "GRIB - THE WMO FORMAT FOR THE STORAGE OF WEATHER PRODUCT C INFORMATION AND THE EXCHANGE OF WEATHER PRODUCT MESSAGES IN C GRIDDED BINARY FORM" DATED JULY 1, 1988 BY JOHN D. STACKPOLE C DOC, NOAA, NWS, NATIONAL METEOROLOGICAL CENTER. C C THE CALL TO THE GRIB UNPACKING ROUTINE IS AS FOLLOWS: C C CALL W3FI63(MSGA,KPDS,KGDS,LBMS,DATA,KPTR,KRET) C C INPUT: C C MSGA = CONTAINS THE GRIB MESSAGE TO BE UNPACKED. CHARACTERS C "GRIB" MAY BEGIN ANYWHERE WITHIN FIRST 100 BYTES. C C OUTPUT: C C KPDS(100) INTEGER*4 C ARRAY TO CONTAIN THE ELEMENTS OF THE PRODUCT C DEFINITION SEC . C (VERSION 1) C KPDS(1) - ID OF CENTER C KPDS(2) - MODEL IDENTIFICATION (SEE "GRIB" TABLE 1) C KPDS(3) - GRID IDENTIFICATION (SEE "GRIB" TABLE 2) C KPDS(4) - GDS/BMS FLAG C BIT DEFINITION C 25 0 - GDS OMITTED C 1 - GDS INCLUDED C 26 0 - BMS OMITTED C 1 - BMS INCLUDED C NOTE:- LEFTMOST BIT = 1, C RIGHTMOST BIT = 32 C KPDS(5) - INDICATOR OF PARAMETER (SEE "GRIB" TABLE 5) C KPDS(6) - TYPE OF LEVEL (SEE "GRIB" TABLES 6 & 7) C KPDS(7) - HEIGHT,PRESSURE,ETC OF LEVEL C KPDS(8) - YEAR INCLUDING CENTURY C KPDS(9) - MONTH OF YEAR C KPDS(10) - DAY OF MONTH C KPDS(11) - HOUR OF DAY C KPDS(12) - MINUTE OF HOUR C KPDS(13) - INDICATOR OF FORECAST TIME UNIT (SEE "GRIB" C TABLE 8) C KPDS(14) - TIME 1 (SEE "GRIB" TABLE 8A) C KPDS(15) - TIME 2 (SEE "GRIB" TABLE 8A) C KPDS(16) - TIME RANGE INDICATOR (SEE "GRIB" TABLE 8A) C KPDS(17) - NUMBER INCLUDED IN AVERAGE C KPDS(18) - EDITION NR OF GRIB SPECIFICATION C KPDS(19) - VERSION NR OF PARAMETER TABLE C C KGDS(13) INTEGER*4 C ARRAY CONTAINING GDS ELEMENTS. C C KGDS(1) - DATA REPRESENTATION TYPE C C LATITUDE/LONGITUDE GRIDS (SEE "GRIB" TABLE 10) C KGDS(2) - N(I) NUMBER OF POINTS ON LATITUDE C CIRCLE C KGDS(3) - N(J) NUMBER OF POINTS ON LONGITUDE C CIRCLE C KGDS(4) - LA(1) LATITUDE OF ORIGIN C KGDS(5) - LO(1) LONGITUDE OF ORIGIN C KGDS(6) - RESOLUTION FLAG C BIT MEANING C 25 0 - DIRECTION INCREMENTS NOT C GIVEN C 1 - DIRECTION INCREMENTS GIVEN C KGDS(7) - LA(2) LATITUDE OF EXTREME POINT C KGDS(8) - LO(2) LONGITUDE OF EXTREME POINT C KGDS(9) - DI LONGITUDINAL DIRECTION INCREMENT C KGDS(10) - REGULAR LAT/LON GRID C DJ - LATITUDINAL DIRECTION C INCREMENT C GAUSSIAN GRID C N - NUMBER OF LATITUDE CIRCLES C BETWEEN A POLE AND THE EQUATOR C KGDS(11) - SCANNING MODE FLAG C BIT MEANING C 25 0 - POINTS ALONG A LATITUDE C SCAN FROM WEST TO EAST C 1 - POINTS ALONG A LATITUDE C SCAN FROM EAST TO WEST C 26 0 - POINTS ALONG A MERIDIAN C SCAN FROM NORTH TO SOUTH C 1 - POINTS ALONG A MERIDIAN C SCAN FROM SOUTH TO NORTH C 27 0 - POINTS SCAN FIRST ALONG C CIRCLES OF LATITUDE, THEN C ALONG MERIDIANS C (FORTRAN: (I,J)) C 1 - POINTS SCAN FIRST ALONG C MERIDIANS THEN ALONG C CIRCLES OF LATITUDE C (FORTRAN: (J,I)) C C POLAR STEREOGRAPHIC GRIDS (SEE GRIB TABLE 12) C KGDS(2) - N(I) NR POINTS ALONG LAT CIRCLE C KGDS(3) - N(J) NR POINTS ALONG LON CIRCLE C KGDS(4) - LA(1) LATITUDE OF ORIGIN C KGDS(5) - LO(1) LONGITUDE OF ORIGIN C KGDS(6) - RESERVED C KGDS(7) - LOV GRID ORIENTATION C KGDS(8) - DX - X DIRECTION INCREMENT C KGDS(9) - DY - Y DIRECTION INCREMENT C KGDS(10) - PROJECTION CENTER FLAG C KGDS(11) - SCANNING MODE C C SPHERICAL HARMONIC COEFFICIENTS (SEE "GRIB" TABLE 14) C KGDS(2) - J PENTAGONAL RESOLUTION PARAMETER C KGDS(3) - K PENTAGONAL RESOLUTION PARAMETER C KGDS(4) - M PENTAGONAL RESOLUTION PARAMETER C KGDS(5) - REPRESENTATION TYPE C KGDS(6) - COEFFICIENT STORAGE MODE C C MERCATOR GRIDS C KGDS(2) - N(I) NR POINTS ON LATITUDE CIRCLE C KGDS(3) - N(J) NR POINTS ON LONGITUDE MERIDIAN C KGDS(4) - LA(1) LATITUDE OF ORIGIN C KGDS(5) - LO(1) LONGITUDE OF ORIGIN C KGDS(6) - RESOLUTION FLAG C KGDS(7) - LA(2) LATITUDE OF LAST GRID POINT C KGDS(8) - LO(2) LONGITUDE OF LAST GRID POINT C KGDS(9) - LATIN - LATITUDE OF PROJECTION INTERSECTION C KGDS(10) - RESERVED C KGDS(11) - SCANNING MODE FLAG C KGDS(12) - LONGITUDINAL DIR GRID LENGTH C KGDS(13) - LATITUDINAL DIR GRID LENGTH C LAMBERT CONFORMAL GRIDS C KGDS(2) - NX NR POINTS ALONG X-AXIS C KGDS(3) - NY NR POINTS ALONG Y-AXIS C KGDS(4) - LA1 LAT OF ORIGIN (LOWER LEFT) C KGDS(5) - LO1 LON OF ORIGIN (LOWER LEFT) C KGDS(6) - RESOLUTION (RIGHT ADJ COPY OF OCTET 17) C KGDS(7) - LOV - ORIENTATION OF GRID C KGDS(8) - DX - X-DIR INCREMENT C KGDS(9) - DY - Y-DIR INCREMENT C KGDS(10) - PROJECTION CENTER FLAG C KGDS(11) - SCANNING MODE FLAG C KGDS(12) - LATIN 1 - FIRST LAT FROM POLE OF C SECANT CONE INTERSECTION C KGDS(13) - LATIN 2 - SECOND LAT FROM POLE OF C SECANT CONE INTERSECTION C C LBMS(*) LOGICAL C ARRAY TO CONTAIN THE BIT MAP DESCRIBING THE C PLACEMENT OF DATA IN THE OUTPUT ARRAY. IF A C BIT MAP IS NOT INCLUDED IN THE SOURCE MESSAGE, C ONE WILL BE GENERATED AUTOMATICALLY BY THE C UNPACKING ROUTINE. C C C DATA(*) REAL*4 C THIS ARRAY WILL CONTAIN THE UNPACKED DATA POINTS. C C NOTE:- 65160 IS MAXIMUN FIELD SIZE ALLOWABLE C C KPTR(10) INTEGER*4 C ARRAY CONTAINING STORAGE FOR THE FOLLOWING C PARAMETERS. C C (1) - UNUSED C (2) - UNUSED C (3) - LENGTH OF PDS (IN BYTES) C (4) - LENGTH OF GDS (IN BYTES) C (5) - LENGTH OF BMS (IN BYTES) C (6) - LENGTH OF BDS (IN BYTES) C (7) - USED BY UNPACKING ROUTINE C (8) - NUMBER OF DATA POINTS FOR GRID C (9) - "GRIB" CHARACTERS START IN BYTE NUMBER C (10) - USED BY UNPACKING ROUTINE C C C KRET INTEGER*4 C THIS VARIABLE WILL CONTAIN THE RETURN INDICATOR. C C 0 - NO ERRORS DETECTED. C C 1 - 'GRIB' NOT FOUND IN FIRST 100 C CHARACTERS. C C 2 - '7777' NOT FOUND, EITHER MISSING OR C TOTAL OF SEC COUNTS OF INDIVIDUAL C SECTIONS IS INCORRECT. C C 3 - UNPACKED FIELD IS LARGER THAN 65160. C C 4 - IN GDS, DATA REPRESENTATION TYPE C NOT ONE OF THE CURRENTLY ACCEPTABLE C VALUES. SEE "GRIB" TABLE 9. VALUE C OF INCORRECT TYPE RETURNED IN KGDS(1). C C 5 - GRID INDICATED IN KPDS(3) IS NOT C AVAILABLE FOR THE CENTER INDICATED IN C KPDS(1) AND NO GDS SENT. C C 7 - EDITION INDICATED IN KPDS(18) HAS NOT C YET BEEN INCLUDED IN THE DECODER. C C 8 - GRID IDENTIFICATION = 255 (NOT STANDARD C GRID) BUT FLAG INDICATING PRESENCE OF C GDS IS TURNED OFF. NO METHOD OF C GENERATING PROPER GRID. C C 9 - PRODUCT OF KGDS(2) AND KGDS(3) DOES NOT C MATCH STANDARD NUMBER OF POINTS FOR THIS C GRID (FOR OTHER THAN SPECTRALS). THIS C WILL OCCUR ONLY IF THE GRID. C IDENTIFICATION, KPDS(3), AND A C TRANSMITTED GDS ARE INCONSISTENT. C C 10 - CENTER INDICATOR WAS NOT ONE INDICATED C IN "GRIB" TABLE 1. PLEASE CONTACT AD C PRODUCTION MANAGEMENT BRANCH (W/NMC42) C IF THIS ERROR IS ENCOUNTERED. C C 11 - BINARY DATA SECTION (BDS) NOT COMPLETELY C PROCESSED. PROGRAM IS NOT SET TO PROCESS C FLAG COMBINATIONS AS SHOWN IN C OCTETS 4 AND 14. C C C LIST OF TEXT MESSAGES FROM CODE C C C W3FI63/FI632 C C 'HAVE ENCOUNTERED A NEW GRID FOR NMC, PLEASE NOTIFY C AUTOMATION DIVISION, PRODUCTION MANAGEMENT BRANCH C (W/NMC42)' C C 'HAVE ENCOUNTERED A NEW GRID FOR ECMWF, PLEASE NOTIFY C AUTOMATION DIVISION, PRODUCTION MANAGEMENT BRANCH C (W/NMC42)' C C 'HAVE ENCOUNTERED A NEW GRID FOR U.K. METEOROLOGICAL C OFFICE, BRACKNELL. PLEASE NOTIFY AUTOMATION DIVISION, C PRODUCTION MANAGEMENT BRANCH (W/NMC42)' C C 'HAVE ENCOUNTERED A NEW GRID FOR FNOC, PLEASE NOTIFY C AUTOMATION DIVISION, PRODUCTION MANAGEMENT BRANCH C (W/NMC42)' C C C W3FI63/FI633 C C 'POLAR STEREO PROCESSING NOT AVAILABLE' * C C W3FI63/FI634 C C 'WARNING - BIT MAP MAY NOT BE ASSOCIATED WITH SPHERICAL C COEFFICIENTS' C C C W3FI63/FI637 C C 'NO CURRENT LISTING OF FNOC GRIDS' * C C C * WILL BE AVAILABLE IN NEXT UPDATE C *************************************************************** C C INCOMING MESSAGE HOLDER CHARACTER*1 MSGA(*) C BIT MAP LOGICAL*1 KBMS(*) C C ELEMENTS OF PRODUCT DESCRIPTION SEC (PDS) INTEGER KPDS(*) C ELEMENTS OF GRID DESCRIPTION SEC (PDS) INTEGER KGDS(*) C C CONTAINER FOR GRIB GRID REAL DATA(*) C C ARRAY OF POINTERS AND COUNTERS INTEGER KPTR(*) C C ***************************************************************** INTEGER JSGN,JEXP,IFR,NPTS REAL REALKK,FVAL1,FDIFF1 C ***************************************************************** C 1.0 LOCATE BEGINNING OF 'GRIB' MESSAGE C FIND 'GRIB' CHARACTERS C 2.0 USE COUNTS IN EACH DESCRIPTION SEC TO DETERMINE C IF '7777' IS IN PROPER PLACE. C 3.0 PARSE PRODUCT DEFINITION SECTION. C 4.0 PARSE GRID DESCRIPTION SEC (IF INCLUDED) C 5.0 PARSE BIT MAP SEC (IF INCLUDED) C 6.0 USING INFORMATION FROM PRODUCT DEFINITION, GRID C DESCRIPTION, AND BIT MAP SECTIONS.. EXTRACT C DATA AND PLACE INTO PROPER ARRAY. C ******************************************************************* C C MAIN DRIVER C C ******************************************************************* SAVE KPTR(10) = 0 C SEE IF PROPER 'GRIB' KEY EXISTS, THEN C USING SEC COUNTS, DETERMINE IF '7777' C IS IN THE PROPER LOCATION C write(*,*) '>> FI631' CALL FI631(MSGA,KPTR,KPDS,KRET) write(*,*) '<< FI631 kret ', kret IF(KRET.NE.0) RETURN PRINT *,'FI631 KPTR',(KPTR(I),I=1,16) C C PARSE PARAMETERS FROM PRODUCT DESCRIPTION SECTION C CALL FI632(MSGA,KPTR,KPDS,KRET) write(*,*) '<< FI632 kret ', kret IF(KRET.NE.0) RETURN C PRINT *,'FI632 KPTR',(KPTR(I),I=1,16) C C IF AVAILABLE, EXTRACT NEW GRID DESCRIPTION C IF (IAND(KPDS(4),128).NE.0) THEN CALL FI633(MSGA,KPTR,KGDS,KRET) write(*,*) '<< FI633 kret ', kret IF(KRET.NE.0) RETURN C PRINT *,'FI633 KPTR',(KPTR(I),I=1,16) END IF C C EXTRACT OR GENERATE BIT MAP C write(*,*) '>>FI634' KRET = 0 CALL FI634(MSGA,KPTR,KPDS,KGDS,KBMS,KRET) write(*,*) '<>FI635' CALL FI635(MSGA,KPTR,KPDS,KGDS,KBMS,DATA,KRET) write(*,*) '<>fi637' CALL FI637(J,KPDS,KGDS,KRET) write(*,*) '<>fi637' CALL FI637(J,KPDS,KGDS,KRET) write(*,*) '<>fi637' CALL FI637(J,KPDS,KGDS,KRET) write(*,*) '<>fi637' CALL FI637(J,KPDS,KGDS,KRET) write(*,*) '<