📄 gf_unpack1.f
字号:
subroutine gf_unpack1(cgrib,lcgrib,iofst,ids,idslen,ierr)!$$$ SUBPROGRAM DOCUMENTATION BLOCK! . . . .! SUBPROGRAM: gf_unpack1 ! PRGMMR: Gilbert ORG: W/NP11 DATE: 2000-05-26!! ABSTRACT: This subroutine unpacks Section 1 (Identification 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_unpack1(cgrib,lcgrib,iofst,ids,idslen,ierr)! INPUT ARGUMENT LIST:! cgrib - Character array containing Section 1 of the GRIB2 message! lcgrib - Length (in bytes) of GRIB message array cgrib.! iofst - Bit offset of the beginning of Section 1.!! OUTPUT ARGUMENT LIST: ! iofst - Bit offset at the end of Section 1, returned.! ids - Pointer to integer array containing information read from ! Section 1, the Identification section.! ids(1) = Identification of originating Centre! ( see Common Code Table C-1 )! ids(2) = Identification of originating Sub-centre! ids(3) = GRIB Master Tables Version Number! ( see Code Table 1.0 )! ids(4) = GRIB Local Tables Version Number! ( see Code Table 1.1 )! ids(5) = Significance of Reference Time (Code Table 1.2)! ids(6) = Year ( 4 digits )! ids(7) = Month! ids(8) = Day! ids(9) = Hour! ids(10) = Minute! ids(11) = Second! ids(12) = Production status of processed data! ( see Code Table 1.3 )! ids(13) = Type of processed data ( see Code Table 1.4 )! idslen - Number of elements in ids().! ierr - Error return code.! 0 = no error! 6 = memory allocation error!! REMARKS: !! ATTRIBUTES:! LANGUAGE: Fortran 90! MACHINE: IBM SP!!$$$ character(len=1),intent(in) :: cgrib(lcgrib) integer,intent(in) :: lcgrib integer,intent(inout) :: iofst integer,pointer,dimension(:) :: ids integer,intent(out) :: ierr,idslen integer,dimension(:) :: mapid(13) data mapid /2,2,1,1,1,2,1,1,1,1,1,1,1/ ierr=0 idslen=13 nullify(ids) call gbyte(cgrib,lensec,iofst,32) ! Get Length of Section iofst=iofst+32 iofst=iofst+8 ! skip section number ! ! Unpack each value into array ids from the ! the appropriate number of octets, which are specified in ! corresponding entries in array mapid. ! istat=0 allocate(ids(idslen),stat=istat) if (istat.ne.0) then ierr=6 nullify(ids) return endif do i=1,idslen nbits=mapid(i)*8 call gbyte(cgrib,ids(i),iofst,nbits) iofst=iofst+nbits enddo return ! End of Section 1 processing end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -