- Timestamp:
- Aug 27, 2016, 8:57:29 AM (9 years ago)
- Location:
- trunk/tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/nc_var.py
r1046 r1050 17 17 ## e.g. # nc_var.py -o cleaning_varsfile -f ~/PY/wrfout_d01_2001-11-11_00:00:00 -S T2,XLONG,XLAT,Times 18 18 ## e.g. # nc_var.py -o LMDZ_toCF -f LMDZ/AR40/vas_histins_1-1.nc 19 ## e.g. # nc_var.py -o pinterp -f wrfout_d01_2001-11-11_00\:00\:00 -S 100000.:97500.:95000.:92500.:90000.:85000.:80000.:75000.:70000.:65000.:60000.:55000.:50000.:45000.:40000.:35000.:30000.:25000.:20000.:15000.:10000.:5000.:2500.:1000.:500.:250.,1,0 -v WRFt,WRFrh 19 20 20 21 from optparse import OptionParser -
trunk/tools/nc_var_tools.py
r1047 r1050 16186 16186 ofile = 'pinterp.nc' 16187 16187 16188 CFdims = ['time', 'pres', 'lat', 'lon'] 16189 16188 16190 onc = NetCDFFile(ncfile, 'r') 16189 16191 16190 # Variables to interpolate 16191 WRFdims = ['Time', 'bottom_top', 'south_north', 'west_east'] 16192 newWRFdims = ['Time', 'pres', 'south_north', 'west_east'] 16193 notCHK = ['WRFght', 'WRFt', 'WRFrh'] 16194 CFdims = ['time', 'pres', 'lat', 'lon'] 16192 # Gessing orgin of the file 16193 dimsinfile = onc.dimensions.keys() 16194 if gen.searchInlist(dimsinfile,'bottom_top'): 16195 modname = 'WRF' 16196 print warnmsg 16197 print ' ' + fname + ": gessing that file '" + ncfile + "' comes from '" + \ 16198 modname + "' !!" 16199 16200 # Variables to interpolate 16201 MODdims = ['Time', 'bottom_top', 'south_north', 'west_east'] 16202 newMODdims = ['Time', 'pres', 'south_north', 'west_east'] 16203 notCHK = ['WRFght', 'WRFt', 'WRFrh'] 16204 MODvarrequired = ['P', 'PB', 'PSFC', 'PH', 'PHB', 'HGT', 'T', 'QVAPOR', \ 16205 'XLONG', 'XLAT', 'Times'] 16206 MODvardims = ['XLONG', 'XLAT', 'Times'] 16195 16207 16196 16208 varns = gen.str_list(variables, ',') … … 16201 16213 coincdims = set(WRFdims) & set(ovn.dimensions) 16202 16214 16203 if len( WRFdims) == len(ovn.dimensions) and len(coincdims) == len(WRFdims):16215 if len(MODdims) == len(ovn.dimensions) and len(coincdims) == len(MODdims): 16204 16216 varns.append(vn) 16205 16217 varns = varns + notCHK … … 16209 16221 not gen.searchInlist(notCHK, vn): 16210 16222 print errormsg 16211 print ' ' + fname + "': WRF file '" + ncfile +\16212 "' does not have variable '" +vn + "' !!"16223 print ' ' + fname + "': file '" + ncfile + "' does not have variable '"+\ 16224 vn + "' !!" 16213 16225 quit(-1) 16214 16226 16215 # looking for WRF required variables 16216 WRFvarrequired = ['P', 'PB', 'PSFC', 'PH', 'PHB', 'HGT', 'T', 'QVAPOR', 'XLONG', \ 16217 'XLAT', 'Times'] 16218 for var in WRFvarrequired: 16227 # looking for model required variables 16228 for var in MODvarrequired: 16219 16229 if not gen.searchInlist(onc.variables, var): 16220 16230 print errormsg … … 16225 16235 # Computing necessary variables 16226 16236 # pressure 16227 ovar1 = onc.variables['P'] 16228 ovar2 = onc.variables['PB'] 16229 16230 pres = (ovar1[:] + ovar2[:]).astype('float64') 16231 16232 dimx = pres.shape[3] 16233 dimy = pres.shape[2] 16234 dimz = pres.shape[1] 16235 dimt = pres.shape[0] 16237 if modname == 'WRF': 16238 ovar1 = onc.variables['P'] 16239 ovar2 = onc.variables['PB'] 16240 16241 pres = (ovar1[:] + ovar2[:]).astype('float64') 16242 16243 dimx = pres.shape[3] 16244 dimy = pres.shape[2] 16245 dimz = pres.shape[1] 16246 dimt = pres.shape[0] 16247 MODdimvs = {'Time':dimt, 'bottom_top':dimz, 'south_north':dimy, \ 16248 'west_east': dimx} 16249 CFdimvs = {'time': dimt, 'bottom_top': dimz, 'lat': dimy, 'lon': dimx} 16250 unstaggerDIM = 'west_east' 16236 16251 16237 16252 # sfc pressure 16238 ovar1 = onc.variables['PSFC'] 16239 psfc = ovar1[:].astype('float64') 16253 if modname == 'WRF': 16254 ovar1 = onc.variables['PSFC'] 16255 psfc = ovar1[:].astype('float64') 16240 16256 16241 16257 # geopotential height 16242 ovar1 = onc.variables['PH'] 16243 ovar2 = onc.variables['PHB'] 16244 geop0 = ovar1[:] + ovar2[:] 16245 unstg = list(geop0.shape) 16246 unstg[1] = unstg[1] - 1 16247 geop = np.zeros(tuple(unstg), dtype=np.float) 16248 geop = 0.5*(geop0[:,1:dimz,:,:] + geop0[:,0:dimz-1,:,:]).astype('float64') 16258 if modname == 'WRF': 16259 ovar1 = onc.variables['PH'] 16260 ovar2 = onc.variables['PHB'] 16261 geop0 = ovar1[:] + ovar2[:] 16262 unstg = list(geop0.shape) 16263 unstg[1] = unstg[1] - 1 16264 geop = np.zeros(tuple(unstg), dtype=np.float) 16265 geop = 0.5*(geop0[:,1:dimz,:,:] + geop0[:,0:dimz-1,:,:]).astype('float64') 16249 16266 16250 16267 # terrain height 16251 ovar1 = onc.variables['HGT'] 16252 hgt = ovar1[0,:,:].astype('float64') 16253 16254 # water vapour micing ratio 16255 ovar1 = onc.variables['QVAPOR'] 16256 qv = ovar1[:].astype('float64') 16268 if modname == 'WRF': 16269 ovar1 = onc.variables['HGT'] 16270 hgt = ovar1[0,:,:].astype('float64') 16271 16272 # water vapour mixing ratio 16273 if modname == 'WRF': 16274 ovar1 = onc.variables['QVAPOR'] 16275 qv = ovar1[:].astype('float64') 16257 16276 16258 16277 # temperature 16259 Rd = 287.04 16260 Cp = 7.*Rd/2. 16261 RCP = Rd/Cp 16262 p0 = 100000. 16263 ovar1 = onc.variables['T'] 16264 temp = ((ovar1[:]+300.)*(pres[:]/p0)**RCP).astype('float64') 16265 16266 WRFdimvs = {'Time':dimt, 'bottom_top':dimz, 'south_north':dimy, 'west_east': dimx} 16278 if modname == 'WRF': 16279 Rd = 287.04 16280 Cp = 7.*Rd/2. 16281 RCP = Rd/Cp 16282 p0 = 100000. 16283 ovar1 = onc.variables['T'] 16284 temp = ((ovar1[:]+300.)*(pres[:]/p0)**RCP).astype('float64') 16267 16285 16268 16286 onewnc = NetCDFFile(ofile, 'w') 16269 16287 # Creation of dimensions 16270 newdim = onewnc.createDimension('west_east', dimx) 16271 newdim = onewnc.createDimension('south_north', dimy) 16272 newdim = onewnc.createDimension('pres', len(interplevs)) 16273 newdim = onewnc.createDimension('Time', None) 16288 if modname == 'WRF': 16289 newdim = onewnc.createDimension('west_east', dimx) 16290 newdim = onewnc.createDimension('south_north', dimy) 16291 newdim = onewnc.createDimension('pres', len(interplevs)) 16292 newdim = onewnc.createDimension('Time', None) 16274 16293 16275 16294 # Creation of variable dimensions 16276 WRFvardims = ['XLONG', 'XLAT', 'Times'] 16277 for var in WRFvardims: 16295 for var in MODvardims: 16278 16296 ovar = onc.variables[var] 16279 16297 varinf = variable_inf(ovar) … … 16285 16303 if gen.searchInlist(CFdims,vd): 16286 16304 icfdim = CFdims.index(vd) 16287 newvard.append( WRFdims[icfdim])16305 newvard.append(MODdims[icfdim]) 16288 16306 else: 16289 16307 newvard.append(vd) … … 16338 16356 newvarattr['long_name'] = varattrs[4].replace('|',' ') 16339 16357 newvarattr['units'] = varattrs[5] 16340 elif not gen.searchInlist( WRFvarrequired, vn) or vn == 'QVAPOR':16358 elif not gen.searchInlist(MODvarrequired, vn) or vn == 'QVAPOR': 16341 16359 ovarin = onc.variables[vn] 16342 16360 varinf = variable_inf(ovarin) 16343 16361 varin = ovarin[:] 16344 16362 # de-staggering 16345 if gen.searchInlist(ovarin.dimensions, 'west_east'):16346 varint = gen.stagger_unstagger(varin,list(ovarin.dimensions), WRFdimvs)16363 if gen.searchInlist(ovarin.dimensions, unstaggerDIM): 16364 varint = gen.stagger_unstagger(varin,list(ovarin.dimensions),MODdimvs) 16347 16365 else: 16348 CFdimvs = {'time': dimt, 'bottom_top': dimz, 'lat': dimy, 'lon': dimx}16349 16366 varint = gen.stagger_unstagger(varin,list(ovarin.dimensions),CFdimvs) 16350 16367 isgeop = False … … 16371 16388 extrapolate=extrap, geopt=isgeop, missing=gen.fillValueF) 16372 16389 16373 newvar = onewnc.createVariable(CFvn, 'f4', tuple(new WRFdims), \16390 newvar = onewnc.createVariable(CFvn, 'f4', tuple(newMODdims), \ 16374 16391 fill_value=gen.fillValueF) 16375 16392 newvar[:] = varinterp.transpose()
Note: See TracChangeset
for help on using the changeset viewer.