Changeset 1961 in lmdz_wrf


Ignore:
Timestamp:
Jul 24, 2018, 1:32:25 AM (7 years ago)
Author:
lfita
Message:

Final version of merging single-stations netCDF

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/generic_tools.py

    r1947 r1961  
    95389538      listA= list with values to match with
    95399539      listB= list with values
    9540     >>> list_coincidences(range(10),range(8,15))
     9540    >>> list_differences(range(10),range(8,15))
    95419541    [10, 11, 12, 13, 14], [2, 3, 4, 5, 6]
    95429542    """
  • trunk/tools/nc_var_tools.py

    r1960 r1961  
    2461824618    latvals = []
    2461924619    heightvals = []
     24620    timevals = []
    2462024621    for fobsn in fobs:
    2462124622        filen =  namefoldobs + '/' + fobsn
     
    2463224633            print errormsg
    2463324634            print '  ' + fname + ": file '" + filen + "' does not have any 'time'" + \
    24634               "dimensisn !!"
     24635              "dimension !!"
    2463524636            print "    available ones:", onc.dimensions
    2463624637            quit(-1)
     
    2463924640            if variable == 'all': varns = onc.variables.keys()
    2464024641            else: varns = gen.str_list(variable, ',')
     24642            if onc.variables.has_key('time'):
     24643                timevals = list(onc.variables['time'][:])
     24644            elif onc.variables.has_key('CFtime'):
     24645                timevals = list(onc.variables['CFtime'][:])
     24646            else:
     24647                print errormsg
     24648                print '  '+fname+": file '" + filen + "' does not have any 'time'" + \
     24649                  "expected variable ('time', 'CFtime') !!"
     24650                varnsorted = onc.variables.has_key(varn)
     24651                varnsorted.sort()
     24652                print '    available ones:', varnsorted
     24653                quit(-1)
     24654        else:
     24655            if onc.variables.has_key('time'):
     24656                tvals = onc.variables['time'][:]
     24657            elif onc.variables.has_key('CFtime'):
     24658                tvals =onc.variables['CFtime'][:]
     24659            else:
     24660                print errormsg
     24661                print '  ' +fname+ ": file '" +filen+ "' does not have any 'time'" + \
     24662                  "expected variable ('time', 'CFtime') !!"
     24663                varnsorted = onc.variables.has_key(varn)
     24664                varnsorted.sort()
     24665                print '    available ones:', varnsorted
     24666                quit(-1)
     24667            NOtvals, NOits = gen.list_differences(timevals, list(tvals))
     24668            if len(NOtvals) > 0:
     24669                print '  ' + fname + ": file '" + filen + "' adds additional times:",\
     24670                  NOtvals
     24671                for tv in NOtvals: timevals.append(tv)
    2464124672        stn = ''
    2464224673        for stS in onc.variables['station'][0,:]:
     
    2468224713    basicvardef(newvar, 'height', 'height of stations', 'm')
    2468324714    newvar[:] = heightvals[:]
     24715
     24716    # Time axis
     24717    timevalsort = timevals
     24718    timevalsort.sort()
     24719    newvart = onewnc.createVariable('ststimes', 'f', ('time'))
     24720    newvart[:] = timevalsort[:]
     24721    newvart.setncattr('standrad_name','time')
     24722    newvart.setncattr('long_name','Time')
    2468424723
    2468524724    ifile = 0
     
    2469324732
    2469424733        onc = NetCDFFile(filen, 'r')
     24734        ot = onc.variables['time']
     24735        otv = list(ot[:])
     24736        coint, itcoinsort, itcoinotv = gen.list_coincidences(timevalsort, otv)
     24737        itcoinsort.sort()
     24738
    2469524739        if ifile == 0:
    2469624740            for varn in varns:
     
    2470324747                    print '    available ones:', varnsorted
    2470424748                    quit(-1)
     24749                tu = ot.units
     24750                newvart.setncattr('units',tu)
     24751
    2470524752                ovar = onc.variables[varn]
    2470624753                attrns = ovar.ncattrs()
     
    2472424771                    newvar = onewnc.createVariable(varn, vartype, tuple(newdims))
    2472524772
    24726                 varv = ovar[:]
    24727                 if len(newvar.shape) == 4: newvar[:,:,:,ifile] = varv[:]
    24728                 elif len(newvar.shape) == 3: newvar[:,:,ifile] = varv[:]
    24729                 elif len(newvar.shape) == 2: newvar[:,ifile] = varv[:]
    2473024773                for attrn in attrns:
    2473124774                    if attrn != '_FillValue':
     
    2473624779                    attrv = onc.getncattr(attrn)
    2473724780                    onewnc.setncattr(attrn, attrv)
    24738 
     24781                newvar = onewnc.variables[varn]
     24782                varv = ovar[:]
     24783                if gen.searchInlist(newvar.dimensions, 'time'):
     24784                    if len(newvar.shape) == 4: newvar[itcoinsort,:,:,ifile] = varv[:]
     24785                    elif len(newvar.shape) == 3: newvar[itcoinsort,:,ifile] = varv[:]
     24786                    elif len(newvar.shape) == 2: newvar[itcoinsort,ifile] = varv[:]
     24787                else:
     24788                    if len(newvar.shape) == 4: newvar[:,:,:,ifile] = varv[:]
     24789                    elif len(newvar.shape) == 3: newvar[:,:,ifile] = varv[:]
     24790                    elif len(newvar.shape) == 2: newvar[:,ifile] = varv[:]
    2473924791        else:
    2474024792            for varn in varns:
     
    2474724799                    print '    available ones:', varnsorted
    2474824800                    quit(-1)
     24801
    2474924802                ovar = onc.variables[varn]
    2475024803                newvar = onewnc.variables[varn]
    2475124804                varv = ovar[:]
    24752                 if len(newvar.shape) == 4: newvar[:,:,:,ifile] = varv[:]
    24753                 elif len(newvar.shape) == 3: newvar[:,:,ifile] = varv[:]
    24754                 elif len(newvar.shape) == 2: newvar[:,ifile] = varv[:]
     24805                if gen.searchInlist(newvar.dimensions, 'time'):
     24806                    if len(newvar.shape) == 4: newvar[itcoinsort,:,:,ifile] = varv[:]
     24807                    elif len(newvar.shape) == 3: newvar[itcoinsort,:,ifile] = varv[:]
     24808                    elif len(newvar.shape) == 2: newvar[itcoinsort,ifile] = varv[:]
     24809                else:
     24810                    if len(newvar.shape) == 4: newvar[:,:,:,ifile] = varv[:]
     24811                    elif len(newvar.shape) == 3: newvar[:,:,ifile] = varv[:]
     24812                    elif len(newvar.shape) == 2: newvar[:,ifile] = varv[:]
    2475524813 
    2475624814        onewnc.sync()
Note: See TracChangeset for help on using the changeset viewer.