33 subroutine gf_unpack5(cgrib, lcgrib, iofst, ndpts, idrsnum, idrstmpl, &
39 character(len = 1),
intent(in) :: cgrib(lcgrib)
40 integer,
intent(in) :: lcgrib
41 integer,
intent(inout) :: iofst
42 integer,
intent(out) :: ndpts, idrsnum
43 integer,
pointer,
dimension(:) :: idrstmpl
44 integer,
intent(out) :: ierr
46 integer,
allocatable :: mapdrs(:)
49 integer :: newmapdrslen, nbits, istat, isign, lensec, iret, i
57 allocate(mapdrs(lensec))
69 if (
allocated(mapdrs))
deallocate(mapdrs)
77 if (mapdrslen .gt. 0)
allocate(idrstmpl(mapdrslen), stat = istat)
78 if (istat .ne. 0)
then
81 if (
allocated(mapdrs))
deallocate(mapdrs)
85 nbits = iabs(mapdrs(i)) * 8
86 if (mapdrs(i) .ge. 0)
then
87 call g2_gbytec(cgrib, idrstmpl(i), iofst, nbits)
90 call g2_gbytec(cgrib, idrstmpl(i), iofst + 1, nbits-1)
91 if (isign .eq. 1) idrstmpl(i) = -idrstmpl(i)
101 call realloc(idrstmpl, mapdrslen, newmapdrslen, istat)
104 do i = mapdrslen + 1, newmapdrslen
105 nbits = iabs(mapdrs(i)) * 8
106 if (mapdrs(i) .ge. 0)
then
107 call g2_gbytec(cgrib, idrstmpl(i), iofst, nbits)
110 call g2_gbytec(cgrib, idrstmpl(i), iofst + 1, nbits - 1)
111 if (isign.eq.1) idrstmpl(i) = -idrstmpl(i)
113 iofst = iofst + nbits
115 mapdrslen = newmapdrslen
117 if (
allocated(mapdrs))
deallocate(mapdrs)
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 gf_unpack5(cgrib, lcgrib, iofst, ndpts, idrsnum, idrstmpl, mapdrslen, ierr)
Unpack Section 5 (Data Representation Section) of a GRIB2 message, starting at octet 6 of that Sectio...
Handles Data Representation Templates used in Section 5.
subroutine getdrstemplate(number, nummap, map, needext, iret)
Return DRS template information for a specified Data Representation Template.
subroutine extdrstemplate(number, list, nummap, map)
Generate the remaining octet map for a given Data Representation Template, if required.
Reallocate memory, preserving contents.