Skip to content

Commit

Permalink
fixed test (#698)
Browse files Browse the repository at this point in the history
  • Loading branch information
edwardhartnett authored May 23, 2024
1 parent 7ceadb8 commit 51f1145
Show file tree
Hide file tree
Showing 2 changed files with 135 additions and 77 deletions.
25 changes: 24 additions & 1 deletion src/g2getgb2.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1207,6 +1207,12 @@ end subroutine g2_gbytec81
mypos = mypos + INT8_BITS
mypos = mypos + 44 * INT1_BITS ! skip ahead in the cindex
endif
#ifdef LOGGING
write(g2_log_msg, *) 'iskip8', iskip8, 'iskip', iskip, 'mypos/8', mypos/8
call g2_log(2)
#endif

! Determine length of local section (section 2).
if (iskp2_8 .gt. 0) then
call bareadl(lugb, iskip8 + iskp2_8, 4_8, lread8, ctemp)
call g2_gbytec1(ctemp, len2, 0, INT4_BITS) ! length of section 2
Expand All @@ -1216,6 +1222,12 @@ end subroutine g2_gbytec81
else
len2 = 0
endif
#ifdef LOGGING
write(g2_log_msg, *) 'iskip8 ', iskip8, ' iskp2_8 ', iskp2_8, 'len2', len2
call g2_log(2)
#endif

! Find the lengths of the sections 1, 3, 4, 5, and 6.
call g2_gbytec1(cindex, len1, mypos, INT4_BITS) ! length of section 1
mypos = mypos + len1 * INT1_BITS ! skip ahead in the cindex
call g2_gbytec1(cindex, len3, mypos, INT4_BITS) ! length of section 3
Expand All @@ -1226,6 +1238,12 @@ end subroutine g2_gbytec81
mypos = mypos + len5 * INT1_BITS ! skip ahead in the cindex
call g2_gbytec1(cindex, len6, mypos, INT4_BITS) ! length of section 6
mypos = mypos + len6 * INT1_BITS ! skip ahead in the cindex
#ifdef LOGGING
write(g2_log_msg, *) 'len1', len1, 'len3', len3, 'len4', len4, 'len5', len5, 'len6', len6
call g2_log(2)
#endif

! Handle the bitmap, if present.
call g2_gbytec1(cindex, ibmap, mypos, INT1_BITS) ! bitmap indicator
if (ibmap .eq. 254) then
! Get the bytes to skip for section 6 from the index.
Expand All @@ -1235,7 +1253,7 @@ end subroutine g2_gbytec81
call g2_gbytec1(cindex, iskp6, IXBMS2 * INT1_BITS, INT4_BITS)
endif

! Read the length of the bitmat section from the data file. (lu, byts to
! Read the length of the bitmap section from the data file. (lu, byts to
! skip, bytes to read, bytes read, buffer for output)
call bareadl(lugb, iskip8 + iskp6, 4_8, lread8, ctemp)
call g2_gbytec1(ctemp, len6, 0, INT4_BITS) ! length of section 6
Expand Down Expand Up @@ -1361,5 +1379,10 @@ end subroutine g2_gbytec81
iret = 97
return
endif
#ifdef LOGGING
write(g2_log_msg, *) ' read message into gribm, lread8', lread8
call g2_log(3)
#endif

endif
end subroutine getgb2rp2
187 changes: 111 additions & 76 deletions tests/test_getgb2p_2.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3,119 +3,154 @@
! lengths of each message section by verifying that the last four octets are
! '7777'.
!
! Alex Richert, May 2024
! Alex Richert, Edward Hartnett, May, 2024
PROGRAM test_getgb2p_2
use g2logging
use grib_mod
use pdstemplates
use gridtemplates
integer,dimension(200) :: IDS,GDT,PDT
integer :: DSCPL,GDTN,PDTN
integer :: nrec
integer,parameter :: jrew=0
character * 1 :: a7,b7,c7,d7
implicit none

CHARACTER * 80 DESC,WMOHEAD
CHARACTER * 200 fileb,filei,fileo
character(len=1),pointer,dimension(:) :: gribm
integer, dimension(200) :: ids, gdt, pdt
integer :: dscpl, gdtn, pdtn
integer :: nrec
integer, parameter :: jrew = 0
character * 1 :: a7, b7, c7, d7

logical :: extract=.false.
character * 80 desc, wmohead
character * 200 fileb, filei, fileo
character(len = 1), pointer, dimension(:) :: gribm

logical :: extract = .false.
integer :: idxver = 2
integer (kind = 8) :: itot
integer :: ios, iret, iret1, j2, krew, lugb, lugi, lugo

interface
SUBROUTINE GETGB2P(LUGB,LUGI,J,JDISC,JIDS,JPDTN,JPDT,JGDTN,JGDT, &
EXTRACT,K,GRIBM,LENG,IRET)
INTEGER,INTENT(IN) :: LUGB,LUGI,J,JDISC,JPDTN,JGDTN
INTEGER,DIMENSION(:) :: JIDS(*),JPDT(*),JGDT(*)
LOGICAL,INTENT(IN) :: EXTRACT
INTEGER,INTENT(OUT) :: K,IRET
CHARACTER(LEN=1),POINTER,DIMENSION(:) :: GRIBM
END SUBROUTINE GETGB2P
subroutine getgb2p2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
extract, idxver, k, gribm, leng8, iret)
integer, intent(in) :: lugb, lugi, j, jdisc
integer, dimension(:) :: jids(*)
integer, intent(in) :: jpdtn
integer, dimension(:) :: jpdt(*)
integer, intent(in) :: jgdtn
integer, dimension(:) :: jgdt(*)
logical, intent(in) :: extract
integer, intent(inout) :: idxver
integer, intent(out) :: k
character(len = 1), pointer, dimension(:) :: gribm
integer (kind = 8), intent(out) :: leng8
integer, intent(out) :: iret
end subroutine getgb2p2
end interface
NAMELIST /GRIBIDS/DSCPL,IDS,GDTN,GDT,PDTN,PDT,DESC,WMOHEAD,EXTRACT
namelist /gribids/DSCPL, IDS, GDTN, GDT, PDTN, PDT, DESC, WMOHEAD, EXTRACT

lugb=11 ! Input GRIB2 File
lugi=0 ! Input GRIB2 INdex File
lugo=51 ! Output transmission file.
lugb = 11 ! Input GRIB2 File
lugi = 0 ! Input GRIB2 INdex File
lugo = 51 ! Output transmission file.

! Read GRIB2 data and index file names from the FORT_nn
! environment variables, and open the files.
fileb='data/rrfs.t12z.prslevfaa.f010.na3km.grib2'
filei=''
! Read GRIB2 data and index file names from the FORT_nn
! environment variables, and open the files.
fileb = 'data/rrfs.t12z.prslevfaa.f010.na3km.grib2'
filei = ''

print *, 'Testing getgb2p2() on', fileb

call baopenr(lugb,fileb,iret1)
call baopenr(lugb, fileb, iret1)
if (iret1 .ne. 0) then
write(6,fmt='(" Error opening GRIB file: ",A200)') fileb
write(6,fmt='(" baopenr error = ",I5)') iret1
print *, 'error opening data file, iret1', iret1
stop 10
endif

! Read output GRIB bulletin file name from FORTnn
! environment variable, and open file.
fileo='test_tocgrib2.output.grib2'
call baopenw(lugo,fileo,iret1)
! Read output GRIB bulletin file name from FORTnn
! environment variable, and open file.
fileo = 'test_tocgrib2.output.grib2'
call baopenw(lugo, fileo, iret1)
if (iret1 .ne. 0) then
write(6,fmt='(" Error opening output transmission file: ", A200)') fileo
write(6,fmt='(" baopenw error = ",I5)') iret1
print *, 'Error opening output transmission file, iret1', iret1
stop 20
endif

! loop through input control records.
iret=0
! Loop through input control records.
iret = 0
nrec = 0
open(12, file='data/grib2.awips.rrfs.010')
open(12, file = 'data/grib2.awips.rrfs.010')
foreachinputrecord: do

! Set Namelist defaults
DSCPL=-1 ! Grib2 Discipline number
IDS=-9999 ! GRIB2 Identification Section
GDTN=-1 ! Grid Definition Template Number
GDT=-9999 ! Grid Definition Template
PDTN=-1 ! Product Definition Template Number
PDT=-9999 ! Product Definition Template
WMOHEAD='TTAAnn CCCC'
EXTRACT=.false.
! Set Namelist defaults.
dscpl = -1 ! Grib2 Discipline number.
ids = -9999 ! GRIB2 Identification Section.
gdtn = -1 ! Grid Definition Template Number.
gdt = -9999 ! Grid Definition Template.
pdtn = -1 ! Product Definition Template Number.
pdt = -9999 ! Product Definition Template.
wmohead = 'TTAAnn CCCC'
extract = .false.

READ (12,GRIBIDS,iostat=ios)
read (12, gribids, iostat = ios)
if (ios .ne. 0) then
write(6,fmt='(" Error reading PDS from input file. iostat = ",i5)') ios
if (nrec .eq. 337) then
print *, 'All input records processed!'
exit
endif
print *, 'Error reading PDS from input file. ios', ios, 'nrec', nrec
stop 500
cycle
endif
nrec = nrec + 1

! Echo input record
write(6,'(A,I0)') ' Start new record no. = ',nrec
write(6,'(73A)') ' DESC=',DESC(1:73)
write(6,'(11A)') ' WMOHEAD=',WMOHEAD(1:11)
write(6,'(A,I0)') ' GRIB2 DISCIPLINE= ',DSCPL
write(6,'(A,20(1x,I0))')' Section 1=', &
(IDS(j2),j2=1,13)
write(6, '(A, I0)') ' Start new record no. = ', nrec
if (nrec .eq. 314) then
g2_log_level = 0
endif
write(6, '(73A)') ' DESC = ', DESC(1:73)
write(6, '(11A)') ' WMOHEAD = ', WMOHEAD(1:11)
write(6, '(A, I0)') ' GRIB2 DISCIPLINE = ', DSCPL
write(6, '(A, 20(1x, I0))')' Section 1 = ', (IDS(j2), j2 = 1, 13)
if (GDTN .ne. -1) then
write(6,'(A,I0,A,100(1x,I0))') ' GDT 3. ',GDTN,' =', &
(GDT(j2),j2=1,getgdtlen(GDTN))
write(6, '(A, I0, A, 100(1x, I0))') ' GDT 3. ', GDTN, ' = ', (GDT(j2), j2 = 1, getgdtlen(GDTN))
endif
if (PDTN .ne. -1) then
write(6,'(A,I0,A,100(1x,I0))') ' PDT 4. ',PDTN,' =', &
(PDT(j2),j2=1,getpdtlen(PDTN))
write(6, '(A, I0, A, 100(1x, I0))') ' PDT 4. ', PDTN, ' = ', (PDT(j2), j2 = 1, getpdtlen(PDTN))
endif

! Read and return packed GRIB field
CALL GETGB2P(lugb,lugi,jrew,DSCPL,IDS,PDTN,PDT, &
GDTN,GDT,extract,KREW,gribm,itot,iret)
IF (IRET.NE.0) THEN
IF (IRET.EQ.96)WRITE(6,'(A)')' GETGB2P: ERROR READING INDEX' &
//' FILE'
IF (IRET.EQ.97)WRITE(6,'(A)')' GETGB2P: ERROR READING GRIB' &
//' FILE'
IF (IRET.EQ.99)WRITE(6,'(A)')' GETGB2P: ERROR REQUEST NOT' &
//' FOUND'
! Read and return packed GRIB field.
print *, '*** calling getgb2p2()'
call getgb2p2(lugb, lugi, jrew, dscpl, ids, pdtn, pdt, gdtn, gdt, &
extract, idxver, krew, gribm, itot, iret)
print *, '*** iret', iret
if (iret .ne. 0) then
if (iret .eq. 96) then
print *, ' test_getgb2p_2: error reading index file'
stop 505
endif
if (iret .eq. 97) then
print *, ' test_getgb2p_2: error reading grib file'
stop 510
endif
if (iret .eq. 99) then
print *, ' test_getgb2p_2: error request not found, nrec', nrec
write(6, '(A, I0, A, 100(1x, I0))') ' PDT 4. ', PDTN, ' = ', (PDT(j2), j2 = 1, getpdtlen(PDTN))
! We expect this one won't be found.
if (nrec .ne. 314) then
stop 515
endif
endif
cycle
END IF
a7=gribm(size(gribm)-3)
b7=gribm(size(gribm)-2)
c7=gribm(size(gribm)-1)
d7=gribm(size(gribm))
if(.not.all((/a7,b7,c7,d7/).eq.'7')) stop 77
end if
a7 = gribm(size(gribm) - 3)
b7 = gribm(size(gribm) - 2)
c7 = gribm(size(gribm) - 1)
d7 = gribm(size(gribm))
if (.not. all((/a7, b7, c7, d7/) .eq. '7')) then
print *, 'error with section 8'
stop 77
endif
deallocate(gribm)
return
enddo foreachinputrecord

print *, 'OK!'
print *, 'SUCCESS!'

END PROGRAM test_getgb2p_2

0 comments on commit 51f1145

Please sign in to comment.