Changeset 409 for trunk/UTIL


Ignore:
Timestamp:
Nov 22, 2011, 3:14:32 PM (14 years ago)
Author:
acolaitis
Message:

PYTHON. 1/ mcs.py now works on a list of 3D and 4D variables given by -v or --var (it will also put aps and bps in the diagfi). 2/ added option --intas which is a template for the -i 2 gcm interpolation. -i 2 --intas mcs will interpolate the field on the same pressure levels as mcs. Works also with --intas tes. 3/ Corrected a small bug in make_gcm_netcdf

Location:
trunk/UTIL/PYTHON
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/UTIL/PYTHON/make_netcdf.py

    r395 r409  
    2828      zznames=[[]]*nvar
    2929      for zvar in zvariables:
    30           zznames[i]="var"+np.string(i+1)
     30          zznames[i]="var"+str(i+1)
    3131          i=i+1
    3232   
  • trunk/UTIL/PYTHON/mcs.py

    r403 r409  
    2020   import numpy as np
    2121   from mymath import find_nearest
    22    from myplot import getfield
     22   from myplot import getfield,separatenames
    2323   from make_netcdf import make_gcm_netcdf
     24   from zrecast_wrapper import call_zrecast
    2425   parser = OptionParser()
    2526
     
    2829   parser.add_option('-f', '--file',   action='store',dest='file',     type="string",  default=None,  help='[NEEDED] filename.')
    2930   parser.add_option('-m', '--mfile',  action='store',dest='mcsfile',     type="string",  default=None,  help='[NEEDED] filename for MCS comparison.')
     31   parser.add_option('-v', '--var',    action='append',dest='var',      type="string",  default=None,  help='[NEEDED] Variables to process. (coma-separated list. aps and bps are always included.)')
    3032
    3133   #############################
     
    7577   ntimemax.set_fill_value([np.NaN])
    7678
    77    # Variables
    78 
    79    temp=getfield(nc,"temp")
    80    dimensions = np.array(temp).shape
    81    print "temp"
    82    print dimensions
    83    #aps=nc.variables["aps"][:]
    84    #bps=nc.variables["bps"][:]
    85 
     79   # Variables to treat
     80
     81   varz=[]
     82   varznames=separatenames(opt.var[0])
     83   n=0
     84   for zn in varznames:
     85       varz.append(getfield(nc,zn))
     86       print "Found: "+zn+" with dimensions: "
     87       print np.array(varz[n]).shape
     88       n=n+1
     89
     90   nzvar=len(varz)
     91   dimensions={}
     92   vv=0
     93   for var in varz:
     94       a=len(np.array(var).shape)
     95       if a == 3: dimensions[vv]=a
     96       elif a == 4: dimensions[vv]=a
     97       else:
     98          print "Warning, only 3d and 4d variables are supported for time-recasting"
     99          exit()
     100       vv=vv+1
     101
     102   # Variables to save but not treated (only along z, or phisinit-like files)
     103
     104   aps=nc.variables["aps"][:]
     105   bps=nc.variables["bps"][:]
     106   fullnames=["aps","bps"]
     107   for name in varznames:
     108       fullnames.append("d"+name)
     109       fullnames.append("n"+name)
     110   print "Will output: "
     111   print fullnames
    86112   #############################
    87113   ### Building
     
    92118   varday=np.zeros([len(timemcs),nz,ny,nx])
    93119   varnight=np.zeros([len(timemcs),nz,ny,nx])
    94    vardayout=np.ma.masked_invalid(varday)
    95    varnightout=np.ma.masked_invalid(varnight)
     120   vardayout=np.zeros([nzvar,len(timemcs),nz,ny,nx])
     121   varnightout=np.zeros([nzvar,len(timemcs),nz,ny,nx])
     122   vardayout=np.ma.masked_invalid(vardayout)
     123   varnightout=np.ma.masked_invalid(varnightout)
    96124   i=0
    97125   for ls in timemcs:
     
    100128       istart=find_nearest(lstime,lsstart,strict=True)
    101129       istop=find_nearest(lstime,lsstop,strict=True)
     130       varchk=0
    102131       if ((istart is np.NaN) or (istop is np.NaN)):
    103           vardayout[i,:,:,:]=np.NaN
    104           varnightout[i,:,:,:]=np.NaN
     132          vardayout[:,i,:,:,:]=np.NaN
     133          varnightout[:,i,:,:,:]=np.NaN
    105134          print "Time interval skipped. Ls MCS: (",lsstart,';',lsstop,')',"// Ls diagfi: (",lstime.min(),';',lstime.max(),')'
    106135          i=i+1
    107136          continue
    108137       print "--->> Processing Data. Ls MCS: (",lsstart,';',lsstop,')',"// Ls diagfi: (",lstime.min(),';',lstime.max(),')'
    109 
    110        varchk=temp[istart:istop,:,:,:]
    111        varchktime=time[istart:istop]
     138       # warning, python's convention is that the second index of array[a:b] is the array index of element after the one being picked last.
     139       # for that reason, array[0:0] is nan and array[0:1] is only one value. Hence, len(array[a:b+1]) is b-a+1 and not b-a+2
     140       print "     .initialisation."
     141       
     142       
     143       varchk=np.zeros([nzvar,istop-istart+1,nz,ny,nx])
     144       vv=0
     145       for variable in varz:
     146           if dimensions[vv] is 3:
     147              varchk[vv,:,0,:,:]=variable[istart:istop+1,:,:]
     148           else:
     149              varchk[vv,:,:,:,:]=variable[istart:istop+1,:,:,:]
     150           vv=vv+1
     151       varchktime=time[istart:istop+1]
    112152       ndays=np.floor(varchktime[len(varchktime)-1])-np.floor(varchktime[0])
    113153       dtmichk=dtimemin[i,:,:]
     
    129169   ### (yea it's complicated)
    130170
    131        vartmpnight=np.zeros([ndays,nz,ny,nx])
    132        vartmpday=np.zeros([ndays,nz,ny,nx])
     171       vartmpnight=np.zeros([nzvar,ndays,nz,ny,nx])
     172       vartmpday=np.zeros([nzvar,ndays,nz,ny,nx])
    133173       nd=0
    134        
    135 
     174       print "     .time indices MCS grid -> diagfi grid."
    136175       while nd < ndays:
    137176
     
    152191                nitntmichk=find_nearest(varchktime_lon,ntmichk[niy,nix])
    153192                nitntmachk=find_nearest(varchktime_lon,ntmachk[niy,nix])
    154                 if ((nitdtmichk is np.NaN) or (nitdtmachk is np.NaN)):
    155                     vartmpday[nd,:,iy,ix]=np.NaN
    156                 elif nitdtmichk > nitdtmachk:
    157                     vartmpday[nd,:,iy,ix]=(np.mean(varchk[daystart+nitdtmichk:daystop+1,:,iy,ix],axis=0)+np.mean(varchk[daystart:daystart+nitdtmachk+1,:,iy,ix],axis=0))/2.
    158                 else:
    159                     vartmpday[nd,:,iy,ix]=np.mean(varchk[daystart+nitdtmichk:daystart+nitdtmachk+1,:,iy,ix],axis=0)
    160                 if ((nitntmichk is np.NaN) or (nitntmachk is np.NaN)):
    161                     vartmpnight[nd,:,iy,ix]=np.NaN
    162                 elif nitntmichk > nitntmachk:
    163                     vartmpnight[nd,:,iy,ix]=(np.mean(varchk[daystart+nitntmichk:daystop+1,:,iy,ix],axis=0)+np.mean(varchk[daystart:daystart+nitntmachk+1,:,iy,ix],axis=0))/2.
    164                 else:                                                           
    165                     vartmpnight[nd,:,iy,ix]=np.mean(varchk[daystart+nitntmichk:daystart+nitntmachk+1,:,iy,ix],axis=0)
    166 
     193                for vv in np.arange(nzvar):
     194                   if ((nitdtmichk is np.NaN) or (nitdtmachk is np.NaN)):
     195                       vartmpday[vv,nd,:,iy,ix]=np.NaN
     196                   elif nitdtmichk > nitdtmachk:
     197                       vartmpday[vv,nd,:,iy,ix]=(np.mean(varchk[vv,daystart+nitdtmichk:daystop+1,:,iy,ix],axis=0)+np.mean(varchk[vv,daystart:daystart+nitdtmachk+1,:,iy,ix],axis=0))/2.
     198                   else:
     199                       vartmpday[vv,nd,:,iy,ix]=np.mean(varchk[vv,daystart+nitdtmichk:daystart+nitdtmachk+1,:,iy,ix],axis=0)
     200                   if ((nitntmichk is np.NaN) or (nitntmachk is np.NaN)):
     201                       vartmpnight[vv,nd,:,iy,ix]=np.NaN
     202                   elif nitntmichk > nitntmachk:
     203                       vartmpnight[vv,nd,:,iy,ix]=(np.mean(varchk[vv,daystart+nitntmichk:daystop+1,:,iy,ix],axis=0)+np.mean(varchk[vv,daystart:daystart+nitntmachk+1,:,iy,ix],axis=0))/2.
     204                   else:                                                           
     205                       vartmpnight[vv,nd,:,iy,ix]=np.mean(varchk[vv,daystart+nitntmichk:daystart+nitntmachk+1,:,iy,ix],axis=0)
    167206                iy=iy+1
    168207             ix=ix+1
    169208          nd=nd+1
    170209
     210       print "     .creating bins."
     211
    171212       vartmpdaymasked=np.ma.masked_invalid(vartmpday)
    172213       vartmpnightmasked=np.ma.masked_invalid(vartmpnight)
    173 
    174        vardayout[i,:,:,:]=np.ma.mean(vartmpdaymasked[:,:,:,:],axis=0)
    175        varnightout[i,:,:,:]=np.ma.mean(vartmpnightmasked[:,:,:,:],axis=0)
     214       for vv in np.arange(nzvar):
     215          vardayout[vv,i,:,:,:]=np.ma.mean(vartmpdaymasked[vv,:,:,:,:],axis=0)
     216          varnightout[vv,i,:,:,:]=np.ma.mean(vartmpnightmasked[vv,:,:,:,:],axis=0)
     217          print "          ."+varznames[vv]+".done"
    176218       i=i+1
     219
     220   print "--->> Preparing Data for ncdf. Missing value is NaN."
    177221
    178222   vardayout=np.ma.masked_invalid(vardayout)
     
    181225   varnightout.set_fill_value([np.NaN])
    182226
    183    vardayncdf=vardayout.filled()
    184    varnightncdf=varnightout.filled()
     227   all=[aps,bps]
     228   for vv in np.arange(nzvar):
     229       if dimensions[vv] == 3:
     230          all.append(vardayout[vv,:,0,:,:].filled())
     231          all.append(varnightout[vv,:,0,:,:].filled())
     232       elif dimensions[vv] == 4:
     233          all.append(vardayout[vv,:,:,:,:].filled())
     234          all.append(varnightout[vv,:,:,:,:].filled())
    185235
    186236   make_gcm_netcdf (zfilename="diagfi_MCS.nc", \
     
    190240                        zalt=alt, \
    191241                        ztime=timemcs, \
    192                         zvariables=[vardayncdf,varnightncdf], \
    193                         znames=["dtemp","ntemp"])
     242                        zvariables=all, \
     243                        znames=fullnames)
  • trunk/UTIL/PYTHON/myplot.py

    r405 r409  
    664664    fmtvar    =     { \
    665665             "TK":           "%.0f",\
     666# Variables from TES ncdf format
    666667             "T_NADIR_DAY":  "%.0f",\
    667668             "T_NADIR_NIT":  "%.0f",\
     669# Variables from tes.py ncdf format
    668670             "TEMP_DAY":     "%.0f",\
    669671             "TEMP_NIGHT":   "%.0f",\
     672# Variables from MCS and mcs.py ncdf format
     673             "DTEMP":     "%.0f",\
     674             "NTEMP":   "%.0f",\
    670675             "TPOT":         "%.0f",\
    671676             "TSURF":        "%.0f",\
  • trunk/UTIL/PYTHON/myscript.py

    r402 r409  
    2020    parser.add_option('-l', '--level',  action='store',dest='lvl',       type="string",  default="0",   help='level / start,stop,step (-i 2: p,mb)(-i 3,4: z,km) [0]')
    2121    parser.add_option('-i', '--interp', action='store',dest='itp',       type="int",     default=None,  help='interpolation (2: p, 3: z-amr, 4:z-als)')
     22    parser.add_option('--intas',        action='store',dest='intas',     type="string",  default=None,  help='specify "mcs" or "tes" for specific gcm pressure interpolation grid')
    2223    parser.add_option('-N', '--no-api', action='store_true',dest='nocall',               default=False, help='do not recreate api file')
    2324
  • trunk/UTIL/PYTHON/pp.py

    r392 r409  
    105105            interpolated_files=call_zrecast(interp_mode=opt.itp,\
    106106                    input_name=zefiles,\
    107                     fields=zevars)
     107                    fields=zevars,\
     108                    predifined=opt.intas)
    108109
    109110            zefiles=interpolated_files
     
    112113               interpolated_ref=call_zrecast(interp_mode=opt.itp,\
    113114                    input_name=[opt.fref],\
    114                     fields=zevars)
     115                    fields=zevars,\
     116                    predifined=opt.intas)
    115117
    116118               reffile=interpolated_ref[0]
  • trunk/UTIL/PYTHON/zrecast_wrapper.py

    r396 r409  
    44def call_zrecast (  interp_mode   = '4', \
    55                    input_name      = None, \
    6                     fields  = 'all'):
     6                    fields  = 'all', \
     7                    predifined = None):
    78
    89    import numpy as np
    910    from myplot import separatenames
    1011    from os import system
    11 
     12    pressure_axis_tes=[1658.152,1291.37,1005.72,783.2555,610.,475.0685,369.9837,288.1436,224.4065,174.7679,136.1094,106.0021,82.55452,64.29353,50.07185,38.99599,30.37011,23.65227,18.4204,14.34583,11.17254]
     13    pressure_axis_mcs=[1878.9, 1658.2, 1463.3, 1291.4, 1139.6, 1005.7, 887.54, 783.26,691.22, 610, 538.32, 475.07, 419.25, 369.98, 326.51, 288.14, 254.29,224.41, 198.04, 174.77, 154.23, 136.11, 120.12, 106, 93.547, 82.555,72.854, 64.294, 56.739, 50.072, 44.188, 38.996, 34.414, 30.37, 26.802,23.652, 20.873, 18.42, 16.256, 14.346, 12.66, 11.173, 9.8597, 8.7012,7.6788, 6.7765, 5.9802, 5.2775, 4.6574, 4.1101, 3.6272, 3.201, 2.8249,2.4929, 2.2, 1.9415, 1.7134, 1.512, 1.3344, 1.1776, 1.0392, 0.9171,0.80934, 0.71424, 0.63031, 0.55625, 0.49089, 0.43321, 0.3823, 0.33738,0.29774, 0.26275, 0.23188, 0.20463, 0.18059, 0.15937, 0.14064, 0.12412,0.10953, 0.096661, 0.085303, 0.07528, 0.066434, 0.058628, 0.051739,0.04566, 0.040294, 0.03556, 0.031381, 0.027694, 0.02444, 0.021568,0.019034, 0.016797, 0.014824, 0.013082, 0.011545, 0.010188, 0.0089909,0.0079345, 0.0070021, 0.0061794, 0.0054533, 0.0048125, 0.004247]
    1214    system("rm -f zrecast.auto.def")
    1315    system("touch zrecast.auto.def")
     
    2628        elif interp_mode == 2:
    2729             append="_P"
    28              system("echo 1 >> zrecast.auto.def")
    29              system("echo yes >> zrecast.auto.def")
    30              system("echo 370 0.1 >> zrecast.auto.def")  #I put that randomly! (a.c.)
    31              system("echo 20 >> zrecast.auto.def")
     30             if predifined is "TES":
     31                system("echo 1 >> zrecast.auto.def")
     32                system("echo no >> zrecast.auto.def")
     33                system("echo "+len(pressure_axis_tes)+" >> zrecast.auto.def")
     34                for zp in pressure_axis_tes:
     35                   system("echo "+zp+" >> zrecast.auto.def")
     36             elif predifined is "MCS":
     37                system("echo no >> zrecast.auto.def")
     38                system("echo "+len(pressure_axis_mcs)+" >> zrecast.auto.def")
     39                for zp in pressure_axis_mcs:
     40                   system("echo "+zp+" >> zrecast.auto.def")
     41             else:
     42                system("echo 1 >> zrecast.auto.def")
     43                system("echo yes >> zrecast.auto.def")
     44                system("echo 370 0.1 >> zrecast.auto.def")  #I put that randomly! (a.c.)
     45                system("echo 20 >> zrecast.auto.def")
    3246        else:
    3347             print "zrecast interp option unsupported for now. Exiting."
Note: See TracChangeset for help on using the changeset viewer.