Changeset 1744 in lmdz_wrf
- Timestamp:
- Dec 16, 2017, 11:29:53 PM (8 years ago)
- Location:
- trunk/tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/ORforcing_reconstruct.py
r1740 r1744 9 9 # Importing generic tools file 'generic_tools.py' 10 10 import generic_tools as gen 11 import nc_var_tools as ncvar 11 12 import subprocess as sub 13 import module_ForSci as Sci 12 14 13 15 filen = 'cruncep_halfdeg_1950.nc' … … 21 23 22 24 # Range to retrieve 23 Xmin=-90. 24 Xmax=-7. 25 Ymin=-67. 26 Ymax=15. 27 28 25 Xmin=-90.25 26 #Xmin='all' 27 Xmax=-5.25 28 Ymin=-67.25 29 Ymax=15.25 30 31 # Variables to reconstruct 32 #variable = 'all' 33 variable = 'LWdown' 34 35 # Resolution 36 resX = 0.5 37 resY = 0.5 38 39 # Minimum difference from matrix to localized point 40 maxdiff = 0.05 29 41 30 42 # Projection of the matrix … … 34 46 ## MAIN 35 47 ####### 48 main = 'ORforcing_reconstruct.py' 49 fname = 'ORforcing_reconstruct.py' 50 36 51 onc = NetCDFFile(filen, 'r') 37 52 … … 40 55 ofilen = 'reconstruct_matrix.nc' 41 56 42 ovarns = onc.variables.keys()57 ncvars = onc.variables.keys() 43 58 44 59 varstocheck = [indvar, lonvar, latvar] 45 for vn in va stocheck:46 if not gen.searchInlist( ovarns, vn):60 for vn in varstocheck: 61 if not gen.searchInlist(ncvars, vn): 47 62 print gen.errormsg 48 63 print ' ' + main + ": file '" + filen + "' does not have variable '" + vn + \ 49 64 "' !!" 50 print ' available ones:', ovarns65 print ' available ones:', ncvars 51 66 quit(-1) 52 67 … … 55 70 olat = onc.variables[latvar] 56 71 72 vecdimn = oind.dimensions[0] 73 Xdimn = olon.dimensions[1] 74 Ydimn = olon.dimensions[0] 75 57 76 indv = oind[:] 58 77 lonv = olon[:] … … 62 81 dimy = lonv.shape[0] 63 82 64 veclon = np.zeros((len(indv) , dtype=np.float)65 veclat = np.zeros((len(indv) , dtype=np.float)83 veclon = np.zeros((len(indv)), dtype=np.float) 84 veclat = np.zeros((len(indv)), dtype=np.float) 66 85 67 86 # Constuct veclon, veclat … … 102 121 103 122 if type(Xmin) == type('2') and Xmin == 'all': 104 Xmin = np.min( xposv)105 Xmax = np.max( xposv)106 Ymin = np.min( yposv)107 Ymax = np.max( yposv)123 Xmin = np.min(lonv) 124 Xmax = np.max(lonv) 125 Ymin = np.min(latv) 126 Ymax = np.max(latv) 108 127 109 128 # Matrix values 110 129 if matProj == 'latlon': 111 dimx = (Xmax - Xmin+resX)/resX 112 dimy = (Ymax - Ymin+resY)/resY 113 114 print dir(Sci) 115 matindt, matXt, matYt = Sci.module_scientific.reconstruct_matrix(vectorxpos=xposv, \ 116 vectorypos=yposv, dvec=len(xposv), xmin=Xmin, xmax=Xmax, ymin=Ymin, ymax=Ymax, \ 130 dimx = int((Xmax - Xmin+resX)/resX) 131 dimy = int((Ymax - Ymin+resY)/resY) 132 133 matindt, matXt, matYt = Sci.module_scientific.reconstruct_matrix(vectorxpos=veclon, \ 134 vectorypos=veclat, dvec=veclon.shape[0], xmin=Xmin, xmax=Xmax, ymin=Ymin,ymax=Ymax,\ 117 135 dmatx=dimx, dmaty=dimy, matproj=matProj, maxdiff=maxdiff) 118 136 … … 127 145 128 146 # Variable-dimension 129 newvar = onewnc.createVariable( varXpos, 'f8', ('y', 'x'))147 newvar = onewnc.createVariable('lon', 'f8', ('y', 'x')) 130 148 newvar[:] = matXt.transpose() 131 ncvar.basicvardef(newvar, varXpos, varXpos, xunits)132 133 newvar = onewnc.createVariable( varYpos, 'f8', ('y', 'x'))149 ncvar.basicvardef(newvar, 'lon', 'Longitude', 'degrees_east') 150 151 newvar = onewnc.createVariable('lat', 'f8', ('y', 'x')) 134 152 newvar[:] = matYt.transpose() 135 ncvar.basicvardef(newvar, varYpos, varYpos, yunits)153 ncvar.basicvardef(newvar, 'lat', 'Latitude', 'degrees_north') 136 154 onewnc.sync() 137 155 … … 147 165 dn != Ydimn: 148 166 if onc.dimensions[dn].isunlimited(): 149 newdim = nc.createDimension(dn, None)167 newdim = onewnc.createDimension(dn, None) 150 168 else: 151 newdim = nc.createDimension(dn, len(onc.dimensions[dn]))169 newdim = onewnc.createDimension(dn, len(onc.dimensions[dn])) 152 170 153 if dn == vecdim :171 if dn == vecdimn: 154 172 vardims.append('y') 155 173 vardims.append('x') … … 161 179 162 180 if ovar.dtype == type(int(2)): 163 newvar= onewnc.createVariable(vn, nctype(ovar.dtype),tuple(vardims),\181 newvar= onewnc.createVariable(vn,ncvar.nctype(ovar.dtype),tuple(vardims),\ 164 182 fill_value=gen.fillValueI) 165 183 varvals = np.ones(tuple(shapevar), dtype=ovar.dtype)*gen.fillValueI 166 else: 167 newvar= onewnc.createVariable(vn, nctype(ovar.dtype), tuple(vardims),\ 184 elif ovar.dtype == type(np.int32(2)): 185 newvar= onewnc.createVariable(vn,ncvar.nctype(ovar.dtype),tuple(vardims),\ 186 fill_value=gen.fillValueI) 187 varvals = np.ones(tuple(shapevar), dtype=ovar.dtype)*gen.fillValueI 188 elif ovar.dtype == type(np.int64(2)): 189 newvar= onewnc.createVariable(vn,ncvar.nctype(ovar.dtype),tuple(vardims),\ 190 fill_value=gen.fillValueI) 191 varvals = np.ones(tuple(shapevar), dtype=ovar.dtype)*gen.fillValueI 192 elif ovar.dtype == type(np.float(2.)): 193 newvar= onewnc.createVariable(vn,ncvar.nctype(ovar.dtype),tuple(vardims),\ 168 194 fill_value=gen.fillValueF) 169 195 varvals = np.ones(tuple(shapevar), dtype=ovar.dtype)*gen.fillValueF 196 elif ovar.dtype == type(np.float32(2.)): 197 newvar= onewnc.createVariable(vn,ncvar.nctype(ovar.dtype),tuple(vardims),\ 198 fill_value=gen.fillValueF) 199 varvals = np.ones(tuple(shapevar), dtype=ovar.dtype)*gen.fillValueF 200 else: 201 print gen.errormsg 202 print ' ' + fname + ': variable type:', ovar.dtype, ' not ready !!' 203 quit(-1) 170 204 171 205 slices = gen.provide_slices(vardims, shapevar, ['x','y']) 172 206 # Filling variable. It would be faster if we can avoid this loop... I'm feeling lazy! 173 iix = vardims.index('x') 174 iiy = vardims.index('y') 175 for slc in slices: 176 ival = slc[iix] 177 jval = slc[iiy] 178 oldvarslice = [] 179 for dn in indn: 180 iid = vardims.index(dn) 181 if dn == vecdimn: oldvarslice.append(matind(jval,ival)) 182 else: oldvarslice.append(slc[iid]) 183 184 newvar[tuple(slc)] = onc[tuple(oldvarslice)] 207 if not gen.searchInlist(vardims,'x') and not gen.searchInlist(vardims,'y'): 208 newvar[:] = ovar[:] 209 else: 210 iix = vardims.index('x') 211 iiy = vardims.index('y') 212 for slc in slices: 213 ival = slc[iix] 214 jval = slc[iiy] 215 # Avoiding not found grid points 216 if matind[jval,ival] != -1: 217 oldvarslice = [] 218 for dn in indn: 219 if dn == vecdimn: oldvarslice.append(matind[jval,ival]) 220 else: 221 iid = vardims.index(dn) 222 oldvarslice.append(slc[iid]) 223 224 print vn, 'Slice new:', slc, 'old:', oldvarslice, 'shape:', newvar.shape, 'oldshape:', ovar.shape 225 newvar[tuple(slc)] = ovar[tuple(oldvarslice)] 226 else: 227 if type(newvar.dtype) == type(float(2.)) or \ 228 type(newvar.dtype) == type(np.float(2.)) or \ 229 type(newvar.dtype) == type(np.float32(2)) or \ 230 type(newvar.dtype) == type(np.float64(2)): 231 newvar[tuple(slc)] = gen.fillValuerF 232 else: 233 newvar[tuple(slc)] = gen.fillValueI 185 234 186 235 # Attributes 187 236 for atn in ovar.ncattrs(): 188 if atn != 'fill_Value' :237 if atn != 'fill_Value' and atn != 'units': 189 238 atv = ovar.getncattr(atn) 190 set_attribute(newvar, atn, atv) 239 ncvar.set_attribute(newvar, atn, atv) 240 ncvar.set_attribute(newvar, 'coordinates', 'lon lat') 191 241 onewnc.sync() 192 242 … … 194 244 for atn in onc.ncattrs(): 195 245 atv = ovar.getncattr(atn) 196 set_attribute(onewnc, atn, atv)246 ncvar.set_attribute(onewnc, atn, atv) 197 247 onewnc.sync() 198 add_global_PyNCplot(onewnc, pyscript, fname, '0.1')248 ncvar.add_global_PyNCplot(onewnc, pyscript, fname, '0.1') 199 249 200 250 onc.close() -
trunk/tools/nc_var_tools.py
r1741 r1744 20783 20783 yposv = oypos[:] 20784 20784 20785 if len(xposv.shape) != 1: 20786 print errormsg 20787 print ' ' + fname + ": vector with X locations (from variable '" + varXpos +\ 20788 "') has a rank larger than 1!!" 20789 print ' current shape:', xposv.shape 20790 quit(-1) 20791 20792 if len(yposv.shape) != 1: 20793 print errormsg 20794 print ' ' + fname + ": vector with Y locations (from variable '" + varXpos +\ 20795 "') has a rank larger than 1!!" 20796 print ' current shape:', yposv.shape 20797 quit(-1) 20798 20785 20799 gen.same_shape(xposv, yposv) 20786 20800 vecdim = oxpos.dimensions[0]
Note: See TracChangeset
for help on using the changeset viewer.