source: trunk/UTIL/PYTHON/gcm.py @ 355

Last change on this file since 355 was 351, checked in by aslmd, 14 years ago

PYTHON GRAPHICS: for mesoscale files section with vertically interpolated fields with alitude or pressure (through api wrapper) is now supported. the same thing might be useful to be done with zrecast for GCM.

  • Property svn:executable set to *
File size: 10.3 KB
Line 
1#!/usr/bin/env python
2
3### T. Navarro + A. Spiga
4
5###########################################################################################
6###########################################################################################
7### What is below relate to running the file as a command line executable (very convenient)
8if __name__ == "__main__":
9    import sys
10    from optparse import OptionParser    ### to be replaced by argparse
11    from api_wrapper import api_onelevel
12    from netCDF4 import Dataset
13    from myplot import getlschar, separatenames, readslices, adjust_length
14    from os import system
15    from planetoplot import planetoplot
16    import numpy as np
17
18    #############################
19    ### Get options and variables
20    parser = OptionParser()
21    parser.add_option('-f', '--file',   action='append',dest='namefile', type="string",  default=None,  help='[NEEDED] name of WRF file (append). Plot files separated by comas in the same figure')
22    parser.add_option('-l', '--level',  action='store',dest='nvert',     type="string",  default="0",   help='level or start,stop,step (def=0)(-i 2: p,mbar)(-i 3,4: z,km)')
23    parser.add_option('-p', '--proj',   action='store',dest='proj',      type="string",  default=None,  help='projection')
24    parser.add_option('-b', '--back',   action='store',dest='back',      type="string",  default=None,  help='background image (def: None)')
25    parser.add_option('-t', '--target', action='store',dest='target',    type="string",  default=None,  help='destination folder')
26    parser.add_option('-s', '--stride', action='store',dest='stride',    type="int",     default=3,     help='stride vectors (def=3)')
27    parser.add_option('-v', '--var',    action='append',dest='var',      type="string",  default=None,  help='variable color-shaded (append)')
28    parser.add_option('-n', '--num',    action='store',dest='numplot',   type="int",     default=None,  help='plot number (def=2)(<0: plot LT -*numplot*)')
29    parser.add_option('-i', '--interp', action='store',dest='interp',    type="int",     default=None,  help='interpolation (2: p, 3: z-amr, 4:z-als)')
30    parser.add_option('-c', '--color',  action='store',dest='colorb',    type="string",  default="def", help='change colormap (nobar: no colorbar)')
31    parser.add_option('-x', '--no-vect',action='store_false',dest='winds',               default=True,  help='no wind vectors')
32    parser.add_option('-m', '--min',    action='append',dest='vmin',     type="float",   default=None,  help='bounding minimum value (append)')   
33    parser.add_option('-M', '--max',    action='append',dest='vmax',     type="float",   default=None,  help='bounding maximum value (append)') 
34    parser.add_option('-T', '--tiled',  action='store_true',dest='tile',                 default=False, help='draw a tiled plot (no blank zone)')
35    parser.add_option('-z', '--zoom',   action='store',dest='zoom',      type="float",   default=None,  help='zoom factor in %')
36    parser.add_option('-N', '--no-api', action='store_true',dest='nocall',               default=False, help='do not recreate api file')
37    parser.add_option('-d', '--display',action='store_false',dest='display',             default=True,  help='do not pop up created images')
38    parser.add_option('-e', '--itstep', action='store',dest='itstep',    type="int",     default=None,  help='stride time (def=4)')
39    parser.add_option('-H', '--hole',   action='store_true',dest='hole',                 default=False, help='holes above max and below min')
40    parser.add_option('-S', '--save',   action='store',dest='save',      type="string",  default="gui", help='save mode (png,eps,svg,pdf or gui)(def=gui)')
41    parser.add_option('-a', '--anomaly',action='store_true',dest='anomaly',              default=False, help='compute and plot relative anomaly in %')
42    parser.add_option('-w', '--with',   action='store',dest='var2',      type="string",  default=None,  help='variable contoured')
43    parser.add_option('--div',          action='store',dest='ndiv',      type="int",     default=10,    help='number of divisions in colorbar (def: 10)')
44    parser.add_option('-F', '--first',  action='store',dest='first',     type="int",     default=1,     help='first subscript to plot (def: 1)')
45    parser.add_option('--mult',         action='store',dest='mult',      type="float",   default=1.,    help='a multiplicative factor to plotted field')
46    parser.add_option('--title',        action='store',dest='zetitle',   type="string",  default="fill",help='customize the whole title')
47    #parser.add_option('-V', action='store', dest='comb',        type="float",   default=None,  help='a defined combination of variables')
48
49    ############# T.N. changes
50    #parser.add_option('-o','--operation',action='store',dest='operation',type="string",   default=None ,help='matrix of operations between files (for now see code, sorry)')
51    parser.add_option('--lat',          action='append',dest='slat',type="string",   default=None, help='slices along latitude. One value, or two values separated by comas for averaging')
52    parser.add_option('--lon',          action='append',dest='slon', type="string",   default=None, help='slices along longitude. One value, or two values separated by comas for averaging')
53    parser.add_option('--vert',         action='append',dest='svert',type="string",   default=None, help='slices along vertical axis. One value, or two values separated by comas for averaging') # quelles coordonnees ?
54    parser.add_option('--time',         action='append',dest='stime',type="string",   default=None, help='slices along time. One value, or two values separated by comas for averaging') # quelles coordonnees ?
55
56
57    (opt,args) = parser.parse_args()
58    if opt.namefile is None: 
59        print "I want to eat one file at least ! Use winds.py -f name_of_my_file. Or type winds.py -h"
60        exit()
61    if opt.var is None and opt.anomaly is True:
62        print "Cannot ask to compute anomaly if no variable is set"
63        exit()
64    print "Options:", opt
65
66    #listvar = ''
67    #if opt.var is None:
68    #    zerange = [-999999]
69    #else:
70    #    zelen = len(opt.var)
71    #    zerange = range(zelen)
72    #    #if zelen == 1: listvar = opt.var[0] + ','
73    #    #else         :
74    #    for jjj in zerange: listvar += opt.var[jjj] + ','
75    #    listvar = listvar[0:len(listvar)-1]
76    #    vmintab = adjust_length (opt.vmin, zelen) 
77    #    vmaxtab = adjust_length (opt.vmax, zelen)
78
79    print "namefile, length", opt.namefile, len(opt.namefile)
80
81    zeslat  = readslices(opt.slat)
82    zeslon  = readslices(opt.slon)
83    zesvert = readslices(opt.svert)
84    zestime = readslices(opt.stime)
85    print "slat,zeslat", opt.slat, zeslat
86    print "slon,zeslon", opt.slon, zeslon
87    print "svert,zesvert", opt.svert, zesvert
88    print "stime,zestime", opt.stime, zestime
89
90    for i in range(len(opt.namefile)):
91      for j in range(len(opt.var)):
92
93        zenamefiles = separatenames(opt.namefile[i])
94        print "zenamefiles", zenamefiles
95       
96        if opt.vmin is not None : zevmin  = opt.vmin[min(i,len(opt.vmin)-1)]
97        else: zevmin = None
98        if opt.vmax is not None : zevmax  = opt.vmax[min(i,len(opt.vmax)-1)]
99        else: zevmax = None
100        print "vmin, zevmin", opt.vmin, zevmin
101        print "vmax, zevmax", opt.vmax, zevmax
102       
103        zevar = separatenames(opt.var[j])
104        zevar = zevar[0]
105        print "var, zevar", opt.var, zevar
106       
107        #checkcoherence(len(zenamefiles),len(opt.slat),len(opt.slon),len(opt.stime))
108       
109        zefile = zenamefiles[0]
110             
111        #zelevel = opt.nvert   
112        stralt = None
113        [lschar,zehour,zehourin] = getlschar ( zefile )  ## getlschar from wrfout (or simply return "" if another file)
114   
115        inputnvert = separatenames(opt.nvert)
116        if np.array(inputnvert).size == 1:
117            zelevel = float(inputnvert[0])
118            ze_interp_levels = [-9999.]
119        else:
120            zelevel = -99.
121            ze_interp_levels = np.linspace(float(inputnvert[0]),float(inputnvert[1]),float(inputnvert[2]))
122        print 'level: ', zelevel
123        print 'interp_levels: ',ze_interp_levels
124
125        #####################################################
126        ### Call Fortran routines for vertical interpolations  -->  zrecast for GCM ?       
127        if opt.interp is not None:
128            if zelevel == 0. and opt.interp == 4:  zelevel = 0.010
129            ### winds or no winds
130            if opt.winds            :  zefields = 'uvmet'
131            else                    :  zefields = ''
132            ### var or no var
133            #if opt.var is None      :  pass
134            if zefields == ''       :  zefields = listvar
135            else                    :  zefields = zefields + "," + listvar
136            if opt.var2 is not None : zefields = zefields + "," + opt.var2 
137            print zefields
138            zefile = api_onelevel (  path_to_input   = '', \
139                                     input_name      = zefile, \
140                                     fields          = zefields, \
141                                     interp_method   = opt.interp, \
142                                     interp_level    = ze_interp_levels, \
143                                     onelevel        = zelevel, \
144                                     nocall          = opt.nocall )
145            print zefile
146            zelevel = 0 ## so that zelevel could play again the role of nvert
147
148
149        #############
150        ### Main call
151        name = planetoplot (zenamefiles,level=int(zelevel),vertmode=opt.interp,\
152                proj=opt.proj,back=opt.back,target=opt.target,stride=opt.stride,var=zevar,\
153                numplot=opt.numplot,colorb=opt.colorb,winds=opt.winds,\
154                addchar=lschar,interv=[zehour,zehourin],vmin=zevmin,vmax=zevmax,\
155                tile=opt.tile,zoom=opt.zoom,display=opt.display,\
156                itstep=opt.itstep,hole=opt.hole,save=opt.save,\
157                anomaly=opt.anomaly,var2=opt.var2,ndiv=opt.ndiv,first=opt.first,\
158                mult=opt.mult,zetitle=opt.zetitle,\
159                slon=zeslon,slat=zeslat,svert=zesvert,stime=zestime)
160        print 'Done: '+name
161        system("rm -f to_be_erased")
162 
163    #########################################################
164    ### Generate a .sh file with the used command saved in it
165    command = ""
166    for arg in sys.argv: command = command + arg + ' '
167    name = 'pycommand'
168    f = open(name+'.sh', 'w')
169    f.write(command)
Note: See TracBrowser for help on using the repository browser.