1
1
! > @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.
3
4
! > @author Stephen Gilbert @date 2004-05-17
4
5
5
6
! > Program reads selected GRIB2 fields from a file, adds a TOC Flag
12
13
! > @note The "EXTRACT" variable in the namelist allows users to choose
13
14
! > whether they want the entire GRIB2 message containing the requested
14
15
! > 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
16
17
! > message if the requested field is the only field in the GRIB2
17
18
! > message.
18
19
! >
19
- ! > ### Input Files
20
+ ! > ## Input Files
20
21
! > - 5 namelist of grib fields and associated wmo headers.
21
22
! > - 11 input grib2 file.
22
23
! > - 31 corresponding input grib2 index file.
23
24
! >
24
- ! > ### Output Files (Including Scratch Files)
25
+ ! > ## Output Files (Including Scratch Files)
25
26
! > - 6 standard fortran print file
26
27
! > - 51 output grib bulletin file in toc format
27
28
! >
33
34
! > - 30 - Some bulletins are missing
34
35
! >
35
36
! > @author Stephen Gilbert @date 2004-05-17
37
+ ! > @author Alex Richert, Edward Hartnett
36
38
PROGRAM tocgrib2
37
39
use grib_mod
38
40
use pdstemplates
39
41
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
44
46
45
47
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
48
50
CHARACTER * 6 envvar
49
51
CHARACTER * 4 KWBX
50
52
CHARACTER * 1 CSEP(80 )
51
53
CHARACTER * 1 WMOHDR(lenhead)
52
- character (len= 1 ),pointer ,dimension (:) :: gribm
54
+ character (len= 1 ), pointer , dimension (:) :: gribm
53
55
54
56
logical :: extract= .false.
55
57
integer idxver
56
58
integer (kind = 8 ) :: itot8
57
59
58
60
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 , &
60
62
extract , idxver , k , gribm , leng8 , iret )
61
63
integer , intent (in ) :: lugb, lugi, j, jdisc
62
64
integer , dimension (:) :: jids(* )
@@ -74,7 +76,7 @@ end subroutine getgb2p2
74
76
end interface
75
77
NAMELIST / GRIBIDS/ DSCPL,IDS,GDTN,GDT,PDTN,PDT,DESC,WMOHEAD,EXTRACT
76
78
77
- CALL W3TAGB(' tocgrib2' ,2012 ,0916 ,0083 ,' NP11' )
79
+ CALL W3TAGB(' tocgrib2' , 2012 , 0916 , 0083 , ' NP11' )
78
80
79
81
lugb= 11 ! Input GRIB2 File
80
82
lugi= 31 ! Input GRIB2 INdex File
@@ -83,34 +85,34 @@ end subroutine getgb2p2
83
85
! Read GRIB2 data and index file names from the FORT_nn
84
86
! environment variables, and open the files.
85
87
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)
90
92
91
- call baopenr(lugb,fileb,iret1)
93
+ call baopenr(lugb, fileb, iret1)
92
94
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
95
97
stop 10
96
98
endif
97
99
98
100
! Open GRIB2 index file. If doesn't open, use just the data
99
101
! file.
100
- call baopenr(lugi,filei,iret2)
102
+ call baopenr(lugi, filei, iret2)
101
103
if (iret2 .ne. 0 ) then
102
104
lugi= 0
103
105
endif
104
106
105
107
! Read output GRIB bulletin file name from FORTnn
106
108
! 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)
110
112
if (iret1 .ne. 0 ) then
111
- write (6 ,fmt= ' (" Error opening output transmission file: ", &
113
+ write (6 , fmt= ' (" Error opening output transmission file: ", &
112
114
A200)' ) fileo
113
- write (6 ,fmt= ' (" baopenw error = ",I5)' ) iret1
115
+ write (6 , fmt= ' (" baopenw error = ", I5)' ) iret1
114
116
stop 20
115
117
endif
116
118
@@ -130,69 +132,69 @@ end subroutine getgb2p2
130
132
WMOHEAD= ' TTAAnn CCCC'
131
133
EXTRACT= .false.
132
134
133
- READ (* ,GRIBIDS,iostat= ios,end= 999 )
135
+ READ (* , GRIBIDS, iostat= ios, end= 999 )
134
136
nrec = nrec + 1
135
137
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
138
140
cycle
139
141
endif
140
142
141
143
! Echo input record
142
- WRITE (6 ,FMT= ' (/,'' ***********************************'' , &
144
+ WRITE (6 , FMT= ' (/, '' ***********************************'' , &
143
145
'' ********************************************'' )' )
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 )
150
152
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))
153
155
endif
154
156
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))
157
159
endif
158
160
159
161
! Read and return packed GRIB field
160
162
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)
163
165
itot = int (itot8, kind (4 ))
164
166
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' &
166
168
// ' 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' &
168
170
// ' 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' &
170
172
// ' FOUND'
171
173
cycle
172
174
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 ' &
174
176
// ' FILE = ' , KREW
175
177
!
176
- WRITE (6 ,' (A,I0)' )' Size of GRIB Field = ' ,itot
178
+ WRITE (6 , ' (A, I0)' )' Size of GRIB Field = ' , itot
177
179
178
180
! MAKE Flag Field Separator block
179
181
iopt= 2
180
182
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
183
185
184
186
! MAKE WMO HEADER
185
187
dayofmonth= mova2i(gribm(16+16 ))
186
188
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
190
192
191
- ! write out Separator block, Abbreviated WMO Heading,
193
+ ! write out Separator block, Abbreviated WMO Heading,
192
194
! 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)
196
198
nbul= nbul+1
197
199
if (associated (gribm)) then
198
200
deallocate (gribm)
@@ -203,23 +205,23 @@ end subroutine getgb2p2
203
205
204
206
! CLOSING SECTION
205
207
999 if (nbul .EQ. 0 ) then
206
- WRITE (6 ,FMT= ' ('' SOMETHING WRONG WITH DATA CARDS...'' , &
208
+ WRITE (6 , FMT= ' ('' SOMETHING WRONG WITH DATA CARDS...'' , &
207
209
'' NOTHING WAS PROCESSED'' )' )
208
210
! CALL W3TAGE('tocgrib2')
209
211
stop 19
210
212
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'' , &
217
219
//)' ) nrec, NBUL
218
220
endif
219
221
! TEST TO SEE IF ANY BULLETINS MISSING
220
222
mbul = nrec - nbul
221
223
IF (mbul .ne. 0 ) THEN
222
- WRITE (6 ,' (A,1X,I0)' )' BULLETINS MISSING = ' ,mbul
224
+ WRITE (6 , ' (A, 1X, I0)' )' BULLETINS MISSING = ' , mbul
223
225
! CALL W3TAGE('tocgrib2')
224
226
stop 30
225
227
END IF
0 commit comments