Changeset 891 in lmdz_wrf for trunk/tools
- Timestamp:
- Jun 19, 2016, 12:00:34 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/nc_var_tools.py
r890 r891 8810 8810 varoper = varv.copy() 8811 8811 for idim in range(len(varv.shape)): 8812 print 'Lluis:', idim, vardims[idim], operslice[idim],':',varoper.shape8813 8812 if operslice[idim]: 8814 8813 if oper == 'max': … … 8987 8986 8988 8987 dimvals = values.split(',')[0].split('@') 8989 dimsoper = values.split(',')[1] 8988 dimsoper = values.split(',')[1].split(':') 8990 8989 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,', ') 8994 8993 objnc = NetCDFFile(ncfile, 'r') 8995 8994 … … 9003 9002 9004 9003 ofile = 'file_oper_alongdims_' + operkind + '.nc' 9005 9006 if dimsoper.find(':') != -1:9007 dimstouse = dimsoper.split(':')9008 else:9009 dimstouse = [dimsoper]9010 9004 9011 9005 # Getting slice dimensions … … 9040 9034 tocompute = False 9041 9035 for vd in ov.dimensions: 9036 print 'Lluis vd:', vd, gen.searchInlist(dimsoper, vd) 9042 9037 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) 9046 9043 varvals0 = ov[tuple(varslice)] 9047 9044 varvals = np.squeeze(varvals0) … … 9052 9049 idn = 0 9053 9050 for dn in finaldims: 9051 print 'Lluis: dn unlimited;', dn, objnc.dimensions[dn].isunlimited(), idn 9054 9052 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]) 9057 9055 else: 9058 9056 objnewnc.createDimension(dn, None) 9059 9057 newNdim = newNdim + 1 9060 9058 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]) 9064 9062 else: 9065 9063 objnewnc.createDimension(dn, None) … … 9070 9068 varinf = variable_inf(ov) 9071 9069 if varinf.FillValue is not None: 9072 newvar = objnewnc.createVariable(vn + oper, nctype(varinf.dtype),\9070 newvar = objnewnc.createVariable(vn+operkind, nctype(varinf.dtype), \ 9073 9071 tuple(finaldims), fillValue=varinf.FillValue) 9074 9072 else: 9075 newvar = objnewnc.createVariable(vn + oper, nctype(varinf.dtype),\9073 newvar = objnewnc.createVariable(vn+operkind, nctype(varinf.dtype), \ 9076 9074 tuple(finaldims)) 9077 9075 newNvar = newNvar + 1 9076 newvar[:] = finalvarvals[:] 9078 9077 9079 9078 # new variable … … 9099 9098 ' along ' + dimsoperS, uname) 9100 9099 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 + ')' 9105 9115 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 9110 9152 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() 9114 9174 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 9115 9197 # global attributes 9116 9198 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' + \ 9118 9200 unichr(233) + 't' + unichr(233) + 'orologie Dynamique'), 'U') 9119 9201 objnewnc.setncattr('university', 'Pierre Marie Curie - Jussieu') … … 9139 9221 9140 9222 return 9141 9142 # LLUIS9143 9223 9144 9224 def file_oper_alongdims_old(values, ncfile, varn): … … 13027 13107 return slicevals 13028 13108 13029 def SliceVarDict(ovar,sliced cit):13109 def SliceVarDict(ovar,slicedict): 13030 13110 """ Function to slice a given variable throughout a dictionary 13031 13111 ovar= variable object to slice
Note: See TracChangeset
for help on using the changeset viewer.