43 subroutine getidx(lugb, lugi, cindex, nlen, nnum, iret)
46 integer,
intent(in) :: lugb, lugi
47 integer,
intent(out) :: nlen, nnum, iret
48 character(len = 1),
pointer,
dimension(:) :: cindex
49 integer,
parameter :: maxidx = 10000
50 integer,
parameter :: msk1 = 32000, msk2 = 4000
53 integer :: irgi, mskp, nmess, i
58 character(len = 1),
pointer,
dimension(:) :: cbuf
61 type(gindex),
save :: idxlist(10000)
67 subroutine getg2i(lugi, cbuf, nlen, nnum, iret)
68 character(len = 1),
pointer,
dimension(:) :: cbuf
69 integer,
intent(in) :: lugi
70 integer,
intent(out) :: nlen, nnum, iret
72 subroutine getg2ir(lugb, msk1, msk2, mnum, cbuf, nlen, nnum, &
74 character(len = 1),
pointer,
dimension(:) :: cbuf
75 integer,
intent(in) :: lugb, msk1, msk2, mnum
76 integer,
intent(out) :: nlen, nnum, nmess, iret
84 if (
associated(idxlist(i)%cbuf))
then
86 deallocate(idxlist(i)%cbuf)
87 nullify(idxlist(i)%cbuf)
97 if (lugb .le. 0 .or. lugb .gt. 9999)
then
98 print *,
' file unit number out of range'
99 print *,
' use unit numbers in range: 0 - 9999 '
103 if (lugi .eq. lugb)
then
104 if (
associated(idxlist(lugb)%cbuf)) &
105 deallocate(idxlist(lugb)%cbuf)
107 nullify(idxlist(lugb)%cbuf)
108 idxlist(lugb)%nlen = 0
109 idxlist(lugb)%nnum = 0
113 if (lugi .lt. 0)
then
115 if (
associated(idxlist(lugb)%cbuf)) &
116 deallocate(idxlist(lugb)%cbuf)
118 nullify(idxlist(lugb)%cbuf)
119 idxlist(lugb)%nlen = 0
120 idxlist(lugb)%nnum = 0
125 if (
associated(idxlist(lugb)%cbuf))
then
127 cindex => idxlist(lugb)%cbuf
128 nlen = idxlist(lugb)%nlen
129 nnum = idxlist(lugb)%nnum
135 call getg2i(lux, idxlist(lugb)%cbuf, nlen, nnum, irgi)
136 elseif (lux .le. 0)
then
138 call getg2ir(lugb, msk1, msk2, mskp, idxlist(lugb)%cbuf, &
139 nlen, nnum, nmess, irgi)
141 if (irgi .eq. 0)
then
142 cindex => idxlist(lugb)%cbuf
143 idxlist(lugb)%nlen = nlen
144 idxlist(lugb)%nnum = nnum
148 print *,
' error reading index file '
163 integer,
intent(out) :: iret
164 character(len = 1),
pointer,
dimension(:) :: cindex
165 integer :: nlen, nnum
169 subroutine getidx(lugb,lugi,cbuf,nlen,nnum,irgi)
170 character(len=1),
pointer,
dimension(:) :: cbuf
171 integer,
intent(in) :: lugb,lugi
172 integer,
intent(out) :: nlen,nnum,irgi
178 call getidx(0, 0, cindex, nlen, nnum, iret)
subroutine getg2i(LUGI, CBUF, NLEN, NNUM, IRET)
Read a GRIB2 index file and return its contents.
subroutine getg2ir(LUGB, MSK1, MSK2, MNUM, CBUF, NLEN, NNUM, NMESS, IRET)
Generate an index record for a message in a GRIB2 file.
subroutine getidx(lugb, lugi, cindex, nlen, nnum, iret)
Find, read or generate a GRIB2 index for the GRIB2 file associated with unit lugb.
subroutine gf_finalize(iret)
Free all memory associated with the library.