📄 gf_unpack6.f
字号:
subroutine gf_unpack6(cgrib,lcgrib,iofst,ngpts,ibmap,bmap,ierr)!$$$ 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -