53 subroutine gb_info(cgrib, lcgrib, listsec0, listsec1, &
54 numfields, numlocal, maxlocal, ierr)
57 character(len = 1),
intent(in) :: cgrib(lcgrib)
58 integer,
intent(in) :: lcgrib
59 integer,
intent(out) :: listsec0(3), listsec1(13)
60 integer,
intent(out) :: numlocal, numfields, maxlocal, ierr
62 character(len = 4),
parameter :: grib =
'GRIB', c7777 =
'7777'
63 character(len = 4) :: ctemp
64 integer,
parameter :: zero = 0, one = 1
65 integer,
parameter :: mapsec1len = 13
66 integer,
parameter :: mapsec1(mapsec1len) = (/ 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1 /)
67 integer :: iofst, istart
68 integer :: nbits, lensec1, lensec0, lensec, lenposs, lengrib, j
69 integer :: i, ipos, isecnum
79 ctemp = cgrib(j) // cgrib(j + 1) // cgrib(j + 2) // cgrib(j+3)
80 if (ctemp .eq. grib )
then
85 if (istart .eq. 0)
then
86 print *,
'gb_info: Beginning characters GRIB not found.'
92 iofst = 8 * (istart + 5)
93 call g2_gbytec(cgrib, listsec0(1), iofst, 8)
95 call g2_gbytec(cgrib, listsec0(2), iofst, 8)
100 listsec0(3) = lengrib
102 ipos = istart + lensec0
105 if (listsec0(2) .ne. 2)
then
106 print *,
'gb_info: can only decode GRIB edition 2.'
112 call g2_gbytec(cgrib, lensec1, iofst, 32)
116 if (isecnum .ne. 1)
then
117 print *,
'gb_info: Could not find section 1.'
126 nbits = mapsec1(i) * 8
127 call g2_gbytec(cgrib, listsec1(i), iofst, nbits)
128 iofst = iofst + nbits
130 ipos = ipos + lensec1
135 ctemp = cgrib(ipos) // cgrib(ipos + 1) // cgrib(ipos + 2) // cgrib(ipos + 3)
136 if (ctemp .eq. c7777 )
then
138 if (ipos .ne. (istart + lengrib))
then
139 print *,
'gb_info: "7777" found, but not where expected.'
145 iofst = (ipos - 1) * 8
151 if (ipos .gt. (istart + lengrib))
then
152 print *,
'gb_info: "7777" not found at end of GRIB message.'
156 if (isecnum .ge. 2 .AND. isecnum .le. 7)
then
157 if (isecnum .eq. 2)
then
159 numlocal = numlocal + 1
161 if (lenposs .gt. maxlocal) maxlocal = lenposs
162 elseif (isecnum .eq. 4)
then
164 numfields = numfields + 1
167 print *,
'gb_info: Invalid section number found in GRIB message: ', isecnum
subroutine g2_gbytec(in, iout, iskip, nbits)
Extract arbitrary size values from a packed bit string, right justifying each value in the unpacked a...
subroutine gb_info(cgrib, lcgrib, listsec0, listsec1, numfields, numlocal, maxlocal, ierr)
Find the number of gridded fields and Local Use Sections in a GRIB2 message.