Changeset 216 in lmdz_wrf for trunk/tools
- Timestamp:
- Jan 14, 2015, 5:27:05 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/iniaqua.py
r215 r216 17 17 warnmsg='WARNING -- warning -- WARNING -- warning' 18 18 19 filekinds = ['CF', ' WRF']19 filekinds = ['CF', 'LMDZ', 'WRF'] 20 20 21 21 ## g.e. # iniaqua.py -d 32,32,39 -p hybdrid -o WRF -t 19791201000000 -z tropo -q 2 … … 243 243 # .... variables locales .... 244 244 # 245 xlon = np.zeros((dx+1), dtype=np.float32) ,245 xlon = np.zeros((dx+1), dtype=np.float32) 246 246 xprimm = np.zeros((dx+1), dtype=np.float32) 247 247 xtild = np.zeros((nmax2), dtype=np.float32) … … 2367 2367 return ran1 2368 2368 2369 def name_variables(filekind): 2370 """ Function to provide name of the variables and their atributes as function of 2371 the output type of file 2372 filekind= kind of file 2373 'CF': CF-convention 2374 'LMDZ': LMDZ style 2375 'WRF': WRF style 2376 """ 2377 fname = 'name_variables' 2378 2379 dimnames = {} 2380 varnames = {} 2381 2382 # Standard dimensions 2383 dimn = ['x','y','z','t'] 2384 2385 # Standard variables 2386 varn = ['lon', 'lat', 'lev', 'time', 'temp', 'tsfc', 'u10m', 'v10m', 'u', 'v', \ 2387 'zsfc', 'geopot', 'psfc', 'pres', 'H2Ov', 'H2Ol'] 2388 2389 # Standard variables' attribute names 2390 stdattrn = ['standard_name', 'long_name', 'units'] 2391 2392 # Extra variables' attribute names 2393 # kextrattrn = [] 2394 2395 # Dictionary with the values for each standard variable 2396 # kvarn['stdn'] = ['name', 'dims(list)', 'std_name', 'long_name', 'units', 'FillValue'] 2397 # None: No value 2398 2399 kdimn = {} 2400 kvarn = {} 2401 kattrn = {} 2402 if filekind == 'CF': 2403 kdimn['x'] = 'x' 2404 kdimn['y'] = 'y' 2405 kdimn['z'] = 'z' 2406 kdimn['t'] = 'time' 2407 2408 kvarn['lon'] = ['lon',['x'],'longitude','Longitude','degrees_east',None] 2409 kvarn['lat'] = ['lat',['y'],'latitude','Latitude','degrees_north',None] 2410 kvarn['lev'] = ['lev',['z'],'levels','Levels','-',None] 2411 kvarn['time'] = ['time',['t'],'time','Time', \ 2412 'monutes since 1949-12-01 00:00:00', None] 2413 kvarn['temp'] = ['ta',['t','z','y','x'],'air_temperature','Air temperature', \ 2414 'K',None] 2415 kvarn['tsfc'] = ['tas',['t','y','x'],'air_temperature','Air temperature','K',None] 2416 kvarn['u10m'] = ['uas',['t','y','x'],'eastward_wind','eastward wind','ms-1',None] 2417 kvarn['v10m'] = ['vas',['t','y','x'],'northward_wind','northward wind','ms-1',None] 2418 kvarn['u'] = ['ua',['t','z','y','x'],'eastward_wind','eastward wind','ms-1',None] 2419 kvarn['v'] = ['va',['t','z','y','x'],'northward_wind','northward wind','ms-1',None] 2420 kvarn['zsfc'] = ['zgs',['t','y','x'],'surface_geopotential_height', \ 2421 'surface geopotential height','m2s-2',None] 2422 kvarn['geopot'] = ['zg',['t','z','y','x'],'geopotential_height','geopotential height', \ 2423 'm2s-2',None] 2424 kvarn['psfc'] = ['ps',['t','z','y','x'],'surface_air_pressure','surface pressure','Pa',None] 2425 kvarn['pres'] = ['pres',['t','z','y','x'],'air_pressure','pressure','Pa',None] 2426 kvarn['H2Ov'] = ['r',['t','z','y','x'],'water_mixing_ratio','water mixing ratio','kgkg-1', \ 2427 None] 2428 kvarn['H2Ol'] = ['c',['t','z','y','x'],'condensed_water_mixing_ratio', \ 2429 'condensed water mixing ratio','kgkg-1',None] 2430 2431 kattrn['standard_name'] = 'standard_name' 2432 kattrn['long_name'] = 'long_name' 2433 kattrn['units'] = 'units' 2434 2435 kextrattrn = [''] 2436 2437 elif filekind == 'LMDZ': 2438 kdimn['x'] = 'x' 2439 kdimn['y'] = 'y' 2440 kdimn['z'] = 'presnivs' 2441 kdimn['t'] = 'time_counter' 2442 2443 kvarn['lon'] = ['lon',['x'],'longitude','Longitude','degrees_east', None] 2444 kvarn['lat'] = ['lat',['y'],'latitude','Latitude','degrees_north', None] 2445 kvarn['lev'] = ['presnivs',['z'],'model_level_number','Vertical levels','Pa', \ 2446 None] 2447 kvarn['time'] = ['time_counter',['t'],'time','Time', \ 2448 'seconds since 1980-01-01 00:24:00', None] 2449 kvarn['temp'] = ['temp',['t','z','y','x'],'Air temperature','Air temperature','K', \ 2450 9.96921e+36] 2451 kvarn['tsfc'] = ['t2m',['t','y','x'],'Temperature 2m','Temperature 2m','K',9.96921e+36] 2452 kvarn['u10m'] = ['u10m',['t','y','x'],'Vent zonal 10m','Vent zonal 10m','m/s',9.96921e+36] 2453 kvarn['v10m'] = ['v10m',['t','y','x'],'Vent meridien 10m','Vent meridien 10m','m/s', \ 2454 9.96921e+36] 2455 kvarn['u'] = ['vitu',['t','z','y','x'],'Zonal wind','Zonal wind','m/s',9.96921e+36] 2456 kvarn['v'] = ['vitv',['t','z','y','x'],'Meridional wind','Meridional wind','m/s',9.96921e+36] 2457 kvarn['zsfc'] = ['phis',['t','y','x'],'Surface geop.height','Surface geop.height', \ 2458 'm2/s2',9.96921e+36] 2459 kvarn['geopot'] = ['geop',['t','z','y','x'],'Geopotential height','Geopotential height', \ 2460 'm2/s2',9.96921e+36] 2461 kvarn['psfc'] = ['psol',['t','y','x'],'Surface Pressure','Surface Pressure','Pa', \ 2462 9.96921e+36] 2463 kvarn['pres'] = ['pres',['t','z','y','x'],'Air pressure','Air pressure','Pa',9.96921e+36] 2464 kvarn['H2Ov'] = ['ovap',['t','z','y','x'],'Specific humidity','Specific humidity','kg/kg', \ 2465 9.96921e+36] 2466 kvarn['H2Ol'] = ['oliq',['t','z','y','x'],'Condensed water','Condensed water','kg/kg', \ 2467 9.96921e+36] 2468 2469 kattrn['standard_name'] = 'standard_name' 2470 kattrn['long_name'] = 'long_name' 2471 kattrn['units'] = 'units' 2472 2473 kextrattrn = ['coordinates'] 2474 2475 elif filekind == 'WRF': 2476 kdimn['x'] = 'west_east' 2477 kdimn['y'] = 'south_north' 2478 kdimn['z'] = 'bottom_top' 2479 kdimn['t'] = 'Time' 2480 2481 kvarn['lon'] = ['XLONG',['t','y','x'], None,'LONGITUDE, WEST IS NEGATIVE','degree_east', \ 2482 None] 2483 kvarn['lat'] = ['XLAT',['t','y','x'], None,'LATITUDE, SOUTH IS NEGATIVE','degree_north', \ 2484 None] 2485 kvarn['lev'] = ['ZNU',['t','z'],None,'eta values on half (mass) levels','',None] 2486 kvarn['time'] = ['Times',['t','DateStrLen'],None,None,None,None] 2487 kvarn['temp'] = ['T',['t','z','y','x'],None,'perturbation potential temperature (theta-t0)','K'\ 2488 ,None] 2489 kvarn['tsfc'] = ['T2',['t','y','x'],None,'TEMP at 2 M','K',None] 2490 kvarn['u10m'] = ['U10',['t','y','x'],None,'U at 10 M','m s-1',None] 2491 kvarn['v10m'] = ['V10',['t','y','x'],None,'V at 10 M','m s-1',None] 2492 kvarn['u'] = ['U',['t','z','y','x'],None,'x-wind component','m s-1',None] 2493 kvarn['v'] = ['V',['t','z','y','x'],None,'y-wind component','m s-1',None] 2494 kvarn['zsfc'] = [None,['t','y','x'],None,None,None,None] 2495 kvarn['geopot'] = ['PHB',['t','z','y','x'],None,'perturbation geopotential','m2 s-2',None] 2496 kvarn['psfc'] = [None,['t','y','x'],None,None,None,None] 2497 kvarn['pres'] = ['P',['t','z','y','x'],None,'perturbation pressure','Pa',None] 2498 kvarn['H2Ov'] = ['QVAPOR',['t','z','y','x'],None,'Water vapor mixing ratio','kg kg-1',None] 2499 kvarn['H2Ol'] = ['QCLOUD',['t','z','y','x'],None,'Cloud water mixing ratio','kg kg-1',None] 2500 2501 kattrn['standard_name'] = None 2502 kattrn['long_name'] = 'description' 2503 kattrn['units'] = 'units' 2504 2505 kextrattrn = ['FieldType','MemoryOrder','stagger'] 2506 2507 # elif filekind == 'OTHER': 2508 # kdimn['x'] = '' 2509 # kdimn['y'] = '' 2510 # kdimn['z'] = '' 2511 # kdimn['t'] = '' 2512 2513 # kvarn['lon'] = ['',['t','z','y','x'],'','','',] 2514 # kvarn['lat'] = ['',['t','z','y','x'],'','','',] 2515 # kvarn['lev'] = ['',['t','z','y','x'],'','','',] 2516 # kvarn['time'] = ['',['t','z','y','x'],'','','',] 2517 # kvarn['temp'] = ['',['t','z','y','x'],'','','',] 2518 # kvarn['tsfc'] = ['',['t','y','x'],'','','',] 2519 # kvarn['u10m'] = ['',['t','y','x'],'','','',] 2520 # kvarn['v10m'] = ['',['t','y','x'],'','','',] 2521 # kvarn['u'] = ['',['t','z','y','x'],'','','',] 2522 # kvarn['v'] = ['',['t','z','y','x'],'','','',] 2523 # kvarn['zsfc'] = ['',['t','y','x'],'','','',] 2524 # kvarn['geopot'] = ['',['t','z','y','x'],'','','',] 2525 # kvarn['psfc'] = ['',['t','y','x'],'','','',] 2526 # kvarn['pres'] = ['',['t','z','y','x'],'','','',] 2527 # kvarn['H2Ov'] = ['',['t','z','y','x'],'','','',] 2528 # kvarn['H2Ol'] = ['',['t','z','y','x'],'','','',] 2529 2530 # kattrn['standard_name'] = '' 2531 # kattrn['long_name'] = '' 2532 # kattrn['units'] = '' 2533 2534 # kextrattrn = [''] 2535 else: 2536 print errormsg 2537 print ' ' + fname + ": filekind '" + filekind + "' not ready !!" 2538 quit(-1) 2539 2540 return kdimn, kvarn, kattrn, kextrattrn 2541 2542 def generic_NetCDFfile(ncobj, dims, kfile, kdimns, kvarns, stdattrns, extrattrns): 2543 """ Function to fill a generic NetCDF file 2544 ncobj= NetCDF file object to which the variables have to be created 2545 kfile= kind of file 2546 'CF': CF-convention 2547 'LMDZ': LMDZ style 2548 'WRF': WRF style 2549 dims= [dimx, dimy, dimz] dimensions of the file 2550 kdimns= dictionary for the specific names for the standard dimensions (x,y,z,t) 2551 kvarns= dictionary for the specific values for the standard variables 2552 kvarn['stdn'] = ['name', 'dims(list)', 'std_name', 'long_name', 'units', 'FillValue'] 2553 None: No value 2554 stdattrns= dictionary for the specific values for the variables' standard attributes 2555 extrattrns= list for the specific values for the variables' extra attributes 2556 """ 2557 2558 # Creation of dimensions 2559 ## 2560 newdim = ncobj.createDimension(kdimns['x'], dims[0]) 2561 newdim = ncobj.createDimension(kdimns['y'], dims[1]) 2562 newdim = ncobj.createDimension(kdimns['z'], dims[2]) 2563 newdim = ncobj.createDimension(kdimns['t'], None) 2564 2565 if kfile == 'WRF': 2566 newdim = ncobj.createDimension('DateStrLen', 19) 2567 2568 # Creation of variables 2569 ## 2570 for varn in kvarns.keys(): 2571 varvals = kvarns[varn] 2572 dimsvar = [] 2573 for dimn in varvals[1]: 2574 dimsvar.append(kdimns[dimn]) 2575 2576 if varvals[5] is not None: 2577 nerwvar = ncobj.createVariable(varvals[0], 'f4', tuple(dimsvar), \ 2578 fill_value=np.float(varvals[5])) 2579 else: 2580 newvar = ncobj.createVariable(varvals[0], 'f4', tuple(dimsvar)) 2581 2582 # Attributes 2583 for iattr in range(len(stdattrns)): 2584 attrn = stdattrns[iattr] 2585 if kattrns[attrn] is not None: 2586 newvar.setncattr(kattrns[attrn], varvals[2+iattr]) 2587 2588 # Extra attributes 2589 for iattr in range(len(extrattrns)): 2590 attrn = extrrattrns[iattr] 2591 if kfile == 'LMDZ': 2592 if attrn == 'coordinates': 2593 attrv = '' 2594 for din in varvals[1]: 2595 attrv = attrv + kdimns[din] + ' ' 2596 elif kfile == 'WRF': 2597 if attrn == 'FieldType': 2598 attrv = '104' 2599 elif attrn == 'MemoryOrder': 2600 attrv = '' 2601 Ndims = len(varvals[1]) 2602 for idim in range(Ndims,0,-1): 2603 if varvals[1][idim] != 'T': 2604 attrv = attrv + varvals[1][idim].uppercase 2605 elif attrn == 'stagger': 2606 staggeredvars = {} 2607 staggeredvars['U'] = 'X' 2608 staggeredvars['V'] = 'Y' 2609 staggeredvars['PH'] = 'Z' 2610 2611 if ncvar.searchInlist(staggeredvars.keys(),varvals[0]): 2612 attrv = staggeredvars[vavals[0]] 2613 2614 newvar.setncattr(extrattrns[iattr], attrv) 2615 2616 newvar.sync() 2617 2618 return 2369 2619 2370 2620 ####### ###### ##### #### ### ## # … … 2428 2678 if opts.okind == 'CF': 2429 2679 varnames = ['zg', 'ta', 'ua', 'va', 'pres', 'r'] 2680 timev = float(opts.time) 2430 2681 # Reference time from 1949-12-01 00:00:00 UTC 2431 2682 timev = ncvar.datetimeStr_conversion(opts.time,'YmdHMS','cfTime') … … 2552 2803 apolnorth, apolsouth) 2553 2804 else: 2554 pks, pk, pkf = exner_milieu( ip1jmp1,dimx, dimy, dimz, press, pres, beta)2805 pks, pk, pkf = exner_milieu(dimx, dimy, dimz, press, pres, beta) 2555 2806 2556 2807 masse = massdair(dimx,dimy,dimz,pres,airesurge) … … 2599 2850 ncf = NetCDFFile(ofile, 'w') 2600 2851 2601 # Dimensions creation 2602 ncf.createDimension(dimnames[0], None) 2603 ncf.createDimension(dimnames[1], dimz) 2604 ncf.createDimension(dimnames[2], dimy) 2605 ncf.createDimension(dimnames[3], dimx) 2852 # File structure creation 2853 filedimns, filevarns, filevarattr, filevarxtrattr = name_variables(opts.okind) 2854 generic_NetCDFfile(ncf,[dimx,dimy,dimz], opts.okind, filedimns, filevarns, \ 2855 filevarattr, filevarxtrattr) 2856 2857 # File filling 2858 for varn in ncf.variables.keys(): 2859 varobj = ncf.variables[varn] 2860 if varn == 'lon': varobj[:] = lon 2861 elif varn == 'lat': varobj[:] = lat 2862 elif varn == 'lev': varobj[:] = presnivs 2863 elif varn == 'time': varobj[:] = timev 2864 elif varn == 'temp': varobj[0,:,:,:] = theta[:] 2865 elif varn == 'tsfc': varobj[:] = theta[0,:,:] 2866 elif varn == 'u10m': varobj[:] = ucov[0,:,:] 2867 elif varn == 'v10m': varobj[:] = vcov[0,:,:] 2868 elif varn == 'u': varobj[0,:,:,:] = ucov[:] 2869 elif varn == 'v': varobj[0,:,:,:] = vcov[:] 2870 elif varn == 'zsfc': varobj[0,:,:] = phisfc[:] 2871 elif varn == 'geopot': varobj[0,:,:] = phisall[:] 2872 elif varn == 'psfc': varobj[0,:,:] = press[:] 2873 elif varn == 'pres': varobj[0,:,:,:] = pres[:] 2874 elif varn == 'H2Ov': varobj[0,:,:,:] = q[:,:,:0] 2875 elif varn == 'H2Ol': varobj[0,:,:,:] = q[:,:,:1] 2876 2606 2877 2607 2878 ncf.sync()
Note: See TracChangeset
for help on using the changeset viewer.