243 SUBROUTINE getgb2s(CBUF,NLEN,NNUM,J,JDISC,JIDS,JPDTN,JPDT,JGDTN,
244 & JGDT,K,GFLD,LPOS,IRET)
249 CHARACTER(LEN=1),
INTENT(IN) :: CBUF(NLEN)
250 INTEGER,
INTENT(IN) :: NLEN,NNUM,J,JDISC,JPDTN,JGDTN
251 INTEGER,
DIMENSION(:) :: JIDS(*),JPDT(*),JGDT(*)
252 INTEGER,
INTENT(OUT) :: K,LPOS,IRET
256 LOGICAL :: MATCH1,MATCH3,MATCH4
262 subroutine gf_unpack1(cgrib,lcgrib,iofst,ids,idslen,ierr)
263 character(len=1),
intent(in) :: cgrib(lcgrib)
264 integer,
intent(in) :: lcgrib
265 integer,
intent(inout) :: iofst
266 integer,
pointer,
dimension(:) :: ids
267 integer,
intent(out) :: ierr,idslen
269 subroutine gf_unpack3(cgrib,lcgrib,iofst,igds,igdstmpl,
270 & mapgridlen,ideflist,idefnum,ierr)
271 character(len=1),
intent(in) :: cgrib(lcgrib)
272 integer,
intent(in) :: lcgrib
273 integer,
intent(inout) :: iofst
274 integer,
pointer,
dimension(:) :: igdstmpl,ideflist
275 integer,
intent(out) :: igds(5)
276 integer,
intent(out) :: ierr,idefnum
278 subroutine gf_unpack4(cgrib,lcgrib,iofst,ipdsnum,ipdstmpl,
279 & mappdslen,coordlist,numcoord,ierr)
280 character(len=1),
intent(in) :: cgrib(lcgrib)
281 integer,
intent(in) :: lcgrib
282 integer,
intent(inout) :: iofst
283 real,
pointer,
dimension(:) :: coordlist
284 integer,
pointer,
dimension(:) :: ipdstmpl
285 integer,
intent(out) :: ipdsnum
286 integer,
intent(out) :: ierr,numcoord
288 subroutine gf_unpack5(cgrib,lcgrib,iofst,ndpts,idrsnum,
289 & idrstmpl,mapdrslen,ierr)
290 character(len=1),
intent(in) :: cgrib(lcgrib)
291 integer,
intent(in) :: lcgrib
292 integer,
intent(inout) :: iofst
293 integer,
intent(out) :: ndpts,idrsnum
294 integer,
pointer,
dimension(:) :: idrstmpl
295 integer,
intent(out) :: ierr
305 nullify(gfld%idsect,gfld%local)
306 nullify(gfld%list_opt,gfld%igdtmpl,gfld%ipdtmpl)
307 nullify(gfld%coord_list,gfld%idrtmpl,gfld%bmap,gfld%fld)
310 dowhile(iret.NE.0.AND.k.LT.nnum)
320 CALL g2_gbytec(cbuf,gfld%DISCIPLINE,(ipos+41)*8,1*8)
321 IF ( (jdisc.NE.-1).AND.(jdisc.NE.gfld%DISCIPLINE) )
THEN
328 CALL g2_gbytec(cbuf,lsec1,(ipos+44)*8,4*8)
330 CALL gf_unpack1(cbuf(ipos+45),lsec1,iof,gfld%IDSECT,
331 & gfld%IDSECTLEN,icnd)
332 IF ( icnd.EQ.0 )
THEN
334 DO i=1,gfld%IDSECTLEN
335 IF ( (jids(i).NE.-9999).AND.
336 & (jids(i).NE.gfld%IDSECT(i)) )
THEN
342 IF ( .NOT. match1 )
THEN
343 DEALLOCATE(gfld%IDSECT)
352 IF ( jgdtn.EQ.-1 )
THEN
355 CALL g2_gbytec(cbuf,numgdt,(jpos+12)*8,2*8)
356 IF ( jgdtn.EQ.numgdt )
THEN
358 CALL gf_unpack3(cbuf(jpos+1),lsec3,iof,kgds,gfld%IGDTMPL,
359 & gfld%IGDTLEN,gfld%LIST_OPT,gfld%NUM_OPT,icnd)
360 IF ( icnd.EQ.0 )
THEN
363 IF ( (jgdt(i).NE.-9999).AND.
364 & (jgdt(i).NE.gfld%IGDTMPL(i)) )
THEN
374 IF ( .NOT. match3 )
THEN
375 IF (
ASSOCIATED(gfld%IGDTMPL))
DEALLOCATE(gfld%IGDTMPL)
376 IF (
ASSOCIATED(gfld%LIST_OPT))
DEALLOCATE(gfld%LIST_OPT)
382 gfld%NUMOCT_OPT=kgds(3)
383 gfld%INTERP_OPT=kgds(4)
391 IF ( jpdtn.EQ.-1 )
THEN
394 CALL g2_gbytec(cbuf,numpdt,(jpos+7)*8,2*8)
395 IF ( jpdtn.EQ.numpdt )
THEN
397 CALL gf_unpack4(cbuf(jpos+1),lsec4,iof,gfld%IPDTNUM,
398 & gfld%IPDTMPL,gfld%IPDTLEN,
399 & gfld%COORD_LIST,gfld%NUM_COORD,icnd)
400 IF ( icnd.EQ.0 )
THEN
403 IF ( (jpdt(i).NE.-9999).AND.
404 & (jpdt(i).NE.gfld%IPDTMPL(i)) )
THEN
414 IF ( .NOT. match4 )
THEN
415 IF (
ASSOCIATED(gfld%IPDTMPL))
DEALLOCATE(gfld%IPDTMPL)
416 IF (
ASSOCIATED(gfld%COORD_LIST))
DEALLOCATE(gfld%COORD_LIST)
421 IF(match1.AND.match3.AND.match4)
THEN
423 CALL g2_gbytec(cbuf,gfld%VERSION,(ipos+40)*8,1*8)
424 CALL g2_gbytec(cbuf,gfld%IFLDNUM,(ipos+42)*8,2*8)
425 gfld%UNPACKED=.false.
427 IF ( jgdtn.EQ.-1 )
THEN
429 CALL gf_unpack3(cbuf(jpos+1),lsec3,iof,kgds,gfld%IGDTMPL,
430 & gfld%IGDTLEN,gfld%LIST_OPT,gfld%NUM_OPT,icnd)
433 gfld%NUMOCT_OPT=kgds(3)
434 gfld%INTERP_OPT=kgds(4)
438 IF ( jpdtn.EQ.-1 )
THEN
440 CALL gf_unpack4(cbuf(jpos+1),lsec4,iof,gfld%IPDTNUM,
441 & gfld%IPDTMPL,gfld%IPDTLEN,
442 & gfld%COORD_LIST,gfld%NUM_COORD,icnd)
447 CALL gf_unpack5(cbuf(jpos+1),lsec5,iof,gfld%NDPTS,
448 & gfld%IDRTNUM,gfld%IDRTMPL,
451 CALL g2_gbytec(cbuf,gfld%IBMAP,(jpos+5)*8,1*8)