NCEPLIBS-w3emc  2.9.2
w3nogds.f
Go to the documentation of this file.
1 C> @file
2 C . . . .
3 C> SUBPROGRAM: W3NOGDS MAKE A COMPLETE GRIB MESSAGE
4 C> PRGMMR: FARLEY ORG: NMC421 DATE:94-11-22
5 C>
6 C> ABSTRACT: MAKES A COMPLETE GRIB MESSAGE FROM A USER SUPPLIED
7 C> ARRAY OF FLOATING POINT OR INTEGER DATA. THE USER HAS THE
8 C> OPTION OF SUPPLYING THE PDS OR AN INTEGER ARRAY THAT WILL BE
9 C> USED TO CREATE A PDS (WITH W3FI68). THE USER MUST ALSO
10 C> SUPPLY OTHER NECESSARY INFO; SEE USAGE SECTION BELOW.
11 C>
12 C> PROGRAM HISTORY LOG:
13 C> 97-02-24 M. FARLEY MODIFIED W3FI72 - this routine allows for
14 C> NO GDS (errors in W3FI71 for GRIB grids
15 C> 21-26, 61-64 forced the need for this routine).
16 C> 98-06-24 Gilbert Added number of gridpoint values for grids
17 C> 61-64, needed when igflag=2 ( no gds ).
18 C> 98-12-21 Gilbert Replaced Function ICHAR with mova2i.
19 C>
20 C> USAGE: CALL W3NOGDS(ITYPE,FLD,IFLD,IBITL,
21 C> & IPFLAG,ID,PDS,
22 C> & IGFLAG,IGRID,IGDS,ICOMP,
23 C> & IBFLAG,IBMAP,IBLEN,IBDSFL,
24 C> & IBDSFL,
25 C> & NPTS,KBUF,ITOT,JERR)
26 C>
27 C> INPUT ARGUMENT LIST:
28 C> ITYPE - 0 = FLOATING POINT DATA SUPPLIED IN ARRAY 'FLD'
29 C> 1 = INTEGER DATA SUPPLIED IN ARRAY 'IFLD'
30 C> FLD - REAL ARRAY OF DATA (AT PROPER GRIDPOINTS) TO BE
31 C> CONVERTED TO GRIB FORMAT IF ITYPE=0.
32 C> SEE REMARKS #1 & 2.
33 C> IFLD - INTEGER ARRAY OF DATA (AT PROPER GRIDPOINTS) TO BE
34 C> CONVERTED TO GRIB FORMAT IF ITYPE=1.
35 C> SEE REMARKS #1 & 2.
36 C> IBITL - 0 = COMPUTER COMPUTES LENGTH FOR PACKING DATA FROM
37 C> POWER OF 2 (NUMBER OF BITS) BEST FIT OF DATA
38 C> USING 'VARIABLE' BIT PACKER W3FI58.
39 C> 8, 12, ETC. COMPUTER RESCALES DATA TO FIT INTO THAT
40 C> 'FIXED' NUMBER OF BITS USING W3FI59.
41 C> SEE REMARKS #3.
42 C>
43 C> IPFLAG - 0 = MAKE PDS FROM USER SUPPLIED ARRAY (ID)
44 C> 1 = USER SUPPLYING PDS
45 C> NOTE: IF PDS IS GREATER THAN 30, USE IPLFAG=1.
46 C> THE USER COULD CALL W3FI68 BEFORE HE CALLS
47 C> W3NOGDS. THIS WOULD MAKE THE FIRST 30 BYTES OF
48 C> THE PDS, USER THEN WOULD MAKE BYTES AFTER 30.
49 C> ID - INTEGER ARRAY OF VALUES THAT W3FI68 WILL USE
50 C> TO MAKE AN EDITION 1 PDS IF IPFLAG=0. (SEE THE
51 C> DOCBLOCK FOR W3FI68 FOR LAYOUT OF ARRAY)
52 C> PDS - CHARACTER ARRAY OF VALUES (VALID PDS SUPPLIED
53 C> BY USER) IF IPFLAG=1. LENGTH MAY EXCEED 28 BYTES
54 C> (CONTENTS OF BYTES BEYOND 28 ARE PASSED
55 C> THROUGH UNCHANGED).
56 C>
57 C> IGFLAG - 0 = MAKE GDS BASED ON 'IGRID' VALUE.
58 C> 1 = MAKE GDS FROM USER SUPPLIED INFO IN 'IGDS'
59 C> AND 'IGRID' VALUE.
60 C> SEE REMARKS #4.
61 C> 2 = NO GDS WILL BE INCLUDED...for international grids
62 C> *** THIS IS AN EXCEPTION TO REMARKS #4!!!!
63 C> IGRID - # = GRID IDENTIFICATION (TABLE B)
64 C> 255 = IF USER DEFINED GRID; IGDS MUST BE SUPPLIED
65 C> AND IGFLAG MUST =1.
66 C> IGDS - INTEGER ARRAY CONTAINING USER GDS INFO (SAME
67 C> FORMAT AS SUPPLIED BY W3FI71 - SEE DOCKBLOCK FOR
68 C> LAYOUT) IF IGFLAG=1.
69 C> ICOMP - RESOLUTION AND COMPONENT FLAG FOR BIT 5 OF GDS(17)
70 C> 0 = EARTH ORIENTED WINDS
71 C> 1 = GRID ORIENTED WINDS
72 C>
73 C> IBFLAG - 0 = MAKE BIT MAP FROM USER SUPPLIED DATA
74 C> # = BIT MAP PREDEFINED BY CENTER
75 C> SEE REMARKS #5.
76 C> IBMAP - INTEGER ARRAY CONTAINING BIT MAP
77 C> IBLEN - LENGTH OF BIT MAP WILL BE USED TO VERIFY LENGTH
78 C> OF FIELD (ERROR IF IT DOESN'T MATCH).
79 C>
80 C> IBDSFL - INTEGER ARRAY CONTAINING TABLE 11 FLAG INFO
81 C> BDS OCTET 4:
82 C> (1) 0 = GRID POINT DATA
83 C> 1 = SPHERICAL HARMONIC COEFFICIENTS
84 C> (2) 0 = SIMPLE PACKING
85 C> 1 = SECOND ORDER PACKING
86 C> (3) ... SAME VALUE AS 'ITYPE'
87 C> 0 = ORIGINAL DATA WERE FLOATING POINT VALUES
88 C> 1 = ORIGINAL DATA WERE INTEGER VALUES
89 C> (4) 0 = NO ADDITIONAL FLAGS AT OCTET 14
90 C> 1 = OCTET 14 CONTAINS FLAG BITS 5-12
91 C> (5) 0 = RESERVED - ALWAYS SET TO 0
92 C> BYTE 6 OPTION 1 NOT AVAILABLE (AS OF 5-16-93)
93 C> (6) 0 = SINGLE DATUM AT EACH GRID POINT
94 C> 1 = MATRIX OF VALUES AT EACH GRID POINT
95 C> BYTE 7 OPTION 0 WITH SECOND ORDER PACKING N/A (AS OF 5-16-93)
96 C> (7) 0 = NO SECONDARY BIT MAPS
97 C> 1 = SECONDARY BIT MAPS PRESENT
98 C> (8) 0 = SECOND ORDER VALUES HAVE CONSTANT WIDTH
99 C> 1 = SECOND ORDER VALUES HAVE DIFFERENT WIDTHS
100 C>
101 C> OUTPUT ARGUMENT LIST:
102 C> NPTS - NUMBER OF GRIDPOINTS IN ARRAY FLD OR IFLD
103 C> KBUF - ENTIRE GRIB MESSAGE ('GRIB' TO '7777')
104 C> EQUIVALENCE TO INTEGER ARRAY TO MAKE SURE IT
105 C> IS ON WORD BOUNARY.
106 C> ITOT - TOTAL LENGTH OF GRIB MESSAGE IN BYTES
107 C> JERR - = 0, COMPLETED MAKING GRIB FIELD WITHOUT ERROR
108 C> 1, IPFLAG NOT 0 OR 1
109 C> 2, IGFLAG NOT 0 OR 1 OR 2
110 C> 3, ERROR CONVERTING IEEE F.P. NUMBER TO IBM370 F.P.
111 C> 4, W3FI71 ERROR/IGRID NOT DEFINED
112 C> 5, W3FK74 ERROR/GRID REPRESENTATION TYPE NOT VALID
113 C> 6, GRID TOO LARGE FOR PACKER DIMENSION ARRAYS
114 C> SEE AUTOMATION DIVISION FOR REVISION!
115 C> 7, LENGTH OF BIT MAP NOT EQUAL TO SIZE OF FLD/IFLD
116 C> 8, W3FI73 ERROR, ALL VALUES IN IBMAP ARE ZERO
117 C>
118 C> OUTPUT FILES:
119 C> FT06F001 - STANDARD FORTRAN OUTPUT PRINT FILE
120 C>
121 C> SUBPROGRAMS CALLED:
122 C> LIBRARY:
123 C> W3LIB - W3FI58, W3FI59, W3FI68, W3FI71, W3FI73, W3FI74
124 C> W3FI75, W3FI76, W3FI01
125 C>
126 C> REMARKS:
127 C> 1) IF BIT MAP TO BE INCLUDED IN MESSAGE, NULL DATA SHOULD
128 C> BE INCLUDED IN FLD OR IFLD. THIS ROUTINE WILL TAKE CARE
129 C> OF 'DISCARDING' ANY NULL DATA BASED ON THE BIT MAP.
130 C> 2) UNITS MUST BE THOSE IN GRIB DOCUMENTATION: NMC O.N. 388
131 C> OR WMO PUBLICATION 306.
132 C> 3) IN EITHER CASE, INPUT NUMBERS WILL BE MULTIPLIED BY
133 C> '10 TO THE NTH' POWER FOUND IN ID(25) OR PDS(27-28),
134 C> THE D-SCALING FACTOR, PRIOR TO BINARY PACKING.
135 C> 4) ALL NMC PRODUCED GRIB FIELDS WILL HAVE A GRID DEFINITION
136 C> SECTION INCLUDED IN THE GRIB MESSAGE. ID(6) WILL BE
137 C> SET TO '1'.
138 C> - GDS WILL BE BUILT BASED ON GRID NUMBER (IGRID), UNLESS
139 C> IGFLAG=1 (USER SUPPLYING IGDS). USER MUST STILL SUPPLY
140 C> IGRID EVEN IF IGDS PROVIDED.
141 C> 5) IF BIT MAP USED THEN ID(7) OR PDS(8) MUST INDICATE THE
142 C> PRESENCE OF A BIT MAP.
143 C> 6) ARRAY KBUF SHOULD BE EQUIVALENCED TO AN INTEGER VALUE OR
144 C> ARRAY TO MAKE SURE IT IS ON A WORD BOUNDARY.
145 C> 7) SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
146 C>
147 C> ATTRIBUTES:
148 C> LANGUAGE: CRAY CFT77 FORTRAN
149 C> MACHINE: CRAY C916/256, Y-MP8/864, Y-MP EL92/256, J916/2048
150 C>
151  SUBROUTINE w3nogds(ITYPE,FLD,IFLD,IBITL,
152  & IPFLAG,ID,PDS,
153  & IGFLAG,IGRID,IGDS,ICOMP,
154  & IBFLAG,IBMAP,IBLEN,IBDSFL,
155  & NPTS,KBUF,ITOT,JERR)
156 C
157  parameter(mxsize=260000)
158 C ALLOW UP TO 24 BITS PER POINT
159  parameter(mxsiz3=mxsize*3)
160  parameter(mxsizb=mxsize/8+6)
161 C FOR 64 BIT CRAY
162  parameter(mxsizi=mxsiz3/8)
163 C FOR 32 BIT WORKSTATIONS AND HDS
164 C PARAMETER (MXSIZI=MXSIZ3/4)
165 C
166  REAL FLD(*)
167 C
168  INTEGER IBDSFL(*)
169  INTEGER IBMAP(*)
170  INTEGER ID(*)
171  INTEGER IFLD(*)
172  INTEGER IGDS(*)
173  INTEGER IPFLD(MXSIZI)
174  INTEGER IB(4)
175 C
176  CHARACTER * 1 BDS11(11)
177  CHARACTER * 1 KBUF(*)
178  CHARACTER * 1 PDS(*)
179  CHARACTER * 1 GDS(200)
180  CHARACTER * 1 BMS(MXSIZB)
181  CHARACTER * 1 PFLD(MXSIZ3)
182  CHARACTER * 1 SEVEN
183  CHARACTER * 1 ZERO
184 C
185  equivalence(ipfld(1),pfld(1))
186  equivalence(bds11(1),idummy)
187 C
188 C ASCII REP OF /'G', 'R', 'I', 'B'/
189 C
190  DATA ib / 71, 82, 73, 66/
191 C
192  ier = 0
193  iberr = 0
194  jerr = 0
195  igribl = 8
196  ipdsl = 0
197  lengds = 0
198  lenbms = 0
199  lenbds = 0
200  itoss = 0
201 C
202 C$ 1.0 PRODUCT DEFINITION SECTION(PDS).
203 C
204 C SET ID(6) TO 1 ...OR... MODIFY PDS(8) ...
205 C REGARDLESS OF USER SPECIFICATION...
206 C NMC GRIB FIELDS WILL ALWAYS HAVE A GDS
207 C ***** exception for international GRIB GRIDS 21-26, 61-64
208 C ***** which will NOT contain a GDS until subroutine W3FI71 is fixed!
209 C
210  IF (ipflag .EQ.0) THEN
211  id(6) = 1
212  if (igflag .eq. 2) then
213  id(6) = 0
214  endif
215  CALL w3fi68(id,pds)
216  ELSE IF (ipflag .EQ. 1) THEN
217  IF (iand(mova2i(pds(8)),64) .EQ. 64) THEN
218 C BOTH GDS AND BMS
219  pds(8) = char(192)
220  ELSE IF (mova2i(pds(8)) .EQ. 0) THEN
221 C GDS ONLY
222  pds(8) = char(128)
223  END IF
224  CONTINUE
225  ELSE
226 C PRINT *,' W3NOGDS ERROR, IPFLAG IS NOT 0 OR 1 IPFLAG = ',IPFLAG
227  jerr = 1
228  GO TO 900
229  END IF
230 C
231 C GET LENGTH OF PDS
232 C
233  ipdsl = mova2i(pds(1)) * 65536 + mova2i(pds(2)) * 256 +
234  & mova2i(pds(3))
235 C
236 C$ 2.0 GRID DEFINITION SECTION (GDS).
237 C
238 C IF IGFLAG=1 THEN USER IS SUPPLYING THE IGDS INFORMATION
239 C IF IGFLAG=2 THEN USER doesn't want a GDS and this section
240 C will be skipped...LENGDS=0
241 C
242  IF (igflag .EQ. 0) THEN
243  CALL w3fi71(igrid,igds,igerr)
244  IF (igerr .EQ. 1) THEN
245 C PRINT *,' W3FI71 ERROR, GRID TYPE NOT DEFINED...',IGRID
246  jerr = 4
247  GO TO 900
248  END IF
249  END IF
250  IF (igflag .EQ. 0 .OR. igflag .EQ.1) THEN
251  CALL w3fi74(igds,icomp,gds,lengds,npts,igerr)
252  IF (igerr .EQ. 1) THEN
253 C PRINT *,' W3FI74 ERROR, GRID REP TYPE NOT VALID...',IGDS(3)
254  jerr = 5
255  GO TO 900
256  ELSE
257  END IF
258  IF (npts .GT. mxsize) THEN
259 C PRINT *,' W3NOGDS ERROR, GRID TOO LARGE FOR PACKER ARRAY',
260 C & ' DIMENSIONS'
261  jerr = 6
262  GO TO 900
263  END IF
264  else if (igflag .eq. 2) then
265  lengds = 0
266  if (igrid.eq.21) then
267  npts=1333
268  else if (igrid.eq.22) then
269  npts=1333
270  else if (igrid.eq.23) then
271  npts=1333
272  else if (igrid.eq.24) then
273  npts=1333
274  else if (igrid.eq.25) then
275  npts=1297
276  else if (igrid.eq.26) then
277  npts=1297
278  else if ((igrid.ge.61).and.(igrid.le.64)) then
279  npts=4096
280  end if
281  ELSE
282 C PRINT *,' W3NOGDS ERROR, IGFLAG IS NOT 0-2 IGFLAG = ',IGFLAG
283  GO TO 900
284  END IF
285 C
286 C$ 3.0 BIT MAP SECTION (BMS).
287 C
288 C SET ITOSS=1 IF BITMAP BEING USED. W3FI75 WILL TOSS DATA
289 C PRIOR TO PACKING. LATER CODING WILL BE NEEDED WHEN THE
290 C 'PREDEFINED' GRIDS ARE FINALLY 'DEFINED'.
291 C
292  IF (mova2i(pds(8)) .EQ. 64 .OR.
293  & mova2i(pds(8)) .EQ. 192) THEN
294  itoss = 1
295  IF (ibflag .EQ. 0) THEN
296  IF (iblen .NE. npts) THEN
297 C PRINT *,' W3NOGDS ERROR, IBLEN .NE. NPTS = ',IBLEN,NPTS
298  jerr = 7
299  GO TO 900
300  END IF
301  CALL w3fi73(ibflag,ibmap,iblen,bms,lenbms,ier)
302  IF (ier .NE. 0) THEN
303 C PRINT *,' W3FI73 ERROR, IBMAP VALUES ARE ALL ZERO'
304  jerr = 8
305  GO TO 900
306  END IF
307  ELSE
308 C PRINT *,' BIT MAP PREDEFINED BY CENTER, IBFLAG = ',IBFLAG
309  END IF
310  END IF
311 C
312 C$ 4.0 BINARY DATA SECTION (BDS).
313 C
314 C$ 4.1 SCALE THE DATA WITH D-SCALE FROM PDS(27-28)
315 C
316  jscale = mova2i(pds(27)) * 256 + mova2i(pds(28))
317  IF (iand(jscale,32768).NE.0) THEN
318  jscale = - iand(jscale,32767)
319  END IF
320  scale = 10.0 ** jscale
321  IF (itype .EQ. 0) THEN
322  DO 410 i = 1,npts
323  fld(i) = fld(i) * scale
324  410 CONTINUE
325  ELSE
326  DO 411 i = 1,npts
327  ifld(i) = nint(float(ifld(i)) * scale)
328  411 CONTINUE
329  END IF
330 C
331 C$ 4.2 CALL W3FI75 TO PACK DATA AND MAKE BDS.
332 C
333  CALL w3fi75(ibitl,itype,itoss,fld,ifld,ibmap,ibdsfl,
334  & npts,bds11,ipfld,pfld,len,lenbds,iberr,pds,igds)
335  IF (iberr .EQ. 1) THEN
336  jerr = 3
337  GO TO 900
338  END IF
339 C 4.3 IF D-SCALE NOT 0, RESCALE INPUT FIELD TO
340 C ORIGINAL VALUE
341 C
342  IF (jscale.NE.0) THEN
343  dscale = 1.0 / scale
344  IF (itype.EQ.0) THEN
345  DO 412 i = 1, npts
346  fld(i) = fld(i) * dscale
347  412 CONTINUE
348  ELSE
349  DO 413 i = 1, npts
350  fld(i) = nint(float(ifld(i)) * dscale)
351  413 CONTINUE
352  END IF
353  END IF
354 C
355 C$ 5.0 OUTPUT SECTION.
356 C
357 C$ 5.1 ZERO OUT THE OUTPUT ARRAY KBUF.
358 C
359  zero = char(00)
360  itot = igribl + ipdsl + lengds + lenbms + lenbds + 4
361 C PRINT *,'IGRIBL =',IGRIBL
362 C PRINT *,'IPDSL =',IPDSL
363 C PRINT *,'LENGDS =',LENGDS
364 C PRINT *,'LENBMS =',LENBMS
365 C PRINT *,'LENBDS =',LENBDS
366 C PRINT *,'ITOT =',ITOT
367 C
368 C KBUF MUST BE ON A WORD BOUNDRY, EQUIVALENCE TO AN
369 C INTEGER ARRAY IN THE MAIN PROGRAM TO MAKE SURE IT IS.
370 C THIS IS BOTH COMPUTER AND COMPILER DEPENDENT, W3FI01
371 C IS USED TO FILL OUT IF THE COMPUTER IS A 64 BIT OR
372 C 32 BIT WORD SIZE COMPUTER. LW IS SET TO 4 FOR 32 BIT
373 C COMPUTER, 8 FOR 64 BIT COMPUTER.
374 C
375  CALL w3fi01(lw)
376  iwords = itot / lw
377  CALL xstore(kbuf,0,iwords)
378  IF (mod(itot,lw).NE.0) THEN
379  ibytes = itot - iwords * lw
380  DO 510 i = 1,ibytes
381  kbuf(iwords * lw + i) = zero
382  510 CONTINUE
383  END IF
384 C
385 C$ 5.2 MOVE SECTION 0 - 'IS' INTO KBUF (8 BYTES).
386 C
387  istart = 0
388  DO 520 i = 1,4
389  kbuf(i) = char(ib(i))
390  520 CONTINUE
391 C
392  kbuf(5) = char(mod(itot / 65536,256))
393  kbuf(6) = char(mod(itot / 256,256))
394  kbuf(7) = char(mod(itot ,256))
395  kbuf(8) = char(1)
396 C
397 C$ 5.3 MOVE SECTION 1 - 'PDS' INTO KBUF (28 BYTES).
398 C
399  istart = istart + igribl
400  IF (ipdsl.GT.0) THEN
401  CALL xmovex(kbuf(istart+1),pds,ipdsl)
402  ELSE
403 C PRINT *,'LENGTH OF PDS LESS OR EQUAL 0, IPDSL = ',IPDSL
404  END IF
405 C
406 C$ 5.4 MOVE SECTION 2 - 'GDS' INTO KBUF.
407 C
408  istart = istart + ipdsl
409  IF (lengds .GT. 0) THEN
410  CALL xmovex(kbuf(istart+1),gds,lengds)
411  END IF
412 C
413 C$ 5.5 MOVE SECTION 3 - 'BMS' INTO KBUF.
414 C
415  istart = istart + lengds
416  IF (lenbms .GT. 0) THEN
417  CALL xmovex(kbuf(istart+1),bms,lenbms)
418  END IF
419 C
420 C$ 5.6 MOVE SECTION 4 - 'BDS' INTO KBUF.
421 C
422 C$ MOVE THE FIRST 11 OCTETS OF THE BDS INTO KBUF.
423 C
424  istart = istart + lenbms
425  CALL xmovex(kbuf(istart+1),bds11,11)
426 C
427 C$ MOVE THE PACKED DATA INTO THE KBUF
428 C
429  istart = istart + 11
430  IF (len.GT.0) THEN
431  CALL xmovex(kbuf(istart+1),pfld,len)
432  END IF
433 C
434 C$ ADD '7777' TO END OFF KBUF
435 C NOTE THAT THESE 4 OCTETS NOT INCLUDED IN ACTUAL SIZE OF BDS.
436 C
437  seven = char(55)
438  istart = itot - 4
439  DO 562 i = 1,4
440  kbuf(istart+i) = seven
441  562 CONTINUE
442 C
443  900 CONTINUE
444  RETURN
445  END
mova2i
integer function mova2i(a)
This Function copies a bit string from a Character*1 variable to an integer variable.
Definition: mova2i.f:25
lengds
function lengds(KGDS)
Program history log:
Definition: lengds.f:15
w3fi73
subroutine w3fi73(IBFLAG, IBMAP, IBLEN, BMS, LENBMS, IER)
This subroutine constructs a grib bit map section.
Definition: w3fi73.f:23
w3nogds
subroutine w3nogds(ITYPE, FLD, IFLD, IBITL, IPFLAG, ID, PDS, IGFLAG, IGRID, IGDS, ICOMP, IBFLAG, IBMAP, IBLEN, IBDSFL, NPTS, KBUF, ITOT, JERR)
SUBPROGRAM: W3NOGDS MAKE A COMPLETE GRIB MESSAGE PRGMMR: FARLEY ORG: NMC421 DATE:94-11-22.
Definition: w3nogds.f:156
xstore
subroutine xstore(COUT, CON, MWORDS)
SUBPROGRAM: XSTORE STORES A CONSTANT VALUE INTO AN ARRAY PRGMMR: KEYSER ORG: W/NMC22 DATE: 07-02-92.
Definition: xstore.f:35
w3fi75
subroutine w3fi75(IBITL, ITYPE, ITOSS, FLD, IFLD, IBMAP, IBDSFL, NPTS, BDS11, IPFLD, PFLD, LEN, LENBDS, IBERR, PDS, IGDS)
This routine packs a grib field and forms octets(1-11) of the binary data section (bds).
Definition: w3fi75.f:90
w3fi74
subroutine w3fi74(IGDS, ICOMP, GDS, LENGDS, NPTS, IGERR)
This subroutine constructs a grib grid definition section.
Definition: w3fi74.f:34
w3fi68
subroutine w3fi68(ID, PDS)
Converts an array of 25, or 27 integer words into a grib product definition section (pds) of 28 bytes...
Definition: w3fi68.f:85
w3fi71
subroutine w3fi71(IGRID, IGDS, IERR)
W3FI71 Makes a 18, 37, 55, 64, or 91 word integer array used by w3fi72() grib packer to make the grid...
Definition: w3fi71.f:293
w3fi01
subroutine w3fi01(LW)
Determines the number of bytes in a full word for the particular machine (IBM or cray).
Definition: w3fi01.f:19