2 """convert prepbufr file to netCDF
5 from __future__
import print_function
12 from netCDF4
import Dataset
23 prepbufr_filename =
'prepbufr.gdas.2016030406'
24 netcdf_filename =
'test.nc'
30 for n
in range(len(bufr_str)):
32 nc_varh.append(nc.createVariable(bufr_str[n],np.double,
'nobs',zlib=
True))
34 nc_varh.append(nc.createVariable(bufr_str[n]+
'1',np.double,
'nobs',zlib=
True))
36 nc_varh.append(nc.createVariable(bufr_str[n]+
'2',np.double,(
'nobs',
'max_plev'),zlib=
True))
38 nc_varh.append(nc.createVariable(bufr_str[n]+
'_bevn3',np.double,(
'nobs',
'max_plev',
'bevn_layer'),zlib=
True))
40 nc_varh.append(nc.createVariable(bufr_str[n]+
'_bevn2',np.double,(
'nobs',
'bevn_layer'),zlib=
True))
42 next_ind=min_ind+len(bufr_str)
47 for n
in range(len(bufr_str)):
48 tmp = bufr.read_subset(bufr_str[n]).data
50 if ((tmp.size >0) & (tmp < 10**9)):
51 nc_varh[n+min_ind][n_subset] = tmp
57 for n
in range(len(bufr_str)):
58 tmp = bufr.read_subset(bufr_str[n]).data
60 maxnlev=max(maxnlev,nlev)
64 if (tmp[0,z] < 10**9):
65 nc_varh[n+min_ind2][n_subset,z] = tmp[0,z]
67 nc_varh[n+min_ind1][n_subset] = tmp
74 for n
in range(len(bufr_str)):
75 tmp = bufr.read_subset(bufr_str[n],events=
True).data
77 maxnlev=max(maxnlev,nlev)
82 if (tmp[0,z,e] < 10**9):
83 nc_varh[n+min_ind3][n_subset,z,e] = tmp[0,z,e]
86 if (tmp[0,0,e] < 10**9):
87 nc_varh[n+min_ind2][n_subset,e] = tmp[0,0,e]
95 hdstr = np.array([
'SID',
'XOB',
'YOB',
'DHR',
'TYP',
'ELV',
'SAID',
'T29'])
96 misc = np.array([
'TSB',
'PRVSTG',
'SPRVSTG',
'ACID'])
97 obstr = np.array([
'POB',
'QOB',
'TOB',
'ZOB',
'UOB',
'VOB',
'PWO',
'MXGS',
'HOVI',
'CAT',
'PRSS',
'TDO',
'PMO' ])
98 satqcstr = np.array([
'QIFN'])
99 drift = np.array([
'XDR',
'YDR',
'HRDR'])
100 fcststr = np.array([
'UFC',
'VFC',
'TFC'])
101 qcstr = np.array([
'PQM',
'QQM',
'TQM',
'ZQM',
'WQM',
'NUL',
'PWQ',
'PMQ'])
102 oestr = np.array([
'POE',
'QOE',
'TOE',
'NUL',
'WOE',
'NUL',
'PWE'])
103 aircraftstr = np.array([
'POAF',
'IALR'])
104 bevnstr = np.array([
'TPC',
'TOB',
'TQM'])
106 sststr = [
'MSST',
'DBSS',
'SST1',
'SSTQM',
'SSTOE']
108 sprvstr = [
'SPRVSTG']
110 cld2seqstr = [
'TOCC',
'HBLCS']
111 cldseqstr = [
'VSSO',
'CLAM',
'HOCB']
112 metarcldstr = [
'CLAM',
'HOCB']
113 metarwthstr = [
'PRWE']
114 metarvisstr = [
'HOVI',
'TDO']
115 goescldstr = [
'CDTP',
'TOCC',
'GCDTT',
'CDTP_QM']
116 maxtmintstr = [
'MXTM',
'MITM']
118 cldceilhstr = [
'CEILING']
124 hdr_ind_out = np.arange(8)
125 msc_ind_out = np.arange(4)
127 obs_ind_out = np.arange(13)
128 sqc_ind_out = np.array([0])
129 drf_ind_out = np.arange(3)
130 fcs_ind_out = np.arange(3)
131 qcs_ind_out = np.array([0,1,2,3,4,6,7])
132 oes_ind_out = np.array([0,1,2,4,6])
133 bev_ind_out = np.array([0])
134 air_ind_out = np.arange(2)
140 nc =Dataset(netcdf_filename,
'w',format=
'NETCDF4')
143 nobs_dim = nc.createDimension(
'nobs',
None)
144 nobs_diag_dim = nc.createDimension(
'nobs_diag',
None)
145 plev_diag_dim = nc.createDimension(
'max_plev',
None)
146 bevn_layr_dim = nc.createDimension(
'bevn_layer',
None)
147 mtyp_string_dim = nc.createDimension(
'mtyp_string_len',10)
151 nc_varh.append(nc.createVariable(
'idate',
'i',
'nobs'))
152 nc_varh.append(nc.createVariable(
'msg_type',
'S1',(
'nobs',
'mtyp_string_len')))
183 bufr = ncepbufr.open(prepbufr_filename )
195 while (bufr.advance() == 0):
197 tmp_str = bufr.msg_type
198 if ( (tmp_str ==
'AIRCFT') | (tmp_str ==
'AIRCAR') | (tmp_str ==
'SATWND') ):
202 while bufr.load_subset() == 0:
205 nc_varh[0][n_subset] = bufr.msg_date
209 if (len(tmp_str) > 10 ):
210 print (
'msg_type len too long)')
212 tmp_str=tmp_str.ljust(10,
' ')
228 nlev_msg.append(nlev)
229 type_msg.append(tmp_str)
231 nlev =
bufr2nc_record2D(min_ind_drf1, min_ind_drf2, drift[drf_ind_out],n_subset)
232 nlev =
bufr2nc_record2D(min_ind_fcs1, min_ind_fcs2, fcststr[fcs_ind_out],n_subset)
233 nlev =
bufr2nc_record2D(min_ind_qcs1, min_ind_qcs2, qcstr[qcs_ind_out],n_subset)
234 nlev =
bufr2nc_record2D(min_ind_oes1, min_ind_oes2, oestr[oes_ind_out],n_subset)
235 nlev =
bufr2nc_record2D(min_ind_air1, min_ind_air2, aircraftstr[air_ind_out],n_subset)
241 nc.virtmp_code = bufr.get_program_code(
'VIRTMP')
def bufr2nc_record_bevn(min_ind2, min_ind3, bufr_str, n_subset)
def bufr2nc_record(min_ind, bufr_str, n_subset)
def append_nc_createvar(min_ind, bufr_str, dim_flag)
functions
def bufr2nc_record2D(min_ind1, min_ind2, bufr_str, n_subset)