38 subroutine getgb2rp(lugb, cindex, extract, gribm, leng, iret)
41 integer,
intent(in) :: lugb
42 character(len = 1),
intent(in) :: cindex(*)
43 logical,
intent(in) :: extract
44 integer,
intent(out) :: leng, iret
45 character(len = 1),
pointer,
dimension(:) :: gribm
47 integer,
parameter :: zero = 0
48 character(len = 1),
allocatable,
dimension(:) :: csec2, csec6, csec7
49 character(len = 4) :: ctemp
50 integer :: lencur, lread, len0, ibmap, ipos, iskip
51 integer :: len7, len8, len3, len4, len5, len6, len1, len2
52 integer :: iskp2, iskp6, iskp7
62 if (iskp2 .gt. 0)
then
63 CALL baread(lugb, iskip + iskp2, 4, lread, ctemp)
66 CALL baread(lugb, iskip + iskp2, len2, lread, csec2)
80 CALL g2_gbytec(cindex, ibmap, ipos*8, 1*8)
81 IF (ibmap .eq. 254)
THEN
83 CALL baread(lugb, iskip + iskp6, 4, lread, ctemp)
89 CALL baread(lugb, iskip + iskp7, 4, lread, ctemp)
92 CALL baread(lugb, iskip + iskp7, len7, lread, csec7)
94 leng = len0 + len1 + len2 + len3 + len4 + len5 + len6 + len7 + len8
95 IF (.NOT.
ASSOCIATED(gribm))
ALLOCATE(gribm(leng))
104 gribm(7) = cindex(42)
105 gribm(8) = cindex(41)
113 gribm(17:16 + len1) = cindex(45:44 + len1)
118 if (iskp2 .gt. 0)
then
119 gribm(lencur + 1:lencur + len2) = csec2(1:len2)
120 lencur = lencur + len2
124 gribm(lencur + 1:lencur + len3 + len4 + len5) = cindex(ipos + 1:ipos + len3 + len4 + len5)
125 lencur = lencur + len3 + len4 + len5
126 ipos = ipos + len3 + len4 + len5
129 if (len6 .eq. 6 .AND. ibmap .ne. 254)
then
130 gribm(lencur + 1:lencur + len6) = cindex(ipos + 1:ipos + len6)
131 lencur = lencur + len6
134 CALL baread(lugb, iskip + iskp6, 4, lread, ctemp)
136 ALLOCATE(csec6(len6))
137 CALL baread(lugb, iskip + iskp6, len6, lread, csec6)
138 gribm(lencur + 1:lencur + len6) = csec6(1:len6)
139 lencur = lencur + len6
140 IF (
allocated(csec6))
DEALLOCATE(csec6)
144 gribm(lencur + 1:lencur + len7) = csec7(1:len7)
145 lencur = lencur + len7
148 gribm(lencur + 1) =
'7'
149 gribm(lencur + 2) =
'7'
150 gribm(lencur + 3) =
'7'
151 gribm(lencur + 4) =
'7'
154 IF (
allocated(csec2))
DEALLOCATE(csec2)
155 IF (
allocated(csec7))
deallocate(csec7)
159 IF (.NOT.
ASSOCIATED(gribm))
ALLOCATE(gribm(leng))
160 CALL baread(lugb, iskip, leng, lread, gribm)
161 IF (leng .NE. lread )
THEN
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 g2_sbytec(out, in, iskip, nbits)
Put arbitrary size values into a packed bit string, taking the low order bits from each value in the ...
subroutine getgb2rp(lugb, cindex, extract, gribm, leng, iret)
Extract a grib message from a file given the index of the requested field.