Changeset 216 in lmdz_wrf for trunk/tools


Ignore:
Timestamp:
Jan 14, 2015, 5:27:05 PM (10 years ago)
Author:
lfita
Message:

Almost working version... up to file filling!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/iniaqua.py

    r215 r216  
    1717warnmsg='WARNING -- warning -- WARNING -- warning'
    1818
    19 filekinds = ['CF', 'WRF']
     19filekinds = ['CF', 'LMDZ', 'WRF']
    2020
    2121## g.e. # iniaqua.py -d 32,32,39 -p hybdrid -o WRF -t 19791201000000 -z tropo -q 2
     
    243243#     .... variables locales  ....
    244244#
    245     xlon = np.zeros((dx+1), dtype=np.float32),
     245    xlon = np.zeros((dx+1), dtype=np.float32)
    246246    xprimm = np.zeros((dx+1), dtype=np.float32)
    247247    xtild = np.zeros((nmax2), dtype=np.float32)
     
    23672367    return ran1
    23682368
     2369def 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
     2542def 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
    23692619
    23702620####### ###### ##### #### ### ## #
     
    24282678if opts.okind == 'CF':
    24292679    varnames = ['zg', 'ta', 'ua', 'va', 'pres', 'r']
     2680    timev = float(opts.time)
    24302681# Reference time from 1949-12-01 00:00:00 UTC
    24312682    timev = ncvar.datetimeStr_conversion(opts.time,'YmdHMS','cfTime')
     
    25522803      apolnorth, apolsouth)
    25532804else:
    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)
    25552806
    25562807masse = massdair(dimx,dimy,dimz,pres,airesurge)
     
    25992850ncf = NetCDFFile(ofile, 'w')
    26002851
    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
     2853filedimns, filevarns, filevarattr, filevarxtrattr = name_variables(opts.okind)
     2854generic_NetCDFfile(ncf,[dimx,dimy,dimz], opts.okind, filedimns, filevarns,           \
     2855  filevarattr, filevarxtrattr)
     2856
     2857# File filling
     2858for 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
    26062877
    26072878ncf.sync()
Note: See TracChangeset for help on using the changeset viewer.