source: lmdz_wrf/trunk/tools/get_stations.py @ 1690

Last change on this file since 1690 was 1690, checked in by lfita, 7 years ago

Removing matplotlib

File size: 23.0 KB
Line 
1## Getting statistics from a series of surface stations and soundings from any given netCDF file
2# L. Fita, CIMA, November 2017
3#
4import numpy as np
5#import matplotlib as mpl
6#mpl.use('Agg')
7#from matplotlib.pylab import *
8#import matplotlib.pyplot as plt
9#from mpl_toolkits.basemap import Basemap
10import os
11from netCDF4 import Dataset as NetCDFFile
12import nc_var_tools as ncvar
13import generic_tools as gen
14import drawing_tools as drw
15import diag_tools as diag
16
17# Getting configuration
18from config_get_stations import *
19
20####### ###### ##### #### ### ## #
21
22# Gneric variables prepared to be computed
23Cvars = ['C_td']
24
25# WRF specific diagnostics
26WRFvars = ['WRFp', 'WRFta', 'WRFtd', 'WRFtime', 'WRFua', 'WRFuas', 'WRFva', 'WRFvas',\
27  'WRFzg']
28
29# Variables not to check their existence inside file
30NONcheckingvars = Cvars + WRFvars
31
32def creation_sfcstation_file(filen, lv, Lv, hv, lab, tunits, sfcvars, dimt, ifilen):
33    """ Function to create the structure of the surface station file
34      filen: name of the file
35      lv: value of the longitude of the station
36      Lv: value of the latitude of the station
37      hv: value of the height of the station
38      lab: label of the station
39      tunits: uints of time
40      sfcvars: variables to be included
41      dimt: quantity of time-steps
42      ifilen: name of the file from which data is retrieved
43    """
44    fname = 'creation_sfcstation_file'
45
46    Lstring = 256
47
48    onewnc = NetCDFFile(filen, 'w')
49    # Dimensions
50    newdim = onewnc.createDimension('time', None)
51    newdim = onewnc.createDimension('Lstring', Lstring)
52
53    # Variable-dimensions
54    newvar = onewnc.createVariable('time', 'f8', ('time'))
55    ncvar.basicvardef(newvar, 'time', 'Time', tunits)
56    ncvar.set_attribute(newvar, 'calendar', 'standard')
57    newvar.setncattr('axis', 'T')
58    newvar.setncattr('_CoordinateAxisType', 'Time')
59    onewnc.sync()
60
61    # station Variables
62    Llab = len(lab)
63    newvar = onewnc.createVariable('station', 'c', ('Lstring'))
64    newvar[0:Llab] = lab[:]
65    ncvar.basicvardef(newvar, 'station', 'Name of the station', '-')
66
67    newvar = onewnc.createVariable('lon', 'f8')
68    newvar[:] = lv
69    ncvar.basicvardef(newvar, 'lon', 'Longitude', 'degrees_west')
70    newvar.setncattr('axis', 'X')
71    newvar.setncattr('_CoordinateAxisType', 'Lon')
72   
73    newvar = onewnc.createVariable('lat', 'f8')
74    newvar[:] = Lv
75    ncvar.basicvardef(newvar, 'lat', 'Latitude', 'degrees_north')
76    newvar.setncattr('axis', 'Y')
77    newvar.setncattr('_CoordinateAxisType', 'Lat')
78   
79    newvar = onewnc.createVariable('height', 'f8')
80    newvar[:] = hv
81    ncvar.basicvardef(newvar, 'height', 'Height', 'm')
82    newvar.setncattr('axis', 'Z')
83    newvar.setncattr('_CoordinateAxisType', 'Height')
84    onewnc.sync()
85
86    newvar = onewnc.createVariable('flon', 'f8')
87    newvar[:] = lv
88    ncvar.basicvardef(newvar, 'file_lon', 'Longitude closest grid-point from file',  \
89      'degrees_west')
90    newvar.setncattr('axis', 'X')
91    newvar.setncattr('_CoordinateAxisType', 'Lon')
92   
93    newvar = onewnc.createVariable('flat', 'f8')
94    newvar[:] = Lv
95    ncvar.basicvardef(newvar, 'file_lat', 'Latitude closest grid-point from file',   \
96      'degrees_north')
97    newvar.setncattr('axis', 'Y')
98    newvar.setncattr('_CoordinateAxisType', 'Lat')
99   
100    newvar = onewnc.createVariable('fheight', 'f8')
101    newvar[:] = hv
102    ncvar.basicvardef(newvar, 'file_height', 'Height closest grid-point from file',  \
103      'm')
104    newvar.setncattr('axis', 'Z')
105    newvar.setncattr('_CoordinateAxisType', 'Height')
106
107    newvar = onewnc.createVariable('ipoint', 'i')
108    newvar[:] = 0
109    ncvar.basicvardef(newvar, 'file_i', 'x-axis closest grid-point from file', '-')
110
111    newvar = onewnc.createVariable('jpoint', 'i')
112    newvar[:] = 0
113    ncvar.basicvardef(newvar, 'file_j', 'y-axis closest grid-point from file', '-')
114
115    onewnc.sync()
116
117    # Variables
118    NOvarvals = np.ones((dimt), dtype=np.float)*gen.fillValueF
119    for vn in sfcvars:
120        CFvalues = gen.variables_values(vn)
121        newvar = onewnc.createVariable(vn, 'f4', ('time'), fill_value=gen.fillValueF)
122        newvar[:] = NOvarvals[:]
123        ncvar.basicvardef(newvar, CFvalues[0], CFvalues[4].replace('|',' '),         \
124          CFvalues[5])
125
126    # Global attributes
127    ncvar.add_global_PyNCplot(onewnc, 'get_stations.py', fname, '0.1')
128    ncvar.set_attribute(newvar, 'data_origin', 'SMN')
129
130    onewnc.sync()
131    onewnc.close()
132
133    return
134
135def creation_sndstation_file(filen, lv, Lv, hv, lab, tunits, punits, ptime, sndvars, \
136  dimt, dimz, ifilen):
137    """ Function to create the structure of the surface station file
138      filen: name of the file
139      lv: value of the longitude of the station
140      Lv: value of the latitude of the station
141      hv: value of the height of the station
142      lab: label of the station
143      tunits: uints of time
144      punits: uints of pressure
145      ptime: does pressure evolves in time? (True/False)
146      sndvars: variables to be included
147      dimt: quantity of time-steps
148      dimz: quantity of vertical levels
149      ifilen: name of the file from which data is retrieved
150    """
151    fname = 'creation_sndstation_file'
152
153    Lstring = 256
154
155    onewnc = NetCDFFile(filen, 'w')
156    # Dimensions
157    newdim = onewnc.createDimension('time', None)
158    newdim = onewnc.createDimension('plev', dimz)
159    newdim = onewnc.createDimension('Lstring', Lstring)
160
161    # Variable-dimensions
162    newvar = onewnc.createVariable('time', 'f8', ('time'))
163    ncvar.basicvardef(newvar, 'time', 'Time', tunits)
164    ncvar.set_attribute(newvar, 'calendar', 'standard')
165    newvar.setncattr('axis', 'T')
166    newvar.setncattr('_CoordinateAxisType', 'Time')
167
168    if ptime:
169        newvar = onewnc.createVariable('plev', 'f8', ('time','plev'))
170        ncvar.basicvardef(newvar, 'plev', 'air pressure', punits)
171        ncvar.set_attribute(newvar, 'down', 'up')
172        newvar.setncattr('axis', 'Z')
173        newvar.setncattr('_CoordinateAxisType', 'pressure')
174    else:
175        newvar = onewnc.createVariable('plev', 'f8', ('plev'))
176        ncvar.basicvardef(newvar, 'plev', 'air pressure', punits)
177        ncvar.set_attribute(newvar, 'down', 'up')
178        newvar.setncattr('axis', 'Z')
179        newvar.setncattr('_CoordinateAxisType', 'pressure')
180    onewnc.sync()
181
182    # station Variables
183    Llab = len(lab)
184    newvar = onewnc.createVariable('station', 'c', ('Lstring'))
185    newvar[0:Llab] = lab[:]
186    ncvar.basicvardef(newvar, 'station', 'Name of the station', '-')
187
188    newvar = onewnc.createVariable('lon', 'f8')
189    newvar[:] = lv
190    ncvar.basicvardef(newvar, 'lon', 'Longitude', 'degrees_west')
191    newvar.setncattr('axis', 'X')
192    newvar.setncattr('_CoordinateAxisType', 'Lon')
193   
194    newvar = onewnc.createVariable('lat', 'f8')
195    newvar[:] = Lv
196    ncvar.basicvardef(newvar, 'lat', 'Latitude', 'degrees_north')
197    newvar.setncattr('axis', 'Y')
198    newvar.setncattr('_CoordinateAxisType', 'Lat')
199   
200    newvar = onewnc.createVariable('height', 'f8')
201    newvar[:] = hv
202    ncvar.basicvardef(newvar, 'height', 'Height', 'm')
203    newvar.setncattr('axis', 'Z')
204    newvar.setncattr('_CoordinateAxisType', 'Height')
205    onewnc.sync()
206
207    newvar = onewnc.createVariable('flon', 'f8')
208    newvar[:] = lv
209    ncvar.basicvardef(newvar, 'file_lon', 'Longitude closest grid-point from file',  \
210      'degrees_west')
211    newvar.setncattr('axis', 'X')
212    newvar.setncattr('_CoordinateAxisType', 'Lon')
213   
214    newvar = onewnc.createVariable('flat', 'f8')
215    newvar[:] = Lv
216    ncvar.basicvardef(newvar, 'file_lat', 'Latitude closest grid-point from file',   \
217      'degrees_north')
218    newvar.setncattr('axis', 'Y')
219    newvar.setncattr('_CoordinateAxisType', 'Lat')
220   
221    newvar = onewnc.createVariable('fheight', 'f8')
222    newvar[:] = hv
223    ncvar.basicvardef(newvar, 'file_height', 'Height closest grid-point from file',  \
224      'm')
225    newvar.setncattr('axis', 'Z')
226    newvar.setncattr('_CoordinateAxisType', 'Height')
227
228    newvar = onewnc.createVariable('ipoint', 'i')
229    newvar[:] = 0
230    ncvar.basicvardef(newvar, 'file_i', 'x-axis closest grid-point from file', '-')
231
232    newvar = onewnc.createVariable('jpoint', 'i')
233    newvar[:] = 0
234    ncvar.basicvardef(newvar, 'file_j', 'y-axis closest grid-point from file', '-')
235
236    onewnc.sync()
237
238    # Variables
239    NOvarvals = np.ones((dimt,dimz), dtype=np.float)*gen.fillValueF
240    for vn in sndvars:
241        if not onewnc.variables.has_key(vn):
242            CFvalues = gen.variables_values(vn)
243            newvar = onewnc.createVariable(vn, 'f4', ('time', 'plev'),               \
244              fill_value=gen.fillValueF)
245            newvar[:] = NOvarvals[:]
246            ncvar.basicvardef(newvar, CFvalues[0], CFvalues[4].replace('|',' '),     \
247              CFvalues[5])
248
249    # Global attributes
250    ncvar.add_global_PyNCplot(onewnc, 'get_stations.py', fname, '0.1')
251    ncvar.set_attribute(newvar, 'data_origin', 'SMN')
252
253    onewnc.sync()
254    onewnc.close()
255
256    return
257
258
259#######    #######
260## MAIN
261    #######
262
263Wcomputed = {}
264for vn in diag.Wavailablediags:
265    Wcomputed[vn] = False
266
267Ccomputed = {}
268for vn in diag.Cavailablediags:
269    Ccomputed[vn] = False
270
271yrref = ReferenceDate[0:4]
272monref = ReferenceDate[4:6]
273dayref = ReferenceDate[6:8]
274horref = ReferenceDate[8:10]
275minref = ReferenceDate[10:12]
276secref = ReferenceDate[12:14]
277
278utime = UnitsTime + ' since ' + yrref + '-' + monref + '-' + dayref + ' ' + horref + \
279  ':' + minref + ':' + secref
280
281# surface stations
282if stcstatfile != 'None':
283    osfcstatf = open(sfcstatfile, 'r')
284
285    sfclonvals = []
286    sfclatvals = []
287    sfclabvals = []
288    sfchgtvals = []
289
290    for line in osfcstatf:
291        if line[0:1] != comchar and len(line) > 1:
292            vals = line.replace('\n','').split(sepchar)
293            if not gen.searchInlist(missvalS, vals[sfcloncol]) and                       \
294              not gen.searchInlist(missvalS, vals[sfclatcol]):
295                stlon = np.float(vals[sfcloncol])
296                stlat = np.float(vals[sfclatcol])
297                if stlon >= nlon and stlon <= xlon and stlat >= nlat and stlat <= xlat:
298                    sfclonvals.append(stlon)
299                    sfclatvals.append(stlat)
300                    sfclabvals.append(vals[sfclabcol])
301                    if gen.searchInlist(missvalS, vals[sfchgtcol]):
302                        if vals[sfchgtcol] == '0': 
303                            sfchgtvals.append(np.float(vals[sfchgtcol]))
304                        else: 
305                            sfchgtvals.append(gen.fillValueF)
306                    else:
307                        sfchgtvals.append(np.float(vals[sfchgtcol]))
308   
309    osfcstatf.close()
310    Nsfcstats = len(sfclonvals)
311    print '  Number of surface stations: ', Nsfcstats
312else:
313    Nsfcstats = 0
314    print '  No surface stations !!'
315
316# sounding stations
317if stcstatfile != 'None':
318    osndstatf = open(sndstatfile, 'r')
319
320    sndlonvals = []
321    sndlatvals = []
322    sndlabvals = []
323    sndhgtvals = []
324
325    for line in osndstatf:
326        if line[0:1] != comchar and len(line) > 1:
327            vals = line.replace('\n','').split(sepchar)
328            if vals[sndloncol] != missvalS and vals[sndlatcol] != missvalS:
329                stlon = np.float(vals[sndloncol])
330                stlat = np.float(vals[sndlatcol])
331                if stlon >= nlon and stlon <= xlon and stlat >= nlat and stlat <= xlat:
332                    sndlonvals.append(stlon)
333                    sndlatvals.append(stlat)
334                    sndlabvals.append(vals[sndlabcol])
335                    sndhgtvals.append(np.float(vals[sndhgtcol]))
336
337    osndstatf.close()
338    Nsndstats = len(sndlonvals)
339    print '  Number of sounding stations: ', Nsndstats
340else:
341    Nsndstats = 0
342    print '  No sounding stations !!'
343
344
345if not os.path.isfile(simfilen):
346    print gen.errormsg
347    print "  file '" + simfilen + "' does not exist !!"
348    quit(-1)
349
350onc = NetCDFFile(simfilen, 'r')
351olistv = onc.variables.keys()
352olistv.sort()
353
354# Getting basic values for each dimension
355dimvarvalues = {}
356for dimn in dimvariables.keys():
357    varn = dimvariables[dimn]
358    if not gen.searchInlist(NONcheckingvars, varn) and not gen.searchInlist(olistv, varn):
359        print gen.errormsg
360        print "  file '" + simfilen + "' does not have variable '" + varn + "' !!"
361        print '    available ones: ', olistv
362        quit(-1)
363
364    # Except for temporal variables, we don't want dimensions with time-axis
365    #  (assuming fixed)
366    if varn == 'WRFtime':
367        varvalues, CFtu= ncvar.compute_WRFtime(onc.variables['Times'], ReferenceDate,\
368          UnitsTime)
369        dt = varvalues.shape[0]
370        dimvarvalues[varn] = varvalues
371    else:
372        ovar = onc.variables[varn]
373        slicevar = {}
374        if not gen.searchInlist(axesvars['T'], varn):
375            for dn in ovar.dimensions:
376                if not gen.searchInlist(axesdims['T'], dn):
377                    slicevar[dn] = -1
378                else:
379                    slicevar[dn] = 0
380        else:
381            slicevar[dn] = -1
382            dt = len(onc.dimensions[dn])
383        slicevar, vardims = ncvar.SliceVarDict(ovar, slicevar)
384        dimvarvalues[varn] = ovar[tuple(slicevar)]
385
386    if dimn == Pressdimref: dz = len(onc.dimensions[dimn])
387
388# Retrieving surface data
389##
390
391# Diagnosted variables
392diagvars = {}
393
394# Coinident surface station
395sfccoinc = {}
396
397for ist in range(Nsfcstats):
398    jumpstation = False
399
400    lonv = sfclonvals[ist]
401    latv = sfclatvals[ist]
402    labelv = sfclabvals[ist]
403    heightv = sfchgtvals[ist]
404
405    stfilen = 'sfc_station_' + labelv + '.nc'
406
407    creation_sfcstation_file(stfilen, lonv, latv, heightv, labelv, utime,            \
408      sfcvariables.keys(), dt, simfilen)
409
410    onewnc = NetCDFFile(stfilen, 'a')
411
412    stationsji = np.ones((Nsfcstats,2), dtype=int)*gen.fillValueI
413    coincstats = np.ones((Nsfcstats), dtype=int)*gen.fillValueI
414
415    for sfcv in sfcvariables.keys():
416        fvn = sfcvariables[sfcv]
417        if not gen.searchInlist(NONcheckingvars,fvn) and                             \
418          not onewnc.variables.has_key(sfcv):
419            print gen.errormsg
420            print "  Newfile for the station '" + stfilen + "' does not content " +  \
421              " variable '" + sfcv + "' !!"
422            print '    variables:', onewnc.variables.keys()
423            quit(-1) 
424
425        if not gen.searchInlist(NONcheckingvars,fvn):
426            ogetvar = onc.variables[fvn]
427            getdims = ogetvar.dimensions
428        else:
429            getdims = ['Time', 'south_north', 'west_east']
430            getvdims = ['WRFtime', 'XLAT', 'XLONG']
431
432        # Looking for the X,Y axis for location of station within file
433        for dn in getdims:
434            axis = gen.dictionary_key_list(axesdims, dn)
435            if not dimvariables.has_key(dn):
436                print gen.errormsg
437                print "  dimension '" + dn + "' not ready in 'dimvariables' !!"
438                print '    add it to proceed'
439                quit(-1)
440            if axis == 'X':
441                lvals = dimvarvalues[dimvariables[dn]]
442                xdiff = (lvals-lonv)**2
443            elif axis == 'Y':
444                Lvals = dimvarvalues[dimvariables[dn]]
445                ydiff = (Lvals-latv)**2
446
447        # Looking for the closest point
448        diff = np.sqrt(xdiff + ydiff)
449        mindiff = np.min(diff)
450        minji = gen.index_mat(diff, mindiff)
451       
452        coincstats = (stationsji[:,0] - minji[0]) + (stationsji[:,1] - minji[1])
453        if np.any(coincstats == 0):
454            print '  Surface station coincidence by closest grid point from file !!'
455            iist = gen.index_vec(coincstats, 0)
456            print '  ' + labelv, '&', sfclabvals[iist]
457            onewnc.close()
458            sub.call('rm ' + stfilen, shell=True)
459            sub.call('cp ' + 'sfc_station_' + sfclabvals[iist] + '.nc ' + stfilen,   \
460              shell=True)
461            onewnc = NetCDFFile(stfilen, 'a')
462            ostlab = onewnc.variables['station']
463            Llab = len(labelv)
464            ostlab[0:Llab] = labelv
465            onewnc.sync()
466            onewnc.close()
467            if sfccoinc.has_key(sfclabvals[iist]):
468                lvals = sfccoinc[sfclabvals[iist]]
469                lvals.append(labelv)
470                sfccoinc[sfclabvals[iist]] = lvals
471            else:
472                sfccoinc[sfclabvals[iist]] = [labelv]
473            continue
474       
475        # Writting information to file
476        if sfcv == sfcrefvar:
477            ojvar = onewnc.variables['jpoint']
478            ojvar[:] = minji[0]
479            ojvar = onewnc.variables['ipoint']
480            ojvar[:] = minji[1]
481            onewnc.sync()
482
483        # Computing a single time the diagnosted variables
484        if gen.searchInlist(NONcheckingvars,fvn):
485            if ist == 0:
486                if fvn[0:3] == 'WRF':
487                    fvn_diag = fvn[3:len(fvn)]
488                    if not Wcomputed[fvn_diag]:
489                        # Using a given series of prepared diagnostics
490                        Wcomputed[fvn_diag] = True
491                        vardiag = diag.W_diagnostic(fvn_diag, onc,                  \
492                          sfcvariables, sndvariables, getdims, getvdims, CFdims)
493                        diagvars[fvn] = vardiag.values
494                elif fvn[0:2] == 'C_':
495                    fvn_diag = fvn.split('_')[1]
496                    if not Ccomputed[fvn_diag]:
497                        # Using a given series of prepared diagnostics
498                        Ccomputed[fvn_diag] = True
499                        vardiag = C_diagnostic(fvn_diag, onc, sfcvariables,          \
500                          sndvariables, CFdims)
501                        diagvars[fvn] = vardiag.values
502                ogetvar = diagvars[fvn]
503            else:
504                ogetvar = diagvars[fvn]
505               
506        slicevar = []
507        for dn in getdims:
508            axis = gen.dictionary_key_list(axesdims, dn)
509            if axis == 'X': slicevar.append(minji[1])
510            elif axis == 'Y': slicevar.append(minji[0])
511            else: slicevar.append(slice(0,len(onc.dimensions[dn])))
512
513        # Writting data and slicing
514        onewvar = onewnc.variables[sfcv]
515        onewvar[:] = ogetvar[tuple(slicevar)]   
516        onewnc.sync()
517
518    if jumpstation: continue
519
520    onewnc.close()
521
522if len(sfccoinc.keys()) > 0:
523    print 'Coincident surface stations _______'
524    gen.printing_dictionary(sfccoinc)
525
526# Retrieving sounding data
527
528# Diagnosted variables
529diagvars = {}
530
531# Coinident sounding station
532sndcoinc = {}
533
534for ist in range(Nsndstats):
535    jumpstation = False
536
537    lonv = sndlonvals[ist]
538    latv = sndlatvals[ist]
539    labelv = sndlabvals[ist]
540    heightv = sndhgtvals[ist]
541
542    stfilen = 'snd_station_' + labelv + '.nc'
543
544    creation_sndstation_file(stfilen, lonv, latv, heightv, labelv, utime, UnitsPress,\
545      presstime, sndvariables.keys(), dt, dz, simfilen)
546
547    onewnc = NetCDFFile(stfilen, 'a')
548
549    stationsji = np.ones((Nsfcstats,2), dtype=int)*gen.fillValueI
550    coincstats = np.ones((Nsfcstats), dtype=int)*gen.fillValueI
551
552    for sndv in sndvariables.keys():
553        fvn = sndvariables[sndv]
554        if not gen.searchInlist(NONcheckingvars,fvn) and                             \
555          not onewnc.variables.has_key(sndv):
556            print gen.errormsg
557            print "  Newfile for the station '" + stfilen + "' does not content " +  \
558              " variable '" + sndv + "' !!"
559            print '    variables:', onewnc.variables.keys()
560            quit(-1) 
561
562        if not gen.searchInlist(NONcheckingvars,fvn):
563            ogetvar = onc.variables[fvn]
564            getdims = ogetvar.dimensions
565        else:
566            getdims = ['Time', 'bottom_top', 'south_north', 'west_east']
567            getvdims = ['WRFtime', 'WRFp', 'XLAT', 'XLONG']
568
569        # Looking for the X,Y axis for location of station within file
570        for dn in getdims:
571            axis = gen.dictionary_key_list(axesdims, dn)
572            if not dimvariables.has_key(dn):
573                print gen.errormsg
574                print "  dimension '" + dn + "' not ready in 'dimvariables' !!"
575                print '    add it to proceed'
576                quit(-1)
577            if axis == 'X':
578                lvals = dimvarvalues[dimvariables[dn]]
579                xdiff = (lvals-lonv)**2
580            elif axis == 'Y':
581                Lvals = dimvarvalues[dimvariables[dn]]
582                ydiff = (Lvals-latv)**2
583
584        # Looking for the closest point
585        diff = np.sqrt(xdiff + ydiff)
586        mindiff = np.min(diff)
587        minji = gen.index_mat(diff, mindiff)
588       
589        coincstats = (stationsji[:,0] - minji[0]) + (stationsji[:,1] - minji[1])
590        if np.any(coincstats == 0):
591            print '  Sounding station coincidence by closest grid point from file !!'
592            iist = gen.index_vec(coincstats, 0)
593            print '  ' + labelv, '&', sndlabvals[iist]
594            onewnc.close()
595            sub.call('rm ' + stfilen, shell=True)
596            sub.call('cp ' + 'snd_station_' + sndlabvals[iist] + '.nc ' + stfilen,   \
597              shell=True)
598            onewnc = NetCDFFile(stfilen, 'a')
599            ostlab = onewnc.variables['station']
600            Llab = len(labelv)
601            ostlab[0:Llab] = labelv
602            onewnc.sync()
603            onewnc.close()
604            if sndcoinc.has_key(sndlabvals[iist]):
605                lvals = sfccoinc[sndlabvals[iist]]
606                lvals.append(labelv)
607                sndcoinc[sndlabvals[iist]] = lvals
608            else:
609                sndcoinc[sndlabvals[iist]] = [labelv]
610            continue
611       
612        # Writting information to file
613        if sfcv == sfcrefvar:
614            ojvar = onewnc.variables['jpoint']
615            ojvar[:] = minji[0]
616            ojvar = onewnc.variables['ipoint']
617            ojvar[:] = minji[1]
618            onewnc.sync()
619
620        # Computing a single time the diagnosted variables
621        if gen.searchInlist(NONcheckingvars,fvn):
622            if ist == 0:
623                if fvn[0:3] == 'WRF':
624                    fvn_diag = fvn[3:len(fvn)]
625                    if not Wcomputed[fvn_diag]:
626                        # Using a given series of prepared diagnostics
627                        Wcomputed[fvn_diag] = True
628                        vardiag = diag.W_diagnostic(fvn_diag, onc,                   \
629                          sfcvariables, sndvariables, getdims, getvdims, CFdims)
630                        diagvars[fvn] = vardiag.values
631                elif fvn[0:2] == 'C_':
632                    fvn_diag = fvn.split('_')[1]
633                    if not Ccomputed[fvn_diag]:
634                        # Using a given series of prepared diagnostics
635                        Ccomputed[fvn_diag] = True
636                        vardiag = diag.C_diagnostic(fvn_diag, onc, sfcvariables,     \
637                          sndvariables, CFdims)
638                        diagvars[fvn] = vardiag.values
639
640                ogetvar = diagvars[fvn]
641            else:
642                ogetvar = diagvars[fvn]
643               
644        slicevar = []
645        for dn in getdims:
646            axis = gen.dictionary_key_list(axesdims, dn)
647            if axis == 'X': slicevar.append(minji[1])
648            elif axis == 'Y': slicevar.append(minji[0])
649            else: slicevar.append(slice(0,len(onc.dimensions[dn])))
650
651        # Writting data and slicing
652        onewvar = onewnc.variables[sndv]
653        onewvar[:] = ogetvar[tuple(slicevar)]   
654        onewnc.sync()
655
656    if jumpstation: continue
657
658    onewnc.close()
659
660if len(sndcoinc.keys()) > 0:
661    print 'Coincident sounding stations _______'
662    gen.printing_dictionary(sndcoinc)
663
Note: See TracBrowser for help on using the repository browser.