Changeset 1847 in lmdz_wrf
- Timestamp:
- Mar 23, 2018, 2:28:02 PM (7 years ago)
- Location:
- trunk/tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/nc_var.py
r1846 r1847 18 18 ## e.g. # nc_var.py -o WRF_to_newCF -f wrfout_d01_1995-01-01_00\:00\:00 -S 'XLONG:XLAT:Times:19491201000000:minutes' -v QVAPOR,T2,Q2 19 19 ## e.g. # nc_var.py -o reconstruct_matrix_from_vector -f cruncep_halfdeg_1958.nc -S 'nav_lon:nav_lat:-90.:-7.:-67.:15.:latlon:0.5:0.5:0.05' -v all 20 ## e.g. # nc_var.py -o CFmorzization -S 'X|west_east|XLONG,Y|south_north|XLAT,T|Time s|WRFtime,Z|bottom_top|ZNU:GlobalAttr1995.inf:proj1995.inf' -f ~/PY/wrfout_d01_1995-01-01_00\:00\:00 -v QFX20 ## e.g. # nc_var.py -o CFmorzization -S 'X|west_east|XLONG,Y|south_north|XLAT,T|Time|WRFtime,Z|bottom_top|ZNU:GlobalAttr1995.inf:proj1995.inf' -f ~/PY/wrfout_d01_1995-01-01_00\:00\:00 -v QFX 21 21 22 22 ## e.g. ccrc468-17 # ./nc_var.py -v time -f 123/CCRC_NARCliM_Sydney_All_1990-1999_pr10max.nc -o out -S 1:-1 -
trunk/tools/nc_var_tools.py
r1846 r1847 22825 22825 oncvars.sort() 22826 22826 22827 # Axes information 22827 # Axes information: dimensions and variables dependency 22828 # CF-dimensions of a given axis 22828 22829 CFdimvals = {} 22830 # axis values from filer 22829 22831 filedimvals = {} 22832 # CD-fimensions of the CF-variables for each axis 22830 22833 CFaxisvardimvals = {} 22831 for axn in ax isinf.keys():22834 for axn in axes: 22832 22835 axisv = axisinf[axn] 22833 22836 dimn = axisv[0] … … 22857 22860 # CF values of axis 22858 22861 CFdimvalues = gen.CFcorValues(axn) 22859 print ' ' + axn + " ..."22860 print ' dimension in file:', dimn, ' variable in file:', vardimn22861 print ' CF-values _______'22862 print ' dimn:', CFdimvalues['dimn']22863 print ' variable-dimension. standard_name:', CFdimvalues['stdn'], \22864 'long_name:', CFdimvalues['longname'], 'units', CFdimvalues['longname'], \22865 'max, allowed rank:', CFdimvalues['maxrank']22866 print ' others:'22867 for ivn in CFdimvalues.keys():22868 if ivn != 'dimn' and ivn != 'stdn' and ivn != 'longname' and \22869 ivn != 'units' and ivn != 'maxrank':22870 printivn, ':', CFdimvalues[ivn]22862 #print ' ' + axn + " ..." 22863 #print ' dimension in file:', dimn, ' variable in file:', vardimn 22864 #print ' CF-values _______' 22865 #print ' dimn:', CFdimvalues['dimn'] 22866 #print ' variable-dimension. standard_name:', CFdimvalues['stdn'], \ 22867 # 'long_name:', CFdimvalues['longname'], 'units', CFdimvalues['longname'], \ 22868 # 'max, allowed rank:', CFdimvalues['maxrank'] 22869 #print ' others:' 22870 #for ivn in CFdimvalues.keys(): 22871 # if ivn != 'dimn' and ivn != 'stdn' and ivn != 'longname' and \ 22872 # ivn != 'units' and ivn != 'maxrank': 22873 # print ' ', ivn, ':', CFdimvalues[ivn] 22871 22874 22872 22875 # File values of the axis and assigning dimension length from rank in file … … 22874 22877 if len(oaxisv.shape) == CFdimvalues['maxrank']: 22875 22878 axisv = oaxisv[:] 22876 if CFdimvalues['length'] != -1: CFdimvalues['length'] = oaxisv.shape[0]22879 if CFdimvalues['length'] != -1: CFdimvalues['length'] = oaxisv.shape[0] 22877 22880 CFvardimvalues.append(dimn) 22878 22881 elif len(oaxisv.shape) == CFdimvalues['maxrank'] + 1: … … 22887 22890 for dn in oaxisv.dimensions: 22888 22891 if dn == dimTn: varslice.append(0) 22889 else: 22890 CFvardimvalues.append(d imn)22892 else: 22893 CFvardimvalues.append(dn) 22891 22894 varslice.append(slice(0,len(onc.dimensions[dn]))) 22892 22895 if dn == dimn and CFdimvalues['length'] != -1: … … 22938 22941 else: Sfreq = 'UNKNOWN' 22939 22942 22943 print 'Values for variables-axes from file ________' 22944 for axn in axes: 22945 print ' ', axn 22946 print ' ', CFaxisvardimvals[axn] 22947 filecfdimn = {} 22948 # Axis variables have file-dimensions, transform them to CF ones 22949 for axn in axes: 22950 filedimaxes = CFaxisvardimvals[axn] 22951 # Looking for the equivalency file_dim --> CF_dim 22952 cfdimaxes = [] 22953 for fdn in filedimaxes: 22954 if not filecfdimn.has_key(fdn): filecfdimn[fdn] = None 22955 for axn1 in axes: 22956 axinf = axisinf[axn1] 22957 cfaxinf = CFdimvals[axn1] 22958 if axinf[0] == fdn: 22959 cfdimaxes.append(cfaxinf['dimn']) 22960 if filecfdimn[fdn] is None: filecfdimn[fdn] = cfaxinf['dimn'] 22961 break 22962 if filecfdimn[fdn] is None: 22963 print errormsg 22964 print ' ' + fname + ": No CF dimension has been found for file " + \ 22965 "dimension '" + fdn + "' !!" 22966 onc.close() 22967 quit(-1) 22968 22969 CFaxisvardimvals[axn] = cfdimaxes 22970 print 'file --> CF equivalencies of dimensions _______' 22971 print filecfdimn 22940 22972 print 'Values for axes ________' 22941 print CFdimvals 22973 for axn in axes: 22974 print ' ', axn 22975 print ' ', CFdimvals[axn] 22942 22976 print 'Values for variables-axes ________' 22943 print CFaxisvardimvals 22977 for axn in axes: 22978 print ' ', axn, ':', CFaxisvardimvals[axn] 22944 22979 22945 22980 # Processing variables in file … … 22965 23000 varaxes = [] 22966 23001 CFvardims = [] 22967 for axn in axes: 23002 for vdn in ovar.dimensions: 23003 CFvardims.append(filecfdimn[vdn]) 22968 23004 axisv = axisinf[axn] 22969 dimn = axisv[0]22970 if gen.searchInlist(ovar.dimensions, dimn):22971 varaxes.append(axn)22972 CFvardims.append(CFdimvals[axn]['dimn'])23005 for axn1 in axes: 23006 axv = CFdimvals[axn1] 23007 if axv['dimn'] == filecfdimn[vdn]: 23008 varaxes.append(axn1) 22973 23009 22974 23010 filen = gattr['institute_id'] + '_' + cfvarn + '_' + gattr['CORDEX_domain'] +\ … … 22982 23018 for axn in varaxes: 22983 23019 dvals = CFdimvals[axn] 22984 newdim = onewnc.createDimension(dvals['dimn'], dvals['length']) 23020 if not gen.searchInlist(onewnc.dimensions, dvals['dimn']): 23021 print infmsg 23022 print ' ' + fname + ": creation of dimension '" + dvals['dimn'] + \ 23023 "' : ", dvals['length'] 23024 newdim = onewnc.createDimension(dvals['dimn'], dvals['length']) 22985 23025 22986 23026 # Definition only of that variables-coordinates from the axes in the variable 22987 23027 for axn in varaxes: 22988 23028 dvals = CFdimvals[axn] 22989 print 'Lluis: ', CFaxisvardimvals[axn]22990 newvar = onewnc.createVariable(dvals['dimn'], 'f8',\22991 tuple(CFaxisvardimvals[axn]))22992 basicvardef(newvar, dvals['stdn'], dvals['longname'], dvals['units'])22993 for ivn in dvals.keys():22994 if ivn != 'dimn' and ivn != 'stdn' and ivn != 'longname' and\22995 ivn != 'units' and ivn != 'maxrank' and ivn != 'length':22996 set_attribute(newvar,ivn,dvals[ivn])23029 if not gen.searchInlist(onewnc.variables.keys(), dvals['dimn']): 23030 newvar = onewnc.createVariable(dvals['dimn'], 'f8', \ 23031 tuple(CFaxisvardimvals[axn])) 23032 basicvardef(newvar, dvals['stdn'], dvals['longname'], dvals['units']) 23033 for ivn in dvals.keys(): 23034 if ivn != 'dimn' and ivn != 'stdn' and ivn != 'longname' and \ 23035 ivn != 'units' and ivn != 'maxrank' and ivn != 'length': 23036 set_attribute(newvar,ivn,dvals[ivn]) 22997 23037 22998 23038 # Variable 22999 newvar=onewnc.createVariable(cfvarn, 'f4', tuple(CFvardims), \ 23000 fill_Value=gen.fillValueR) 23001 basicvardef(newvar, stdvarn, longvarn, utsvarn) 23002 set_attribute(newvar, 'coordinates', ' '.join(CFvardims)) 23003 # Setting values, but taking into account pre-existing masked values 23004 varv = ovar[:] 23005 if type(varv) == type(gen.mamat): 23006 imaskv = varv.fill_value 23007 varv = np.where(varv == fill_value, gen.fillValueR, varv) 23008 23009 newvar[:] = varv[:] 23039 if not gen.searchInlist(onewnc.variables.keys(), cfvarn): 23040 print infmsg 23041 print ' ' + fname + ": creation of variable '" + cfvarn + "(" + \ 23042 ', '.join(CFvardims) + ")' ..." 23043 newvar=onewnc.createVariable(cfvarn, 'f4', tuple(CFvardims), \ 23044 fill_value=gen.fillValueF) 23045 basicvardef(newvar, stdvarn, longvarn, utsvarn) 23046 set_attribute(newvar, 'coordinates', ' '.join(CFvardims)) 23047 # Setting values, but taking into account pre-existing masked values 23048 varv = ovar[:] 23049 if type(varv) == type(gen.mamat): 23050 imaskv = varv.fill_value 23051 varv = np.where(varv == fill_value, gen.fillValueF, varv) 23052 23053 newvar[:] = varv[:] 23010 23054 onewnc.sync() 23011 23055 23012 23056 # Global attributes 23013 for attrn in gattr N:23057 for attrn in gattr.keys(): 23014 23058 set_attribute(onewnc, attrn, gattr[attrn]) 23015 23059
Note: See TracChangeset
for help on using the changeset viewer.