37 SUBROUTINE getg2ir(LUGB, MSK1, MSK2, MNUM, CBUF, NLEN, NNUM, NMESS, IRET)
41 CHARACTER(LEN = 1),
POINTER,
DIMENSION(:) :: CBUF
42 INTEGER,
INTENT(IN) :: LUGB, MSK1, MSK2, MNUM
43 INTEGER,
INTENT(OUT) :: NLEN, NNUM, NMESS, IRET
44 CHARACTER(LEN = 1),
POINTER,
DIMENSION(:) :: CBUFTMP
45 integer :: nbytes, newsize, next, numfld, m, mbuf, lskip, lgrib
46 integer :: istat, iseek, init, iret1
47 parameter(init = 50000, next = 10000)
50 SUBROUTINE ixgb2(LUGB, LSKIP, LGRIB, CBUF, NUMFLD, MLEN, IRET)
51 INTEGER,
INTENT(IN) :: LUGB, LSKIP, LGRIB
52 CHARACTER(LEN = 1),
POINTER,
DIMENSION(:) :: CBUF
53 INTEGER,
INTENT(OUT) :: NUMFLD, MLEN, IRET
61 ALLOCATE(cbuf(mbuf), stat = istat)
62 IF (istat .NE. 0)
THEN
69 CALL skgb(lugb, iseek, msk1, lskip, lgrib)
73 CALL skgb(lugb, iseek, msk2, lskip, lgrib)
81 DO WHILE(iret .EQ. 0 .AND. lgrib .GT. 0)
82 CALL ixgb2(lugb, lskip, lgrib, cbuftmp, numfld, nbytes, iret1)
83 IF (iret1 .NE. 0) print *,
' SAGT ', numfld, nbytes, iret1
84 IF((nbytes + nlen) .GT. mbuf)
THEN
85 newsize = max(mbuf + next, mbuf + nbytes)
86 CALL realloc(cbuf, nlen, newsize, istat)
87 IF (istat .NE. 0)
THEN
96 IF (
ASSOCIATED(cbuftmp))
THEN
97 cbuf(nlen + 1 : nlen + nbytes) = cbuftmp(1 : nbytes)
98 DEALLOCATE(cbuftmp, stat = istat)
100 print *,
' deallocating cbuftmp ... ', istat
111 iseek = lskip + lgrib
112 CALL skgb(lugb, iseek, msk2, lskip, lgrib)
subroutine getg2ir(LUGB, MSK1, MSK2, MNUM, CBUF, NLEN, NNUM, NMESS, IRET)
Generate an index record for a message in a GRIB2 file.
subroutine ixgb2(LUGB, LSKIP, LGRIB, CBUF, NUMFLD, MLEN, IRET)
Generate an index record for each field in a GRIB2 message.
Reallocate memory, preserving contents.
subroutine skgb(lugb, iseek, mseek, lskip, lgrib)
Search a file for the next GRIB1 or GRIB2 message.