Changeset 891 in lmdz_wrf for trunk/tools


Ignore:
Timestamp:
Jun 19, 2016, 12:00:34 AM (9 years ago)
Author:
lfita
Message:

Working new version of `operalong_dims'

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/nc_var_tools.py

    r890 r891  
    88108810    varoper = varv.copy()
    88118811    for idim in range(len(varv.shape)):
    8812         print 'Lluis:', idim, vardims[idim], operslice[idim],':',varoper.shape
    88138812        if operslice[idim]:
    88148813            if oper == 'max':
     
    89878986
    89888987    dimvals = values.split(',')[0].split('@')
    8989     dimsoper = values.split(',')[1]
     8988    dimsoper = values.split(',')[1].split(':')
    89908989    operkind = values.split(',')[2]
    8991     dimvn = values.split(',')[3]
    8992 
    8993     dimsoperS = gen.numVector_String(dimsoper.split(':'),', ')
     8990    dimvn = values.split(',')[3].split(':')
     8991
     8992    dimsoperS = gen.numVector_String(dimsoper,', ')
    89948993    objnc = NetCDFFile(ncfile, 'r')
    89958994
     
    90039002   
    90049003    ofile = 'file_oper_alongdims_' + operkind + '.nc'
    9005 
    9006     if dimsoper.find(':') != -1:
    9007         dimstouse = dimsoper.split(':')
    9008     else:
    9009         dimstouse = [dimsoper]
    90109004
    90119005# Getting slice dimensions
     
    90409034        tocompute = False
    90419035        for vd in ov.dimensions:
     9036            print 'Lluis vd:', vd, gen.searchInlist(dimsoper, vd)
    90429037            if gen.searchInlist(dimsoper, vd): tocompute = True
    9043 
    9044         if tocopmute:
    9045             varslice, varsliceddims = VarSliceDict(ov,dimslice)
     9038   
     9039        print 'Lluis tocompute:', tocompute, ov.dimensions, dimsoper
     9040
     9041        if tocompute:
     9042            varslice, varsliceddims = SliceVarDict(ov,dimslice)
    90469043            varvals0 = ov[tuple(varslice)]
    90479044            varvals = np.squeeze(varvals0)
     
    90529049            idn = 0
    90539050            for dn in finaldims:
     9051                print 'Lluis: dn unlimited;', dn, objnc.dimensions[dn].isunlimited(), idn
    90549052                if newNdim == 0:
    9055                     if not objnc.dimensions[dn].isunlimited:
    9056                         objnewnc.createDimension(dn, finalvarvals[idn])
     9053                    if not objnc.dimensions[dn].isunlimited():
     9054                        objnewnc.createDimension(dn, finalvarvals.shape[idn])
    90579055                    else:
    90589056                        objnewnc.createDimension(dn, None)
    90599057                    newNdim = newNdim + 1
    90609058                else:
    9061                     if not gen.searchInlist(objnewnc, dn):
    9062                         if not objnc.dimensions[dn].isunlimited:
    9063                             objnewnc.createDimension(dn, finalvarvals[idn])
     9059                    if not gen.searchInlist(objnewnc.dimensions, dn):
     9060                        if not objnc.dimensions[dn].isunlimited():
     9061                            objnewnc.createDimension(dn, finalvarvals.shape[idn])
    90649062                        else:
    90659063                            objnewnc.createDimension(dn, None)
     
    90709068            varinf = variable_inf(ov)
    90719069            if varinf.FillValue is not None:
    9072                 newvar = objnewnc.createVariable(vn + oper, nctype(varinf.dtype),    \
     9070                newvar = objnewnc.createVariable(vn+operkind, nctype(varinf.dtype),  \
    90739071                  tuple(finaldims), fillValue=varinf.FillValue)
    90749072            else:
    9075                 newvar = objnewnc.createVariable(vn + oper, nctype(varinf.dtype),    \
     9073                newvar = objnewnc.createVariable(vn+operkind, nctype(varinf.dtype),  \
    90769074                  tuple(finaldims))
    90779075                newNvar = newNvar + 1
     9076            newvar[:] = finalvarvals[:]
    90789077
    90799078# new variable
     
    90999098              ' along ' + dimsoperS, uname)
    91009099
    9101             newvar[:] = newvarv
    9102             for idim in range(len(objvar.shape)):
    9103                 if dimvals.find('|') != -1:
    9104                     dimn = dimvals.split('|')[idim].split(':')[0]
     9100            for idim in ov.dimensions:
     9101                for dv in dimslice.keys():
     9102                    if dv == idim:
     9103                        if type(dimslice[dv]) == type([2]):
     9104                            Sdv = gen.numVector_Sring(dimslice[dv],', ')
     9105                        elif type(dimslice[dv]) == type(int(2)):
     9106                            if dimslice[dv] == -1:
     9107                                Sdv = str(len(objnc.dimensions[idim])) + ', 1'
     9108                            else:
     9109                                Sdv = str(dimslice[dv])
     9110                    else:
     9111                        Sdv = str(len(objnc.dimensions[idim]))
     9112 
     9113                if idim == ov.dimensions[0]:
     9114                    origdimsS = idim + '(' + Sdv + ')'
    91059115                else:
    9106                     dimn = dimvals.split(':')[0]
    9107                 dimv = '{:d}'.format(len(objnc.dimensions[dimn]))
    9108                 if idim == 0:
    9109                     origdimsS = dimn + '(' + dimv + ')'
     9116                    origdimsS = origdimsS + ' ' + idim + '(' + Sdv + ')'
     9117
     9118            newattr = set_attribute(newvar, 'orig_dimensions', origdimsS)
     9119            objnewnc.sync()
     9120   
     9121# variable dimension
     9122    for vn in dimvn:
     9123        print "'" + vn + "' ... .. ."
     9124        if not objnc.variables.has_key(vn):
     9125            print errormsg
     9126            print '  ' + fname + ': netCDF file "' + ncfile +                        \
     9127              '" does not have variable "' + vn + '" !!'
     9128            quit(-1)
     9129
     9130        # Do we have to compute this variable?
     9131        ov = objnc.variables[vn]
     9132        tocompute = False
     9133        for vd in ov.dimensions:
     9134            if gen.searchInlist(dimsoper, vd): tocompute = True
     9135   
     9136        if tocompute:
     9137            varslice, varsliceddims = SliceVarDict(ov,dimslice)
     9138            varvals0 = ov[tuple(varslice)]
     9139            varvals = np.squeeze(varvals0)
     9140
     9141            finalvarvals, finaldims = operdim(varvals, varsliceddims, dimsoper, operkind)
     9142
     9143            # Adding dimensions
     9144            idn = 0
     9145            for dn in finaldims:
     9146                if newNdim == 0:
     9147                    if not objnc.dimensions[dn].isunlimited():
     9148                        objnewnc.createDimension(dn, finalvarvals.shape[idn])
     9149                    else:
     9150                        objnewnc.createDimension(dn, None)
     9151                    newNdim = newNdim + 1
    91109152                else:
    9111                     origdimsS = origdimsS + ' ' + dimn + '(' + dimv + ')'
    9112 
    9113             newattr = set_attribute(newvar, 'orig_dimensions', origdimsS)
     9153                    if not gen.searchInlist(objnewnc.dimensions, dn):
     9154                        if not objnc.dimensions[dn].isunlimited():
     9155                            objnewnc.createDimension(dn, finalvarvals.shape[idn])
     9156                        else:
     9157                            objnewnc.createDimension(dn, None)
     9158                        newNdim = newNdim + 1
     9159                idn = idn + 1
     9160
     9161            # Adding variable
     9162            varinf = variable_inf(ov)
     9163            if varinf.FillValue is not None:
     9164                newvar = objnewnc.createVariable(vn, nctype(varinf.dtype),           \
     9165                  tuple(finaldims), fillValue=varinf.FillValue)
     9166            else:
     9167                newvar = objnewnc.createVariable(vn, nctype(varinf.dtype),           \
     9168                  tuple(finaldims))
     9169                newNvar = newNvar + 1
     9170            newvar[:] = finalvarvals[:]
     9171
     9172# new variable
     9173            oldvarattr = ov.ncattrs()
    91149174   
     9175            varname = gen.variables_values(vn)[0]
     9176            if gen.searchInlist(oldvarattr, 'standard_name'):
     9177                stdname = ov.getncattr('standard_name')
     9178            else:
     9179                stdname = gen.variables_values(vn)[1]
     9180       
     9181            if gen.searchInlist(oldvarattr, 'long_name'):
     9182                lname = ov.getncattr('long_name')
     9183            else:
     9184                lname = gen.variables_values(vn)[4].replace('|',' ')
     9185
     9186            if gen.searchInlist(oldvarattr, 'units'):
     9187                uname = ov.getncattr('units')
     9188            else:
     9189                uname = gen.variables_values(vn)[5]
     9190   
     9191            newattr = basicvardef(newvar, stdname + operkind, lname + ' '+ operkind +\
     9192              ' along ' + dimsoperS, uname)
     9193
     9194            objnewnc.sync()
     9195
     9196
    91159197# global attributes
    91169198    objnewnc.setncattr('author', 'L. Fita')
    9117     newattr = set_attributek(newncobj, 'institution', unicode('Laboratoire de M' +   \
     9199    newattr = set_attributek(objnewnc, 'institution', unicode('Laboratoire de M' +   \
    91189200      unichr(233) + 't' + unichr(233) + 'orologie Dynamique'), 'U')
    91199201    objnewnc.setncattr('university', 'Pierre Marie Curie - Jussieu')
     
    91399221
    91409222    return
    9141 
    9142 # LLUIS
    91439223
    91449224def file_oper_alongdims_old(values, ncfile, varn):
     
    1302713107    return slicevals
    1302813108
    13029 def SliceVarDict(ovar,slicedcit):
     13109def SliceVarDict(ovar,slicedict):
    1303013110    """ Function to slice a given variable throughout a dictionary
    1303113111      ovar= variable object to slice
Note: See TracChangeset for help on using the changeset viewer.