NCEPLIBS-w3emc  2.11.0
putgbex.f
Go to the documentation of this file.
1 C> @file
2 C> @brief Packs and writes a grib message.
3 C> @author Mark Iredell @date 1994-04-01
4 
5 C> This subprogram is nearly the inverse of getgbe.
6 C>
7 C> Program history log:
8 C> - Mark Iredell 1994-04-01
9 C> - Mark Iredell 1995-10-31 Removed saves and prints.
10 C> - Y. Zhu 1997-02-11 Included probability and cluster arguments.
11 C>
12 C> @param[in] lugb integer unit of the unblocked grib data file.
13 C> @param[in] kf integer number of data points.
14 C> @param[in] kpds integer (200) pds parameters.
15 C> - 1): id of center.
16 C> - 2): generating process id number.
17 C> - 3): grid definition.
18 C> - 4): gds/bms flag (right adj copy of octet 8).
19 C> - 5): indicator of parameter.
20 C> - 6): type of level.
21 C> - 7): height/pressure , etc of level.
22 C> - 8): year including (century-1).
23 C> - 9): month of year.
24 C> - 10: day of month.
25 C> - 11: hour of day.
26 C> - 12: minute of hour.
27 C> - 13: indicator of forecast time unit.
28 C> - 14: time range 1.
29 C> - 15: time range 2.
30 C> - 16: time range flag.
31 C> - 17: number included in average.
32 C> - 18: version nr of grib specification.
33 C> - 19: version nr of parameter table.
34 C> - 20: nr missing from average/accumulation.
35 C> - 21: century of reference time of data.
36 C> - 22: units decimal scale factor.
37 C> - 23: subcenter number.
38 C> - 24: pds byte 29, for nmc ensemble products.
39 C> - 128 if forecast field error.
40 C> - 64 if bias corrected fcst field.
41 C> - 32 if smoothed field.
42 C> - warning: can be combination of more than 1.
43 C> - 25: pds byte 30, not used.
44 C> @param[in] kgds Integer (200) gds parameters.
45 C> - 1): data representation type.
46 C> - 19: number of vertical coordinate parameters.
47 C> - 20: octet number of the list of vertical coordinate parameters or
48 C> octet number of the list of numbers of points in each row or
49 C> 255 if neither are present.
50 C> - 21: for grids with pl, number of points in grid.
51 C> - 22: number of words in each row.
52 C> - Latitude/longitude grids.
53 C> - 2): n(i) nr points on latitude circle.
54 C> - 3): n(j) nr points on longitude meridian.
55 C> - 4): la(1) latitude of origin.
56 C> - 5): lo(1) longitude of origin.
57 C> - 6): resolution flag (right adj copy of octet 17).
58 C> - 7): la(2) latitude of extreme point.
59 C> - 8): lo(2) longitude of extreme point.
60 C> - 9): di longitudinal direction of increment.
61 C> - 10: dj latitudinal direction increment.
62 C> - 11: scanning mode flag (right adj copy of octet 28).
63 C> - Gaussian grids.
64 C> - 2): n(i) nr points on latitude circle.
65 C> - 3): n(j) nr points on longitude meridian.
66 C> - 4): la(1) latitude of origin.
67 C> - 5): lo(1) longitude of origin.
68 C> - 6): resolution flag (right adj copy of octet 17).
69 C> - 7): la(2) latitude of extreme point.
70 C> - 8): lo(2) longitude of extreme point.
71 C> - 9): di longitudinal direction of increment.
72 C> - 10: n - nr of circles pole to equator.
73 C> - 11: scanning mode flag (right adj copy of octet 28).
74 C> - 12: nv - nr of vert coord parameters.
75 C> - 13: pv - octet nr of list of vert coord parameters or
76 C> pl - location of the list of numbers of points in
77 C> each row (if no vert coord parameters are present or
78 C> 255 if neither are present
79 C> - Polar stereographic grids.
80 C> - 2): n(i) nr points along lat circle.
81 C> - 3): n(j) nr points along lon circle.
82 C> - 4): la(1) latitude of origin.
83 C> - 5): lo(1) longitude of origin.
84 C> - 6): resolution flag (right adj copy of octet 17).
85 C> - 7): lov grid orientation.
86 C> - 8): dx - x direction increment.
87 C> - 9): dy - y direction increment.
88 C> - 10: projection center flag.
89 C> - 11: scanning mode (right adj copy of octet 28).
90 C> - Spherical harmonic coefficients.
91 C> - 2): j pentagonal resolution parameter.
92 C> - 3): k pentagonal resolution parameter.
93 C> - 4): m pentagonal resolution parameter.
94 C> - 5): representation type.
95 C> - 6): coefficient storage mode.
96 C> - Mercator grids.
97 C> - 2): n(i) nr points on latitude circle.
98 C> - 3): n(j) nr points on longitude meridian.
99 C> - 4): la(1) latitude of origin.
100 C> - 5): lo(1) longitude of origin.
101 C> - 6): resolution flag (right adj copy of octet 17).
102 C> - 7): la(2) latitude of last grid point.
103 C> - 8): lo(2) longitude of last grid point.
104 C> - 9): latit - latitude of projection intersection.
105 C> - 10: reserved.
106 C> - 11: scanning mode flag (right adj copy of octet 28).
107 C> - 12: longitudinal dir grid length.
108 C> - 13: latitudinal dir grid length.
109 C> - Lambert conformal grids.
110 C> - 2): nx nr points along x-axis.
111 C> - 3): ny nr points along y-axis.
112 C> - 4): la1 lat of origin (lower left).
113 C> - 5): lo1 lon of origin (lower left).
114 C> - 6): resolution (right adj copy of octet 17).
115 C> - 7): lov - orientation of grid.
116 C> - 8): dx - x-dir increment.
117 C> - 9): dy - y-dir increment.
118 C> - 10: projection center flag.
119 C> - 11: scanning mode flag (right adj copy of octet 28).
120 C> - 12: latin 1 - first lat from pole of secant cone inter.
121 C> - 13: latin 2 - second lat from pole of secant cone inter.
122 C> @param[in] kens integer (200) ensemble pds parms.
123 C> - 1): application identifier.
124 C> - 2): ensemble type.
125 C> - 3): ensemble identifier.
126 C> - 4): product identifier.
127 C> - 5): smoothing flag.
128 C> @param[in] kprob integer (2) probability ensemble parms.
129 C> @param[in] xprob real (2) probability ensemble parms.
130 C> @param[in] kclust integer (16) cluster ensemble parms.
131 C> @param[in] kmembr integer (8) cluster ensemble parms.
132 C> @param[in] lb logical*1 (kf) bitmap if present.
133 C> @param[in] f real (kf) data.
134 C> @param[out] iret integer return code.
135 C> - 0 all ok.
136 C> - other w3fi72 grib packer return code.
137 C>
138 C> @note Subprogram can be called from a multiprocessing environment.
139 C> Do not engage the same logical unit from more than one processor.
140 C>
141 C> @author Mark Iredell @date 1994-04-01
142 C-----------------------------------------------------------------------
143  SUBROUTINE putgbex(LUGB,KF,KPDS,KGDS,KENS,
144  & KPROB,XPROB,KCLUST,KMEMBR,LB,F,IRET)
145  INTEGER KPDS(200),KGDS(200),KENS(200)
146  INTEGER KPROB(2),KCLUST(16),KMEMBR(80)
147  REAL XPROB(2)
148  LOGICAL*1 LB(KF)
149  REAL F(KF)
150  parameter(maxbit=16)
151  INTEGER IBM(KF),IPDS(200),IGDS(200),IBDS(200)
152  REAL FR(KF)
153  CHARACTER PDS(400),GRIB(1000+KF*(MAXBIT+1)/8)
154 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
155 C GET W3FI72 PARAMETERS
156  CALL r63w72(kpds,kgds,ipds,igds)
157  ibds=0
158 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
159 C COUNT VALID DATA
160  kbm=kf
161  IF(ipds(7).NE.0) THEN
162  kbm=0
163  DO i=1,kf
164  IF(lb(i)) THEN
165  ibm(i)=1
166  kbm=kbm+1
167  ELSE
168  ibm(i)=0
169  ENDIF
170  ENDDO
171  IF(kbm.EQ.kf) ipds(7)=0
172  ENDIF
173 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
174 C GET NUMBER OF BITS AND ROUND DATA
175  IF(kbm.EQ.0) THEN
176  DO i=1,kf
177  fr(i)=0.
178  ENDDO
179  nbit=0
180  ELSE
181  CALL getbit(ipds(7),0,ipds(25),kf,ibm,f,fr,fmin,fmax,nbit)
182  nbit=min(nbit,maxbit)
183  ENDIF
184 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
185 C CREATE PRODUCT DEFINITION SECTION
186  CALL w3fi68(ipds,pds)
187  IF(ipds(24).EQ.2) THEN
188  ilast=86
189  CALL pdsens(kens,kprob,xprob,kclust,kmembr,ilast,pds)
190  ENDIF
191 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
192 C PACK AND WRITE GRIB DATA
193  CALL w3fi72(0,fr,0,nbit,1,ipds,pds,
194  & 1,255,igds,0,0,ibm,kf,ibds,
195  & kfo,grib,lgrib,iret)
196  IF(iret.EQ.0) CALL wryte(lugb,lgrib,grib)
197 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
198  RETURN
199  END
subroutine pdsens(KENS, KPROB, XPROB, KCLUST, KMEMBR, ILAST, MSGA)
Packs brib pds extension starting on byte 41 for ensemble forecast products.
Definition: pdsens.f:28
subroutine putgbex(LUGB, KF, KPDS, KGDS, KENS, KPROB, XPROB, KCLUST, KMEMBR, LB, F, IRET)
This subprogram is nearly the inverse of getgbe.
Definition: putgbex.f:145
subroutine r63w72(KPDS, KGDS, IPDS, IGDS)
Determines the integer PDS and GDS parameters for the GRIB1 packing routine w3fi72() given the parame...
Definition: r63w72.f:27
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
subroutine w3fi72(ITYPE, FLD, IFLD, IBITL, IPFLAG, ID, PDS, IGFLAG, IGRID, IGDS, ICOMP, IBFLAG, IBMAP, IBLEN, IBDSFL, NPTS, KBUF, ITOT, JERR)
Makes a complete GRIB message from a user supplied array of floating point or integer data.
Definition: w3fi72.f:121