Changeset 1050 in lmdz_wrf for trunk


Ignore:
Timestamp:
Aug 27, 2016, 8:57:29 AM (9 years ago)
Author:
lfita
Message:

Generalizing 'pinterp' for multiple input files. Version only for 'WRF' input

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/nc_var.py

    r1046 r1050  
    1717## e.g. # nc_var.py -o cleaning_varsfile -f ~/PY/wrfout_d01_2001-11-11_00:00:00 -S T2,XLONG,XLAT,Times
    1818## 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
    1920
    2021from optparse import OptionParser
  • trunk/tools/nc_var_tools.py

    r1047 r1050  
    1618616186    ofile = 'pinterp.nc'
    1618716187
     16188    CFdims = ['time', 'pres', 'lat', 'lon']
     16189
    1618816190    onc = NetCDFFile(ncfile, 'r')
    1618916191
    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']
    1619516207
    1619616208    varns = gen.str_list(variables, ',')
     
    1620116213            coincdims = set(WRFdims) & set(ovn.dimensions)
    1620216214           
    16203             if len(WRFdims) == len(ovn.dimensions) and len(coincdims) == len(WRFdims):
     16215            if len(MODdims) == len(ovn.dimensions) and len(coincdims) == len(MODdims):
    1620416216                varns.append(vn)
    1620516217        varns = varns + notCHK
     
    1620916221          not gen.searchInlist(notCHK, vn):
    1621016222            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 + "' !!"
    1621316225            quit(-1)
    1621416226
    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:
    1621916229        if not gen.searchInlist(onc.variables, var):
    1622016230            print errormsg
     
    1622516235# Computing necessary variables
    1622616236    # 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'
    1623616251
    1623716252    # 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')
    1624016256
    1624116257    # 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')
    1624916266
    1625016267    # 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')
    1625716276
    1625816277    # 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')
    1626716285
    1626816286    onewnc = NetCDFFile(ofile, 'w')
    1626916287# 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)
    1627416293
    1627516294# Creation of variable dimensions
    16276     WRFvardims = ['XLONG', 'XLAT', 'Times']
    16277     for var in WRFvardims:
     16295    for var in MODvardims:
    1627816296        ovar = onc.variables[var]
    1627916297        varinf = variable_inf(ovar)
     
    1628516303            if gen.searchInlist(CFdims,vd):
    1628616304                icfdim = CFdims.index(vd)
    16287                 newvard.append(WRFdims[icfdim])
     16305                newvard.append(MODdims[icfdim])
    1628816306            else:
    1628916307                newvard.append(vd)
     
    1633816356                newvarattr['long_name'] = varattrs[4].replace('|',' ')
    1633916357                newvarattr['units'] = varattrs[5]
    16340         elif not gen.searchInlist(WRFvarrequired, vn) or vn == 'QVAPOR':
     16358        elif not gen.searchInlist(MODvarrequired, vn) or vn == 'QVAPOR':
    1634116359            ovarin = onc.variables[vn]
    1634216360            varinf = variable_inf(ovarin)
    1634316361            varin = ovarin[:]
    1634416362            # 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)
    1634716365            else:
    16348                 CFdimvs = {'time': dimt, 'bottom_top': dimz, 'lat': dimy, 'lon': dimx}
    1634916366                varint = gen.stagger_unstagger(varin,list(ovarin.dimensions),CFdimvs)
    1635016367            isgeop = False
     
    1637116388              extrapolate=extrap, geopt=isgeop, missing=gen.fillValueF)
    1637216389
    16373             newvar = onewnc.createVariable(CFvn, 'f4', tuple(newWRFdims),            \
     16390            newvar = onewnc.createVariable(CFvn, 'f4', tuple(newMODdims),            \
    1637416391              fill_value=gen.fillValueF)
    1637516392            newvar[:] = varinterp.transpose()
Note: See TracChangeset for help on using the changeset viewer.