Changeset 1847 in lmdz_wrf


Ignore:
Timestamp:
Mar 23, 2018, 2:28:02 PM (7 years ago)
Author:
lfita
Message:

Working versin of 'CFmorzization'

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/nc_var.py

    r1846 r1847  
    1818## e.g. # nc_var.py -o WRF_to_newCF -f wrfout_d01_1995-01-01_00\:00\:00 -S 'XLONG:XLAT:Times:19491201000000:minutes' -v QVAPOR,T2,Q2
    1919## e.g. # nc_var.py -o reconstruct_matrix_from_vector -f cruncep_halfdeg_1958.nc -S 'nav_lon:nav_lat:-90.:-7.:-67.:15.:latlon:0.5:0.5:0.05' -v all
    20 ## e.g. # nc_var.py -o CFmorzization -S 'X|west_east|XLONG,Y|south_north|XLAT,T|Times|WRFtime,Z|bottom_top|ZNU:GlobalAttr1995.inf:proj1995.inf' -f ~/PY/wrfout_d01_1995-01-01_00\:00\:00 -v QFX
     20## e.g. # nc_var.py -o CFmorzization -S 'X|west_east|XLONG,Y|south_north|XLAT,T|Time|WRFtime,Z|bottom_top|ZNU:GlobalAttr1995.inf:proj1995.inf' -f ~/PY/wrfout_d01_1995-01-01_00\:00\:00 -v QFX
    2121
    2222## e.g. ccrc468-17 # ./nc_var.py -v time -f 123/CCRC_NARCliM_Sydney_All_1990-1999_pr10max.nc -o out -S 1:-1
  • trunk/tools/nc_var_tools.py

    r1846 r1847  
    2282522825    oncvars.sort()
    2282622826
    22827     # Axes information
     22827    # Axes information: dimensions and variables dependency
     22828    # CF-dimensions of a given axis
    2282822829    CFdimvals = {}
     22830    # axis values from filer
    2282922831    filedimvals = {}
     22832    # CD-fimensions of the CF-variables for each axis
    2283022833    CFaxisvardimvals = {}
    22831     for axn in axisinf.keys():
     22834    for axn in axes:
    2283222835        axisv = axisinf[axn]
    2283322836        dimn = axisv[0]
     
    2285722860        # CF values of axis
    2285822861        CFdimvalues = gen.CFcorValues(axn)
    22859         print '  ' + axn + " ..."
    22860         print '    dimension in file:', dimn, ' variable in file:', vardimn
    22861         print '    CF-values _______'
    22862         print '    dimn:', CFdimvalues['dimn']
    22863         print '    variable-dimension. standard_name:', CFdimvalues['stdn'],         \
    22864           'long_name:', CFdimvalues['longname'], 'units', CFdimvalues['longname'],   \
    22865           'max, allowed rank:', CFdimvalues['maxrank']
    22866         print '    others:'
    22867         for ivn in CFdimvalues.keys():
    22868             if ivn != 'dimn' and ivn != 'stdn' and ivn != 'longname' and             \
    22869               ivn != 'units' and ivn != 'maxrank':
    22870                 print ivn, ':', CFdimvalues[ivn]
     22862        #print '  ' + axn + " ..."
     22863        #print '    dimension in file:', dimn, ' variable in file:', vardimn
     22864        #print '    CF-values _______'
     22865        #print '    dimn:', CFdimvalues['dimn']
     22866        #print '    variable-dimension. standard_name:', CFdimvalues['stdn'],         \
     22867        #  'long_name:', CFdimvalues['longname'], 'units', CFdimvalues['longname'],   \
     22868        #  'max, allowed rank:', CFdimvalues['maxrank']
     22869        #print '    others:'
     22870        #for ivn in CFdimvalues.keys():
     22871        #    if ivn != 'dimn' and ivn != 'stdn' and ivn != 'longname' and             \
     22872        #      ivn != 'units' and ivn != 'maxrank':
     22873        #        print '      ', ivn, ':', CFdimvalues[ivn]
    2287122874
    2287222875        # File values of the axis and assigning dimension length from rank in file
     
    2287422877        if len(oaxisv.shape) == CFdimvalues['maxrank']:
    2287522878            axisv = oaxisv[:]
    22876             if CFdimvalues['length'] != -1:CFdimvalues['length'] = oaxisv.shape[0]
     22879            if CFdimvalues['length'] != -1: CFdimvalues['length'] = oaxisv.shape[0]
    2287722880            CFvardimvalues.append(dimn)
    2287822881        elif len(oaxisv.shape) == CFdimvalues['maxrank'] + 1:
     
    2288722890            for dn in oaxisv.dimensions:
    2288822891                if dn == dimTn: varslice.append(0)
    22889                 else: 
    22890                     CFvardimvalues.append(dimn)
     22892                else:
     22893                    CFvardimvalues.append(dn)
    2289122894                    varslice.append(slice(0,len(onc.dimensions[dn])))
    2289222895                    if dn == dimn and CFdimvalues['length'] != -1:
     
    2293822941            else: Sfreq = 'UNKNOWN'
    2293922942
     22943    print 'Values for variables-axes from file ________'
     22944    for axn in axes:
     22945        print '  ', axn
     22946        print '  ', CFaxisvardimvals[axn]
     22947    filecfdimn = {}
     22948    # Axis variables have file-dimensions, transform them to CF ones
     22949    for axn in axes:
     22950        filedimaxes = CFaxisvardimvals[axn]
     22951        # Looking for the equivalency file_dim --> CF_dim
     22952        cfdimaxes = []
     22953        for fdn in filedimaxes:
     22954            if not filecfdimn.has_key(fdn): filecfdimn[fdn] = None
     22955            for axn1 in axes:
     22956                axinf = axisinf[axn1]
     22957                cfaxinf = CFdimvals[axn1]
     22958                if axinf[0] == fdn:
     22959                    cfdimaxes.append(cfaxinf['dimn'])
     22960                    if filecfdimn[fdn] is None: filecfdimn[fdn] = cfaxinf['dimn']
     22961                    break
     22962            if filecfdimn[fdn] is None:
     22963                print errormsg
     22964                print '  ' + fname + ": No CF dimension has been found for file " +  \
     22965                  "dimension '" + fdn + "' !!"
     22966                onc.close()
     22967                quit(-1)
     22968
     22969        CFaxisvardimvals[axn] = cfdimaxes
     22970    print 'file --> CF equivalencies of dimensions _______'
     22971    print filecfdimn
    2294022972    print 'Values for axes ________'
    22941     print CFdimvals
     22973    for axn in axes:
     22974        print '  ', axn
     22975        print '  ', CFdimvals[axn]
    2294222976    print 'Values for variables-axes ________'
    22943     print CFaxisvardimvals
     22977    for axn in axes:
     22978        print '  ', axn, ':', CFaxisvardimvals[axn]
    2294422979
    2294522980    # Processing variables in file
     
    2296523000        varaxes = []
    2296623001        CFvardims = []
    22967         for axn in axes:
     23002        for vdn in ovar.dimensions:
     23003            CFvardims.append(filecfdimn[vdn])
    2296823004            axisv = axisinf[axn]
    22969             dimn = axisv[0]
    22970             if gen.searchInlist(ovar.dimensions, dimn):
    22971                 varaxes.append(axn)
    22972                 CFvardims.append(CFdimvals[axn]['dimn'])
     23005            for axn1 in axes:
     23006                axv = CFdimvals[axn1]
     23007                if axv['dimn'] == filecfdimn[vdn]:
     23008                    varaxes.append(axn1)
    2297323009               
    2297423010        filen = gattr['institute_id'] + '_' + cfvarn + '_' + gattr['CORDEX_domain'] +\
     
    2298223018        for axn in varaxes:
    2298323019            dvals = CFdimvals[axn]
    22984             newdim = onewnc.createDimension(dvals['dimn'], dvals['length'])
     23020            if not gen.searchInlist(onewnc.dimensions, dvals['dimn']):
     23021                print infmsg
     23022                print '    ' + fname + ": creation of dimension '" + dvals['dimn'] + \
     23023                  "' : ", dvals['length']
     23024                newdim = onewnc.createDimension(dvals['dimn'], dvals['length'])
    2298523025
    2298623026        # Definition only of that variables-coordinates from the axes in the variable
    2298723027        for axn in varaxes:
    2298823028            dvals = CFdimvals[axn]
    22989             print 'Lluis: ', CFaxisvardimvals[axn]
    22990             newvar = onewnc.createVariable(dvals['dimn'], 'f8',                      \
    22991               tuple(CFaxisvardimvals[axn]))
    22992             basicvardef(newvar, dvals['stdn'], dvals['longname'], dvals['units'])
    22993             for ivn in dvals.keys():
    22994                 if ivn != 'dimn' and ivn != 'stdn' and ivn != 'longname' and         \
    22995                   ivn != 'units' and ivn != 'maxrank' and ivn != 'length':
    22996                     set_attribute(newvar,ivn,dvals[ivn])
     23029            if not gen.searchInlist(onewnc.variables.keys(), dvals['dimn']):
     23030                newvar = onewnc.createVariable(dvals['dimn'], 'f8',                  \
     23031                  tuple(CFaxisvardimvals[axn]))
     23032                basicvardef(newvar, dvals['stdn'], dvals['longname'], dvals['units'])
     23033                for ivn in dvals.keys():
     23034                    if ivn != 'dimn' and ivn != 'stdn' and ivn != 'longname' and     \
     23035                      ivn != 'units' and ivn != 'maxrank' and ivn != 'length':
     23036                        set_attribute(newvar,ivn,dvals[ivn])
    2299723037
    2299823038        # Variable
    22999         newvar=onewnc.createVariable(cfvarn, 'f4', tuple(CFvardims),                 \
    23000           fill_Value=gen.fillValueR)
    23001         basicvardef(newvar, stdvarn, longvarn, utsvarn)
    23002         set_attribute(newvar, 'coordinates', ' '.join(CFvardims))
    23003         # Setting values, but taking into account pre-existing masked values
    23004         varv = ovar[:]
    23005         if type(varv) == type(gen.mamat):
    23006             imaskv = varv.fill_value
    23007             varv = np.where(varv == fill_value, gen.fillValueR, varv)
    23008 
    23009         newvar[:] = varv[:]
     23039        if not gen.searchInlist(onewnc.variables.keys(), cfvarn):
     23040            print infmsg
     23041            print '    ' + fname + ": creation of variable '" + cfvarn + "(" +       \
     23042              ', '.join(CFvardims) + ")' ..."
     23043            newvar=onewnc.createVariable(cfvarn, 'f4', tuple(CFvardims),             \
     23044              fill_value=gen.fillValueF)
     23045            basicvardef(newvar, stdvarn, longvarn, utsvarn)
     23046            set_attribute(newvar, 'coordinates', ' '.join(CFvardims))
     23047            # Setting values, but taking into account pre-existing masked values
     23048            varv = ovar[:]
     23049            if type(varv) == type(gen.mamat):
     23050                imaskv = varv.fill_value
     23051                varv = np.where(varv == fill_value, gen.fillValueF, varv)
     23052 
     23053            newvar[:] = varv[:]
    2301023054        onewnc.sync()
    2301123055
    2301223056        # Global attributes
    23013         for attrn in gattrN:
     23057        for attrn in gattr.keys():
    2301423058            set_attribute(onewnc, attrn, gattr[attrn])
    2301523059
Note: See TracChangeset for help on using the changeset viewer.