Changeset 814 in lmdz_wrf
- Timestamp:
- Jun 12, 2016, 2:12:37 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/nc_var_tools.py
r811 r814 14852 14852 #Partialmap_Entiremap('longitude,latitude,std,5000.,lonlat_dxdyFix', '/home/lluis/etudes/DYNAMICO/ORCHIDEE/interpolation/data/carteveg5km.nc', 'vegetation_map') 14853 14853 #Partialmap_Entiremap('longitude,latitude,std,5000.,lonlat', '/home/lluis/etudes/DYNAMICO/ORCHIDEE/interpolation/data/carteveg5km.nc', 'vegetation_map') 14854 14855 def lonlatvarsFile(lonvals,latvals,dnx,dny,oLlnc): 14856 """ Functino to CF-define the longitudes and latitudes variables within a file 14857 lonvals= 2D matrix with longitudes 14858 latvals= 2D matrix with latitudes 14859 dn[x/y]= names of the x and y dimensions 14860 oLlnc= netCDF file object where to write the lon,lats 14861 """ 14862 fname = 'lonlatvarsFile' 14863 14864 if len(lonvals.shape) != 2: 14865 print errormsg 14866 print ' ' + fname +': wrong shape:',lonvals.shape," of 'lons' variable, " + \ 14867 'must be 2D !!' 14868 quit(-1) 14869 if len(latvals.shape) != 2: 14870 print errormsg 14871 print ' ' + fname +': wrong shape:',latvals.shape," of 'lats' variable, " + \ 14872 'must be 2D !!' 14873 quit(-1) 14874 dx = lonvals.shape[1] 14875 dy = lonvals.shape[0] 14876 14877 if not gen.searchInlist(oLlnc.dimensions, dnx): 14878 print errormsg 14879 print ' ' + fname + ': netCDF object does not have x dimension: ', dnx,"' !!" 14880 quit(-1) 14881 if not gen.searchInlist(oLlnc.dimensions, dny): 14882 print errormsg 14883 print ' ' + fname + ': netCDF object does not have y dimension: ', dny,"' !!" 14884 quit(-1) 14885 14886 # Creation of dimension variables 14887 newvar = oLlnc.createVariable('lon', 'f8', (dny,dnx)) 14888 basicvardef(newvar, 'longitude', 'Longitude','degrees_East') 14889 newvar[:] = lonvals 14890 newvar.setncattr('axis', 'X') 14891 newvar.setncattr('_CoordinateAxisType', 'Lon') 14892 14893 newvar = oLlnc.createVariable('lat', 'f8', (dny,dnx)) 14894 basicvardef(newvar, 'latitude', 'Latitude','degrees_North') 14895 signlat = latvals[1,0] - latvals[0,0] 14896 newvar[:] = latvals 14897 14898 newvar.setncattr('axis', 'Y') 14899 newvar.setncattr('_CoordinateAxisType', 'Lat') 14900 14901 return 14902 14903 def subbasin(values, ncfile): 14904 """ Function to retrieve the subbasin (all the sub-flows untila a given lon,lat) 14905 values=[subname],[sublon],[sublat] 14906 subname: name for the subbasin ('!' for spaces) 14907 sub[lon/lat]: longitude and latitude of the subbasin point 14908 """ 14909 fname = 'subbasin' 14910 14911 if values == 'h': 14912 print fname + '_____________________________________________________________' 14913 print subbasin.__doc__ 14914 quit() 14915 14916 arguments = '[subnmame],[sublon],[sublat]' 14917 gen.check_arguments(fname, values, arguments, ',') 14918 14919 ofile = 'subbasin.nc' 14920 14921 onc = NetCDFFile(ncfile, 'r') 14922 14923 subname = values.split(',')[0].replace('!',' ') 14924 sublon = np.float(values.split(',')[1]) 14925 sublat = np.float(values.split(',')[2]) 14926 14927 if ncfile == 'routing.nc': 14928 lonname = 'nav_lon' 14929 latname = 'nav_lat' 14930 tripname = 'trip' 14931 else: 14932 print errormsg 14933 print ' ' + fname + ": file '" + ncfile + "' not ready!!" 14934 quit(-1) 14935 14936 olons = onc.variables[lonname] 14937 olats = onc.variables[latname] 14938 ooutflows = onc.variables[tripname] 14939 # Flipping the routing file 14940 lons = olons[:] 14941 lats = olats[:] 14942 outflows = ooutflows[:] 14943 14944 onc.close() 14945 14946 difflonlat = np.sqrt((lons - sublon)**2 + (lats - sublat)**2) 14947 mindifflonlat = np.min(difflonlat) 14948 isub = gen.index_mat(difflonlat, mindifflonlat) 14949 print ' ' + fname + "initial point of subbasin '" + subname + "' in the " + \ 14950 'matrix:', isub 14951 14952 masksubbasin, subflows, subflowspt = gen.subbasin_point(outflows, isub) 14953 14954 onewnc = NetCDFFile(ofile, 'w') 14955 14956 dx = outflows.shape[1] 14957 dy = outflows.shape[0] 14958 14959 # Number of sub-flows within the sub-basin 14960 Nsubflows = len(subflows.keys()) 14961 14962 # Maximum number of grid points of a sub-flow 14963 Nmaxgridsubflow = -1 14964 Ngridpoint = 0 14965 for subflow in subflows.keys(): 14966 Ngridsubflow = len(subflows[subflow]) 14967 Ngridpoint = Ngridpoint + Ngridsubflow 14968 if Ngridsubflow > Nmaxgridsubflow: Nmaxgridsubflow = Ngridsubflow 14969 14970 # Creation of dimensions 14971 Lstr = 50 14972 newdim = onewnc.createDimension('x', dx) 14973 newdim = onewnc.createDimension('y', dy) 14974 newdim = onewnc.createDimension('Nsubflow', Nsubflows) 14975 newdim = onewnc.createDimension('Lstring', Lstr) 14976 newdim = onewnc.createDimension('Ngridsubflow', Nmaxgridsubflow) 14977 14978 if ncfile == 'routing.nc': 14979 lonlatvarsFile(lons, lats[::-1,:], 'x', 'y', onewnc) 14980 else: 14981 lonlatvarsFile(lons, lats, 'x', 'y', onewnc) 14982 14983 # Creation of variables 14984 newvar = onewnc.createVariable('subbasin', 'c', ('Lstring')) 14985 for ic in range(len(subname)): 14986 newvar[ic] = subname[ic:ic+1] 14987 newattr = set_attributek(newvar,'Ngridpoint',Ngridpoint,'I') 14988 newattr = set_attributek(newvar,'Nsubflow',Nsubflows,'I') 14989 newattr = set_attributek(newvar,'lon',sublon,'R') 14990 newattr = set_attributek(newvar,'lat',sublat,'R') 14991 onewnc.sync() 14992 14993 newvar = onewnc.createVariable('subbasinmask','i',('y','x')) 14994 vardef = basicvardef(newvar, 'subbasinmask', 'mask of the subbasin','1') 14995 if ncfile == 'routing.nc': 14996 newvar[:] = masksubbasin[::-1,:] 14997 else: 14998 newvar[:] = masksubbasin 14999 newattr = set_attributek(newvar,'coordinates','lon lat','S') 15000 15001 onewnc.sync() 15002 15003 nsubflows = subflows.keys() 15004 nsubflows.sort 15005 newvar = onewnc.createVariable('subflow', 'c', ('Nsubflow', 'Lstring')) 15006 vardef = basicvardef(newvar, 'subflow', 'reference of the sub-flow','-') 15007 newvals = writing_str_nc(newvar, nsubflows, Lstr) 15008 onewnc.sync() 15009 15010 newvar = onewnc.createVariable('Nsubflow', 'i', ('Nsubflow')) 15011 basicvardef(newvar, 'Nsubflow', 'Number of grid points of the sub-flow', '-') 15012 newvarlon = onewnc.createVariable('lonsubflow', 'f4', ('Nsubflow','Ngridsubflow')) 15013 vardef = basicvardef(newvarlon, 'lonsubflow', 'Longitude of the grid point of '+ \ 15014 'the sub-flow','degrees_East') 15015 newvarlat = onewnc.createVariable('latsubflow', 'f4', ('Nsubflow','Ngridsubflow')) 15016 vardef = basicvardef(newvarlat, 'latsubflow', 'Latitude of the grid point of ' + \ 15017 'the sub-flow','degrees_North') 15018 isub = 0 15019 for subf in nsubflows: 15020 grids = subflows[subf] 15021 Ngrid = len(grids) 15022 newvar[isub] = Ngrid 15023 print ' ' + fname + 'Lluis; isub:', isub,'subf:',subf,'grids:',grids,'Ngrid',Ngrid 15024 for igrid in range(Ngrid): 15025 jigrid = subflowspt[grids[igrid]] 15026 lonv = lons[jigrid[0],jigrid[1]] 15027 latv = lats[jigrid[0],jigrid[1]] 15028 newvarlon[igrid,isub] = lonv 15029 newvarlat[igrid,isub] = latv 15030 isub = isub + 1 15031 onewnc.sync() 15032 onewnc.close() 15033 15034 print fname + ": succesfull written of '" + ofile + "' !!" 15035 15036 return 15037 14854 15038 #quit() 14855 15039 … … 14872 15056 'missing': as a missing value 14873 15057 addvattr, add a new attribute to any given variable: addvattr -S [attrname]|[attrvalue] 14874 addvattrk, add a new attribute to any given variable: addvattrk -S [attrname]|[attrvalue]|[kind(S (!, white spaces),I,R,D)] 15058 addvattrk, add a new attribute to any given variable: addvattr 15059 k -S [attrname]|[attrvalue]|[kind(S (!, white spaces),I,R,D)] 14875 15060 checkNaNs, checks for NaN values over all variables in a file 14876 15061 checkAllValues, check for variables with along all their dimensions with the same value in a file
Note: See TracChangeset
for help on using the changeset viewer.