subroutine gf_unpack6(cgrib,lcgrib,iofst,ngpts,ibmap,bmap,ierr),2
!$$$ SUBPROGRAM DOCUMENTATION BLOCK
! . . . .
! SUBPROGRAM: gf_unpack6
! PRGMMR: Gilbert ORG: W/NP11 DATE: 2000-05-26
!
! ABSTRACT: This subroutine unpacks Section 6 (Bit-Map Section)
! starting at octet 6 of that Section.
!
! PROGRAM HISTORY LOG:
! 2000-05-26 Gilbert
! 2002-01-24 Gilbert - Changed to dynamically allocate arrays
! and to pass pointers to those arrays through
! the argument list.
!
! USAGE: CALL gf_unpack6(cgrib,lcgrib,iofst,ngpts,ibmap,bmap,ierr)
! INPUT ARGUMENT LIST:
! cgrib - Character array that contains the GRIB2 message
! lcgrib - Length (in bytes) of GRIB message array cgrib.
! iofst - Bit offset of the beginning of Section 6.
! ngpts - Number of grid points specified in the bit-map
!
! OUTPUT ARGUMENT LIST:
! iofst - Bit offset at the end of Section 6, returned.
! ibmap - Bitmap indicator ( see Code Table 6.0 )
! 0 = bitmap applies and is included in Section 6.
! 1-253 = Predefined bitmap applies
! 254 = Previously defined bitmap applies to this field
! 255 = Bit map does not apply to this product.
! bmap() - Pointer to a logical*1 array containing decoded bitmap.
! ( if ibmap=0 )
! ierr - Error return code.
! 0 = no error
! 4 = Unrecognized pre-defined bit-map.
! 6 = memory allocation error
!
! REMARKS: None
!
! ATTRIBUTES:
! LANGUAGE: Fortran 90
! MACHINE: IBM SP
!
!$$$
character(len=1),intent(in) :: cgrib(lcgrib)
integer,intent(in) :: lcgrib,ngpts
integer,intent(inout) :: iofst
integer,intent(out) :: ibmap
integer,intent(out) :: ierr
logical*1,pointer,dimension(:) :: bmap
integer :: intbmap(ngpts)
ierr=0
nullify(bmap)
iofst=iofst+32 ! skip Length of Section
iofst=iofst+8 ! skip section number
call gbyte
(cgrib,ibmap,iofst,8) ! Get bit-map indicator
iofst=iofst+8
if (ibmap.eq.0) then ! Unpack bitmap
istat=0
if (ngpts.gt.0) allocate(bmap(ngpts),stat=istat)
if (istat.ne.0) then
ierr=6
nullify(bmap)
return
endif
call gbytes
(cgrib,intbmap,iofst,1,0,ngpts)
iofst=iofst+ngpts
do j=1,ngpts
bmap(j)=.true.
if (intbmap(j).eq.0) bmap(j)=.false.
enddo
! elseif (ibmap.eq.254) then ! Use previous bitmap
! return
! elseif (ibmap.eq.255) then ! No bitmap in message
! bmap(1:ngpts)=.true.
! else
! print *,'gf_unpack6: Predefined bitmap ',ibmap,' not recognized.'
! ierr=4
endif
return ! End of Section 6 processing
end