Skip to content

Commit 48d9403

Browse files
Merge branch 'develop' into ejh_0321_test
2 parents 6b547c2 + d777b3d commit 48d9403

File tree

6 files changed

+786
-80
lines changed

6 files changed

+786
-80
lines changed

src/tocgrib/tocgrib.F90

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,29 +61,28 @@ PROGRAM tocgrib
6161

6262
LOGICAL IW3PDS
6363

64-
HEXPDS=0
65-
LUGB=11
66-
LUGI=31
67-
LUGO=51
68-
69-
! GET PARM FIELD WITH UP TO 100 CHARACTERS
70-
! Parm field should contain the originating center part of
71-
! the WMO Header.
64+
HEXPDS = 0
65+
LUGB = 11
66+
LUGI = 31
67+
LUGO = 51
68+
69+
! Get parm field with up to 100 characters. Parm field should
70+
! contain the originating center part of the WMO Header.
7271
CPARM = ' '
7372
KWBX = 'KWBC'
74-
CALL W3AS00(NPARM,CPARM,IER)
75-
IF (IER.EQ.0) THEN
76-
IF (NPARM.EQ.0.OR.CPARM(1:4).EQ.' ') THEN
73+
CALL W3AS00(NPARM, CPARM, IER)
74+
IF (IER .EQ. 0) THEN
75+
IF (NPARM .EQ. 0 .OR. CPARM(1:4) .EQ. ' ') THEN
7776
PRINT *,'THERE IS A PARM FIELD BUT IT IS EMPTY'
7877
PRINT *,'OR BLANK, I WILL USE THE DEFAULT KWBC'
7978
ELSE
8079
KWBX(1:4) = CPARM(1:4)
8180
END IF
82-
ELSE IF (IER.EQ.2.OR.IER.EQ.3) THEN
83-
PRINT *,'W3AS00 ERROR = ',IER
81+
ELSE IF (IER .EQ. 2 .OR. IER .EQ. 3) THEN
82+
PRINT *,'W3AS00 ERROR = ', IER
8483
PRINT *,'THERE IS NO PARM FIELD, I USED DEFAULT KWBC'
8584
ELSE
86-
PRINT *,'W3AS00 ERROR = ',IER
85+
PRINT *,'W3AS00 ERROR = ', IER
8786
END IF
8887
PRINT *,'NPARM = ',NPARM
8988
PRINT *,'CPARM = ',CPARM(1:4)

src/tocgrib2/tocgrib2.F90

Lines changed: 66 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
!> @file
2-
!> @brief Create new GRIB2 file with fields from an existing GRIB2 file.
2+
!> @brief Create new GRIB2 file with fields from an existing GRIB2
3+
!> file, with a TOC Flag Field separator block and WMO header.
34
!> @author Stephen Gilbert @date 2004-05-17
45

56
!> Program reads selected GRIB2 fields from a file, adds a TOC Flag
@@ -12,16 +13,16 @@
1213
!> @note The "EXTRACT" variable in the namelist allows users to choose
1314
!> whether they want the entire GRIB2 message containing the requested
1415
!> field (extract=.false.), OR a GRIB2 message containing only the
15-
!> requested field (extract=.true.). Both options return the same
16+
!> requested field (extract=.true.). Both options return the same
1617
!> message if the requested field is the only field in the GRIB2
1718
!> message.
1819
!>
19-
!> ### Input Files
20+
!> ## Input Files
2021
!> - 5 namelist of grib fields and associated wmo headers.
2122
!> - 11 input grib2 file.
2223
!> - 31 corresponding input grib2 index file.
2324
!>
24-
!> ### Output Files (Including Scratch Files)
25+
!> ## Output Files (Including Scratch Files)
2526
!> - 6 standard fortran print file
2627
!> - 51 output grib bulletin file in toc format
2728
!>
@@ -33,30 +34,31 @@
3334
!> - 30 - Some bulletins are missing
3435
!>
3536
!> @author Stephen Gilbert @date 2004-05-17
37+
!> @author Alex Richert, Edward Hartnett
3638
PROGRAM tocgrib2
3739
use grib_mod
3840
use pdstemplates
3941
use gridtemplates
40-
integer,dimension(200) :: IDS,GDT,PDT
41-
integer :: DSCPL,GDTN,PDTN
42-
integer :: nbul,nrec,mbul,dayofmonth,hourofday
43-
integer,parameter :: lenhead=21,jrew=0
42+
integer, dimension(200) :: IDS, GDT, PDT
43+
integer :: DSCPL, GDTN, PDTN
44+
integer :: nbul, nrec, mbul, dayofmonth, hourofday
45+
integer, parameter :: lenhead=21, jrew=0
4446

4547
CHARACTER * 6 BULHED
46-
CHARACTER * 80 DESC,WMOHEAD
47-
CHARACTER * 200 fileb,filei,fileo
48+
CHARACTER * 80 DESC, WMOHEAD
49+
CHARACTER * 200 fileb, filei, fileo
4850
CHARACTER * 6 envvar
4951
CHARACTER * 4 KWBX
5052
CHARACTER * 1 CSEP(80)
5153
CHARACTER * 1 WMOHDR(lenhead)
52-
character(len=1),pointer,dimension(:) :: gribm
54+
character(len=1), pointer, dimension(:) :: gribm
5355

5456
logical :: extract=.false.
5557
integer idxver
5658
integer (kind = 8) :: itot8
5759

5860
interface
59-
subroutine getgb2p2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
61+
subroutine getgb2p2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
6062
extract, idxver, k, gribm, leng8, iret)
6163
integer, intent(in) :: lugb, lugi, j, jdisc
6264
integer, dimension(:) :: jids(*)
@@ -74,7 +76,7 @@ end subroutine getgb2p2
7476
end interface
7577
NAMELIST /GRIBIDS/DSCPL,IDS,GDTN,GDT,PDTN,PDT,DESC,WMOHEAD,EXTRACT
7678

77-
CALL W3TAGB('tocgrib2',2012,0916,0083,'NP11')
79+
CALL W3TAGB('tocgrib2', 2012, 0916, 0083, 'NP11')
7880

7981
lugb=11 ! Input GRIB2 File
8082
lugi=31 ! Input GRIB2 INdex File
@@ -83,34 +85,34 @@ end subroutine getgb2p2
8385
! Read GRIB2 data and index file names from the FORT_nn
8486
! environment variables, and open the files.
8587
envvar='FORT '
86-
write(envvar(5:6),fmt='(I2)') lugb
87-
call getenv(envvar,fileb)
88-
write(envvar(5:6),fmt='(I2)') lugi
89-
call getenv(envvar,filei)
88+
write(envvar(5:6), fmt='(I2)') lugb
89+
call getenv(envvar, fileb)
90+
write(envvar(5:6), fmt='(I2)') lugi
91+
call getenv(envvar, filei)
9092

91-
call baopenr(lugb,fileb,iret1)
93+
call baopenr(lugb, fileb, iret1)
9294
if (iret1 .ne. 0) then
93-
write(6,fmt='(" Error opening GRIB file: ",A200)') fileb
94-
write(6,fmt='(" baopenr error = ",I5)') iret1
95+
write(6, fmt='(" Error opening GRIB file: ", A200)') fileb
96+
write(6, fmt='(" baopenr error = ", I5)') iret1
9597
stop 10
9698
endif
9799

98100
! Open GRIB2 index file. If doesn't open, use just the data
99101
! file.
100-
call baopenr(lugi,filei,iret2)
102+
call baopenr(lugi, filei, iret2)
101103
if (iret2 .ne. 0) then
102104
lugi=0
103105
endif
104106

105107
! Read output GRIB bulletin file name from FORTnn
106108
! environment variable, and open file.
107-
write(envvar(5:6),fmt='(I2)') lugo
108-
call getenv(envvar,fileo)
109-
call baopenw(lugo,fileo,iret1)
109+
write(envvar(5:6), fmt='(I2)') lugo
110+
call getenv(envvar, fileo)
111+
call baopenw(lugo, fileo, iret1)
110112
if (iret1 .ne. 0) then
111-
write(6,fmt='(" Error opening output transmission file: ", &
113+
write(6, fmt='(" Error opening output transmission file: ", &
112114
A200)') fileo
113-
write(6,fmt='(" baopenw error = ",I5)') iret1
115+
write(6, fmt='(" baopenw error = ", I5)') iret1
114116
stop 20
115117
endif
116118

@@ -130,69 +132,69 @@ end subroutine getgb2p2
130132
WMOHEAD='TTAAnn CCCC'
131133
EXTRACT=.false.
132134

133-
READ (*,GRIBIDS,iostat=ios,end=999)
135+
READ (*, GRIBIDS, iostat=ios, end=999)
134136
nrec = nrec + 1
135137
if (ios .ne. 0) then
136-
write(6,fmt='(" Error reading PDS from input file. iostat = " &
137-
,i5)') ios
138+
write(6, fmt='(" Error reading PDS from input file. iostat = " &
139+
, i5)') ios
138140
cycle
139141
endif
140142

141143
! Echo input record
142-
WRITE(6,FMT='(/,''***********************************'', &
144+
WRITE(6, FMT='(/, ''***********************************'', &
143145
''********************************************'')')
144-
write(6,'(A,I0)') ' Start new record no. = ',nrec
145-
write(6,'(73A)') ' DESC=',DESC(1:73)
146-
write(6,'(11A)') ' WMOHEAD=',WMOHEAD(1:11)
147-
write(6,'(A,I0)') ' GRIB2 DISCIPLINE= ',DSCPL
148-
write(6,'(A,20(1x,I0))')' Section 1=', &
149-
(IDS(j2),j2=1,13)
146+
write(6, '(A, I0)') ' Start new record no. = ', nrec
147+
write(6, '(73A)') ' DESC=', DESC(1:73)
148+
write(6, '(11A)') ' WMOHEAD=', WMOHEAD(1:11)
149+
write(6, '(A, I0)') ' GRIB2 DISCIPLINE= ', DSCPL
150+
write(6, '(A, 20(1x, I0))')' Section 1=', &
151+
(IDS(j2), j2=1, 13)
150152
if (GDTN .ne. -1) then
151-
write(6,'(A,I0,A,100(1x,I0))') ' GDT 3. ',GDTN,' =', &
152-
(GDT(j2),j2=1,getgdtlen(GDTN))
153+
write(6, '(A, I0, A, 100(1x, I0))') ' GDT 3. ', GDTN, ' =', &
154+
(GDT(j2), j2=1, getgdtlen(GDTN))
153155
endif
154156
if (PDTN .ne. -1) then
155-
write(6,'(A,I0,A,100(1x,I0))') ' PDT 4. ',PDTN,' =', &
156-
(PDT(j2),j2=1,getpdtlen(PDTN))
157+
write(6, '(A, I0, A, 100(1x, I0))') ' PDT 4. ', PDTN, ' =', &
158+
(PDT(j2), j2=1, getpdtlen(PDTN))
157159
endif
158160

159161
! Read and return packed GRIB field
160162
idxver = 2
161-
CALL GETGB2P2(lugb,lugi,jrew,DSCPL,IDS,PDTN,PDT, &
162-
GDTN,GDT,extract,idxver,KREW,gribm,itot8,iret)
163+
CALL GETGB2P2(lugb, lugi, jrew, DSCPL, IDS, PDTN, PDT, &
164+
GDTN, GDT, extract, idxver, KREW, gribm, itot8, iret)
163165
itot = int(itot8, kind(4))
164166
IF (IRET.NE.0) THEN
165-
IF (IRET.EQ.96)WRITE(6,'(A)')' GETGB2P: ERROR READING INDEX' &
167+
IF (IRET.EQ.96)WRITE(6, '(A)')' GETGB2P: ERROR READING INDEX' &
166168
//' FILE'
167-
IF (IRET.EQ.97)WRITE(6,'(A)')' GETGB2P: ERROR READING GRIB' &
169+
IF (IRET.EQ.97)WRITE(6, '(A)')' GETGB2P: ERROR READING GRIB' &
168170
//' FILE'
169-
IF (IRET.EQ.99)WRITE(6,'(A)')' GETGB2P: ERROR REQUEST NOT' &
171+
IF (IRET.EQ.99)WRITE(6, '(A)')' GETGB2P: ERROR REQUEST NOT' &
170172
//' FOUND'
171173
cycle
172174
END IF
173-
WRITE (6,'(A,1x,I0)')' RECORD NO. OF GRIB RECORD IN INPUT ' &
175+
WRITE (6, '(A, 1x, I0)')' RECORD NO. OF GRIB RECORD IN INPUT ' &
174176
//'FILE = ', KREW
175177
!
176-
WRITE (6,'(A,I0)')' Size of GRIB Field = ',itot
178+
WRITE (6, '(A, I0)')' Size of GRIB Field = ', itot
177179

178180
! MAKE Flag Field Separator block
179181
iopt=2
180182
insize=19
181-
call mkfldsep(csep,iopt,insize,itot+lenhead,lenout)
182-
! WRITE(6,'(A,80A)')' csep = ',csep
183+
call mkfldsep(csep, iopt, insize, itot+lenhead, lenout)
184+
! WRITE(6, '(A, 80A)')' csep = ', csep
183185

184186
! MAKE WMO HEADER
185187
dayofmonth=mova2i(gribm(16+16))
186188
hourofday=mova2i(gribm(16+17))
187-
CALL MAKWMO (WMOHEAD(1:6),dayofmonth,hourofday, &
188-
WMOHEAD(8:11),WMOHDR)
189-
! WRITE(6,'(21A)') ' WMOHEADER= ',WMOHDR
189+
CALL MAKWMO (WMOHEAD(1:6), dayofmonth, hourofday, &
190+
WMOHEAD(8:11), WMOHDR)
191+
! WRITE(6, '(21A)') ' WMOHEADER= ', WMOHDR
190192

191-
! write out Separator block, Abbreviated WMO Heading,
193+
! write out Separator block, Abbreviated WMO Heading,
192194
! and GRIB2 field to output file.
193-
call wryte(lugo,lenout,csep)
194-
call wryte(lugo,lenhead,WMOHDR)
195-
call wryte(lugo,itot,gribm)
195+
call wryte(lugo, lenout, csep)
196+
call wryte(lugo, lenhead, WMOHDR)
197+
call wryte(lugo, itot, gribm)
196198
nbul=nbul+1
197199
if (associated(gribm)) then
198200
deallocate(gribm)
@@ -203,23 +205,23 @@ end subroutine getgb2p2
203205

204206
! CLOSING SECTION
205207
999 if (nbul .EQ. 0) then
206-
WRITE (6,FMT='('' SOMETHING WRONG WITH DATA CARDS...'', &
208+
WRITE (6, FMT='('' SOMETHING WRONG WITH DATA CARDS...'', &
207209
''NOTHING WAS PROCESSED'')')
208210
! CALL W3TAGE('tocgrib2')
209211
stop 19
210212
else
211-
call baclose (LUGB,iret)
212-
call baclose (LUGI,iret)
213-
call baclose (LUGO,iret)
214-
WRITE (6,FMT='(//,'' ******** RECAP OF THIS EXECUTION '', &
215-
''********'',/,5X,''READ '',I6,'' INDIVIDUAL IDS'', &
216-
/,5X,''WROTE '',I6,'' BULLETINS OUT FOR TRANSMISSION'', &
213+
call baclose (LUGB, iret)
214+
call baclose (LUGI, iret)
215+
call baclose (LUGO, iret)
216+
WRITE (6, FMT='(//, '' ******** RECAP OF THIS EXECUTION '', &
217+
''********'', /, 5X, ''READ '', I6, '' INDIVIDUAL IDS'', &
218+
/, 5X, ''WROTE '', I6, '' BULLETINS OUT FOR TRANSMISSION'', &
217219
//)') nrec, NBUL
218220
endif
219221
! TEST TO SEE IF ANY BULLETINS MISSING
220222
mbul = nrec - nbul
221223
IF (mbul .ne. 0) THEN
222-
WRITE(6,'(A,1X,I0)')' BULLETINS MISSING = ',mbul
224+
WRITE(6, '(A, 1X, I0)')' BULLETINS MISSING = ', mbul
223225
! CALL W3TAGE('tocgrib2')
224226
stop 30
225227
END IF

tests/CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ gu_copy_test_data(ref_gdaswave.t00z.wcoast.0p16.f000_2.grib2.idx)
7474
gu_copy_test_data(ref_gfs.landmask.grib1)
7575
gu_copy_test_data(ref_grid_172.landmask.grib1)
7676
gu_copy_test_data(ref_grid_220.landmask.grib1)
77+
gu_copy_test_data(tocgrib2.nml)
78+
gu_copy_test_data(tocgrib2_bad.nml)
7779
if(FTP_TEST_FILES)
7880
gu_copy_test_data(ref_blend.t19z.core.f001.co.grib2.degrib2)
7981
gu_copy_test_data(ref_cmc_geavg.t12z.pgrb2a.0p50.f000.degrib2)
@@ -92,8 +94,8 @@ if(FTP_TEST_FILES)
9294
gu_copy_test_data(ref_fv3lam.t00z.prslev.f000.grib2.degrib2)
9395
endif()
9496
if(FTP_EXTRA_TEST_FILES)
97+
# gu_copy_test_data(ref_rrfs.t12z.prslevfaa.f010.na3km.grib2.degrib2)
9598
gu_copy_test_data(ref_GFSPRS.GrbF06.degrib2)
96-
gu_copy_test_data(ref_rrfs.t12z.prslevfaa.f010.na3km.grib2.degrib2)
9799
gu_copy_test_data(ref_rrfs.t18z.prslev.f000.grib2.degrib2)
98100
gu_copy_test_data(ref_grib2.awips.rrfs.010)
99101
endif()
@@ -131,7 +133,9 @@ if(FTP_TEST_FILES)
131133
rap.t00z.awp130pgrbf00.grib2
132134
seaice.t00z.grb.grib2
133135
sgx_nwps_CG3_20221117_1200.grib2
134-
aqm.t12z.max_8hr_o3.227.grib2)
136+
aqm.t12z.max_8hr_o3.227.grib2
137+
rrfs.t12z.prslevfaa.f010.na3km.grib2
138+
)
135139
foreach(THE_FILE IN LISTS FTP_TEST_FILES)
136140
PULL_DATA(${G2_FTP_URL} ${THE_FILE})
137141
endforeach()
@@ -168,5 +172,6 @@ if(FTP_TEST_FILES)
168172
endif()
169173
if(FTP_EXTRA_TEST_FILES)
170174
gu_test(run_degrib2_extra_file_tests)
175+
gu_test(run_tocgrib2_tests)
171176
endif()
172177
endif()

0 commit comments

Comments
 (0)