1 C-----------------------------------------------------------------------
2 SUBROUTINE GETGBEP
(LUGB
,LUGI
,JG
,J
,JPDS
,JGDS
,JENS
,
3 & KG
,K
,KPDS
,KGDS
,KENS
,G
,IRET
)
4 C$$$ SUBPROGRAM DOCUMENTATION BLOCK
6 C SUBPROGRAM: GETGBEP FINDS A GRIB MESSAGE
7 C PRGMMR: IREDELL ORG: W/NMC23 DATE: 94-04-01
9 C ABSTRACT: FIND A GRIB MESSAGE.
10 C READ A GRIB INDEX FILE (OR OPTIONALLY THE GRIB FILE ITSELF)
11 C TO GET THE INDEX BUFFER (I.E. TABLE OF CONTENTS) FOR THE GRIB FILE.
12 C (THE INDEX BUFFER IS SAVED FOR USE BY FUTURE PROSPECTIVE CALLS.)
13 C FIND IN THE INDEX BUFFER A REFERENCE TO THE GRIB MESSAGE REQUESTED.
14 C THE GRIB MESSAGE REQUEST SPECIFIES THE NUMBER OF MESSAGES TO SKIP
15 C AND THE UNPACKED PDS AND GDS PARAMETERS. (A REQUESTED PARAMETER
16 C OF -1 MEANS TO ALLOW ANY VALUE OF THIS PARAMETER TO BE FOUND.)
17 C IF THE REQUESTED GRIB MESSAGE IS FOUND, THEN IT IS READ FROM THE
18 C GRIB FILE. ITS MESSAGE NUMBER IS RETURNED ALONG WITH THE UNPACKED
19 C PDS AND GDS PARAMETERS AND THE PACKED GRIB MESSAGE. IF THE GRIB
20 C MESSAGE IS NOT FOUND, THEN THE RETURN CODE WILL BE NONZERO.
22 C PROGRAM HISTORY LOG:
24 C 95-10-31 IREDELL MODULARIZED PORTIONS OF CODE INTO SUBPROGRAMS
25 C AND ALLOWED FOR UNSPECIFIED INDEX FILE
27 C USAGE: CALL GETGBEP(LUGB,LUGI,JG,J,JPDS,JGDS,JENS,
28 C & KG,K,KPDS,KGDS,KENS,G,IRET)
30 C LUGB INTEGER UNIT OF THE UNBLOCKED GRIB DATA FILE
31 C LUGI INTEGER UNIT OF THE UNBLOCKED GRIB INDEX FILE
32 C (=0 TO GET INDEX BUFFER FROM THE GRIB FILE)
33 C JG INTEGER MAXIMUM NUMBER OF BYTES IN THE GRIB MESSAGE
34 C J INTEGER NUMBER OF MESSAGES TO SKIP
35 C (=0 TO SEARCH FROM BEGINNING)
36 C (<0 TO READ INDEX BUFFER AND SKIP -1-J MESSAGES)
37 C JPDS INTEGER (200) PDS PARAMETERS FOR WHICH TO SEARCH
40 C (2) - GENERATING PROCESS ID NUMBER
41 C (3) - GRID DEFINITION
42 C (4) - GDS/BMS FLAG (RIGHT ADJ COPY OF OCTET 8)
43 C (5) - INDICATOR OF PARAMETER
45 C (7) - HEIGHT/PRESSURE , ETC OF LEVEL
46 C (8) - YEAR INCLUDING (CENTURY-1)
50 C (12) - MINUTE OF HOUR
51 C (13) - INDICATOR OF FORECAST TIME UNIT
54 C (16) - TIME RANGE FLAG
55 C (17) - NUMBER INCLUDED IN AVERAGE
56 C (18) - VERSION NR OF GRIB SPECIFICATION
57 C (19) - VERSION NR OF PARAMETER TABLE
58 C (20) - NR MISSING FROM AVERAGE/ACCUMULATION
59 C (21) - CENTURY OF REFERENCE TIME OF DATA
60 C (22) - UNITS DECIMAL SCALE FACTOR
61 C (23) - SUBCENTER NUMBER
62 C (24) - PDS BYTE 29, FOR NMC ENSEMBLE PRODUCTS
63 C 128 IF FORECAST FIELD ERROR
64 C 64 IF BIAS CORRECTED FCST FIELD
65 C 32 IF SMOOTHED FIELD
66 C WARNING: CAN BE COMBINATION OF MORE THAN 1
67 C (25) - PDS BYTE 30, NOT USED
68 C JGDS INTEGER (200) GDS PARAMETERS FOR WHICH TO SEARCH
69 C (ONLY SEARCHED IF JPDS(3)=255)
71 C (1) - DATA REPRESENTATION TYPE
72 C (19) - NUMBER OF VERTICAL COORDINATE PARAMETERS
73 C (20) - OCTET NUMBER OF THE LIST OF VERTICAL COORDINATE
76 C OCTET NUMBER OF THE LIST OF NUMBERS OF POINTS
79 C 255 IF NEITHER ARE PRESENT
80 C (21) - FOR GRIDS WITH PL, NUMBER OF POINTS IN GRID
81 C (22) - NUMBER OF WORDS IN EACH ROW
82 C LATITUDE/LONGITUDE GRIDS
83 C (2) - N(I) NR POINTS ON LATITUDE CIRCLE
84 C (3) - N(J) NR POINTS ON LONGITUDE MERIDIAN
85 C (4) - LA(1) LATITUDE OF ORIGIN
86 C (5) - LO(1) LONGITUDE OF ORIGIN
87 C (6) - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
88 C (7) - LA(2) LATITUDE OF EXTREME POINT
89 C (8) - LO(2) LONGITUDE OF EXTREME POINT
90 C (9) - DI LONGITUDINAL DIRECTION OF INCREMENT
91 C (10) - DJ LATITUDINAL DIRECTION INCREMENT
92 C (11) - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
94 C (2) - N(I) NR POINTS ON LATITUDE CIRCLE
95 C (3) - N(J) NR POINTS ON LONGITUDE MERIDIAN
96 C (4) - LA(1) LATITUDE OF ORIGIN
97 C (5) - LO(1) LONGITUDE OF ORIGIN
98 C (6) - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
99 C (7) - LA(2) LATITUDE OF EXTREME POINT
100 C (8) - LO(2) LONGITUDE OF EXTREME POINT
101 C (9) - DI LONGITUDINAL DIRECTION OF INCREMENT
102 C (10) - N - NR OF CIRCLES POLE TO EQUATOR
103 C (11) - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
104 C (12) - NV - NR OF VERT COORD PARAMETERS
105 C (13) - PV - OCTET NR OF LIST OF VERT COORD PARAMETERS
107 C PL - LOCATION OF THE LIST OF NUMBERS OF POINTS IN
108 C EACH ROW (IF NO VERT COORD PARAMETERS
111 C 255 IF NEITHER ARE PRESENT
112 C POLAR STEREOGRAPHIC GRIDS
113 C (2) - N(I) NR POINTS ALONG LAT CIRCLE
114 C (3) - N(J) NR POINTS ALONG LON CIRCLE
115 C (4) - LA(1) LATITUDE OF ORIGIN
116 C (5) - LO(1) LONGITUDE OF ORIGIN
117 C (6) - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
118 C (7) - LOV GRID ORIENTATION
119 C (8) - DX - X DIRECTION INCREMENT
120 C (9) - DY - Y DIRECTION INCREMENT
121 C (10) - PROJECTION CENTER FLAG
122 C (11) - SCANNING MODE (RIGHT ADJ COPY OF OCTET 28)
123 C SPHERICAL HARMONIC COEFFICIENTS
124 C (2) - J PENTAGONAL RESOLUTION PARAMETER
127 C (5) - REPRESENTATION TYPE
128 C (6) - COEFFICIENT STORAGE MODE
130 C (2) - N(I) NR POINTS ON LATITUDE CIRCLE
131 C (3) - N(J) NR POINTS ON LONGITUDE MERIDIAN
132 C (4) - LA(1) LATITUDE OF ORIGIN
133 C (5) - LO(1) LONGITUDE OF ORIGIN
134 C (6) - RESOLUTION FLAG (RIGHT ADJ COPY OF OCTET 17)
135 C (7) - LA(2) LATITUDE OF LAST GRID POINT
136 C (8) - LO(2) LONGITUDE OF LAST GRID POINT
137 C (9) - LATIT - LATITUDE OF PROJECTION INTERSECTION
139 C (11) - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
140 C (12) - LONGITUDINAL DIR GRID LENGTH
141 C (13) - LATITUDINAL DIR GRID LENGTH
142 C LAMBERT CONFORMAL GRIDS
143 C (2) - NX NR POINTS ALONG X-AXIS
144 C (3) - NY NR POINTS ALONG Y-AXIS
145 C (4) - LA1 LAT OF ORIGIN (LOWER LEFT)
146 C (5) - LO1 LON OF ORIGIN (LOWER LEFT)
147 C (6) - RESOLUTION (RIGHT ADJ COPY OF OCTET 17)
148 C (7) - LOV - ORIENTATION OF GRID
149 C (8) - DX - X-DIR INCREMENT
150 C (9) - DY - Y-DIR INCREMENT
151 C (10) - PROJECTION CENTER FLAG
152 C (11) - SCANNING MODE FLAG (RIGHT ADJ COPY OF OCTET 28)
153 C (12) - LATIN 1 - FIRST LAT FROM POLE OF SECANT CONE INTER
154 C (13) - LATIN 2 - SECOND LAT FROM POLE OF SECANT CONE INTER
155 C JENS INTEGER (200) ENSEMBLE PDS PARMS FOR WHICH TO SEARCH
156 C (ONLY SEARCHED IF JPDS(23)=2)
158 C (1) - APPLICATION IDENTIFIER
159 C (2) - ENSEMBLE TYPE
160 C (3) - ENSEMBLE IDENTIFIER
161 C (4) - PRODUCT IDENTIFIER
162 C (5) - SMOOTHING FLAG
164 C KG INTEGER NUMBER OF BYTES IN THE GRIB MESSAGE
165 C K INTEGER MESSAGE NUMBER UNPACKED
166 C (CAN BE SAME AS J IN CALLING PROGRAM
167 C IN ORDER TO FACILITATE MULTIPLE SEARCHES)
168 C KPDS INTEGER (200) UNPACKED PDS PARAMETERS
169 C KGDS INTEGER (200) UNPACKED GDS PARAMETERS
170 C KENS INTEGER (200) UNPACKED ENSEMBLE PDS PARMS
171 C G CHARACTER*1 (KG) GRIB MESSAGE
172 C IRET INTEGER RETURN CODE
174 C 96 ERROR READING INDEX FILE
175 C 97 ERROR READING GRIB FILE
176 C 98 NUMBER OF BYTES GREATER THAN JG
177 C 99 REQUEST NOT FOUND
179 C SUBPROGRAMS CALLED:
180 C GETGBEMP FIND GRIB MESSAGE
182 C REMARKS: IN ORDER TO UNPACK GRIB FROM A MULTIPROCESSING ENVIRONMENT
183 C WHERE EACH PROCESSOR IS ATTEMPTING TO READ FROM ITS OWN PAIR OF
184 C LOGICAL UNITS, ONE MUST DIRECTLY CALL SUBPROGRAM GETGBEMP AS BELOW,
185 C ALLOCATING A PRIVATE COPY OF CBUF, NLEN AND NNUM TO EACH PROCESSOR.
186 C DO NOT ENGAGE THE SAME LOGICAL UNIT FROM MORE THAN ONE PROCESSOR.
189 C LANGUAGE: FORTRAN 77
190 C MACHINE: CRAY, WORKSTATIONS
193 INTEGER JPDS
(200),JGDS
(200),JENS
(200)
194 INTEGER KPDS
(200),KGDS
(200),KENS
(200)
196 PARAMETER(MBUF
=256*1024)
198 SAVE CBUF
,NLEN
,NNUM
,MNUM
200 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
201 C DETERMINE WHETHER INDEX BUFFER NEEDS TO BE INITIALIZED
202 IF(LUGI
.GT
.0.AND
.(J
.LT
.0.OR
.LUGI
.NE
.LUX
)) THEN
205 ELSEIF
(LUGI
.LE
.0.AND
.(J
.LT
.0.OR
.LUGB
.NE
.LUX
)) THEN
211 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
212 C FIND AND UNPACK GRIB MESSAGE
213 CALL GETGBEMP
(LUGB
,LUGI
,JG
,JJ
,JPDS
,JGDS
,JENS
,
214 & MBUF
,CBUF
,NLEN
,NNUM
,MNUM
,
215 & KG
,K
,KPDS
,KGDS
,KENS
,G
,IRET
)
217 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -