Changeset 316 in lmdz_wrf for trunk


Ignore:
Timestamp:
Feb 26, 2015, 3:08:23 PM (10 years ago)
Author:
lfita
Message:

Adding multiple variables on 'file_oper_alongdims'

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/nc_var_tools.py

    r315 r316  
    1196911969          dimensions of the resultant operation
    1197011970      ncfile= netCDF file
    11971       varn= variable name
     11971      varn= ',' list of variable names ('all' for all)
    1197211972    """
    1197311973
     
    1198411984    dimvn = values.split(',')[3]
    1198511985
     11986    objnc = NetCDFFile(ncfile, 'r')
     11987
     11988    if varn.find(',') != -1:
     11989        if varn == 'all':
     11990            varns = objnc.variables
     11991        else:
     11992            varns = varn.split(',')
     11993    else:
     11994        varns = [varn]
     11995   
    1198611996    ofile = 'file_oper_alongdims_' + operkind + '.nc'
    1198711997
    11988     objnc = NetCDFFile(ncfile, 'r')
    11989 
    11990     if not objnc.variables.has_key(varn):
    11991         print errormsg
    11992         print '  ' + fname + ': netCDF file "' + ncfile +                            \
    11993           '" does not have variable "' + varn + '" !!!!'
    11994         quit(-1)
    11995 
    11996     objvar = objnc.variables[varn]
    11997 
    11998     newvarv, newvardimns = operation_alongdims(objvar,dimvals,dimsoper,operkind)
    11999 
    12000     print 'dimsoper:',dimsoper
    12001     print 'newvar shape',newvarv.shape,'newvardims:',newvardimns
     11998    if dimsoper.find(':') != -1:
     11999        dimstouse = dimsoper.split(':')
     12000    else:
     12001        dimstouse = [dimsoper]
    1200212002
    1200312003# Creation of output file
     
    1200612006    objnewnc = NetCDFFile(ofile, 'w')
    1200712007
     12008    print '  ' + fname + ": '" + operkind + "' with:",dimsoper,'_______'
     12009    for vn in varns:
     12010        print "'" + vn + "' ... .. ."
     12011
     12012        if not objnc.variables.has_key(vn):
     12013            print errormsg
     12014            print '  ' + fname + ': netCDF file "' + ncfile +                        \
     12015              '" does not have variable "' + vn + '" !!!!'
     12016            quit(-1)
     12017
     12018# Variable
     12019        objvar = objnc.variables[vn]
     12020
     12021        allfound = True
     12022        for idimt in dimstouse:
     12023            if not searchInlist(objvar.dimensions, idimt):
     12024                allfound = False
     12025                break
     12026
     12027        if not allfound:
     12028            print warnmsg
     12029            print '  ' + fname + ": variable '" + vn + "' (", objvar.dimensions,     \
     12030              ') does not have all the equired dimensions:', dimstouse, '!!'
     12031            print '    skipping it'
     12032           
     12033        else:
     12034            newvarv, newvardimns=operation_alongdims(objvar,dimvals,dimsoper,operkind)
     12035
    1200812036# Dimensions
    12009     for idim in range(len(newvardimns)):
    12010         objdim = objnc.dimensions[newvardimns[idim]]
    12011         if objdim.isunlimited():
    12012             objnewnc.createDimension(newvardimns[idim], None)
    12013         else:
    12014             objnewnc.createDimension(newvardimns[idim], len(objdim))
     12037            for idim in range(len(newvardimns)):
     12038                objdim = objnc.dimensions[newvardimns[idim]]
     12039                if not objnewnc.dimensions.has_key(newvardimns[idim]):
     12040                    if objdim.isunlimited():
     12041                        objnewnc.createDimension(newvardimns[idim], None)
     12042                    else:
     12043                        objnewnc.createDimension(newvardimns[idim], len(objdim))
    1201512044
    1201612045# Variables with dimension values
    12017     vardims = dimvn.split(':')
    12018     for ivdim in range(len(vardims)):
    12019         objvdim = objnc.variables[vardims[ivdim]]
    12020         dimsvdim = objvdim.dimensions
    12021         dimvslice = []
    12022         dimvdims = []
    12023         for idmvd in range(len(dimsvdim)):
    12024             found = False
    12025             for idimv in range(len(newvardimns)):
    12026                 if dimsvdim[idmvd] == newvardimns[idimv]:
    12027                     dimvslice.append(slice(0,objvdim.shape[idmvd]))
    12028                     dimvdims.append(dimsvdim[idmvd])
    12029                     found = True
    12030                     break
    12031             if not found: dimvslice.append(len(objnc.dimensions[dimsvdim[idmvd]])/2)
    12032 
    12033         newvar = objnewnc.createVariable(vardims[ivdim], 'f8', tuple(dimvdims))
    12034         newvar[:] = objvdim[tuple(dimvslice)]
    12035         dimvattrs = objvdim.ncattrs()
    12036         for attrn in dimvattrs:
    12037             attrv = objvdim.getncattr(attrn)
    12038             newattr = set_attribute(newvar,attrn,attrv)
     12046            vardims = dimvn.split(':')
     12047            for ivdim in range(len(vardims)):
     12048                if not objnewnc.variables.has_key(vardims[ivdim]):
     12049                    objvdim = objnc.variables[vardims[ivdim]]
     12050                    dimsvdim = objvdim.dimensions
     12051                    dimvslice = []
     12052                    dimvdims = []
     12053                    for idmvd in range(len(dimsvdim)):
     12054                        found = False
     12055                        for idimv in range(len(newvardimns)):
     12056                            if dimsvdim[idmvd] == newvardimns[idimv]:
     12057                                dimvslice.append(slice(0,objvdim.shape[idmvd]))
     12058                                dimvdims.append(dimsvdim[idmvd])
     12059                                found = True
     12060                                break
     12061                        if not found:
     12062                            dimvslice.append(len(objnc.dimensions[dimsvdim[idmvd]])/2)
     12063   
     12064                    newvar = objnewnc.createVariable(vardims[ivdim], 'f8',
     12065                      tuple(dimvdims))
     12066                    newvar[:] = objvdim[tuple(dimvslice)]
     12067                    dimvattrs = objvdim.ncattrs()
     12068                    for attrn in dimvattrs:
     12069                        attrv = objvdim.getncattr(attrn)
     12070                        newattr = set_attribute(newvar,attrn,attrv)
    1203912071
    1204012072# new variable
    12041     oldvarattr = objvar.ncattrs()
    12042 
    12043     varname = variables_values(varn)[0]
    12044     if searchInlist(oldvarattr, 'standard_name'):
    12045         stdname = objvar.getncattr('standard_name')
    12046     else:
    12047         stdname = variables_values(varn)[1]
    12048 
    12049     if searchInlist(oldvarattr, 'long_name'):
    12050         lname = objvar.getncattr('long_name')
    12051     else:
    12052         lname = variables_values(varn)[4].replace('|',' ')
    12053 
    12054     if searchInlist(oldvarattr, 'units'):
    12055         uname = objvar.getncattr('units')
    12056     else:
    12057         uname = variables_values(varn)[5]
    12058 
    12059     dimsoperS = numVector_String(dimsoper.split(':'),', ')
    12060 
    12061     newvar = objnewnc.createVariable(varname + operkind, 'f4', tuple(newvardimns))
    12062     newattr = basicvardef(newvar, stdname + operkind, lname + ' '+  operkind +       \
    12063       ' along ' + dimsoperS, uname)
    12064 
    12065     newvar[:] = newvarv
    12066     for idim in range(len(objvar.shape)):
    12067         dimn = dimvals.split('|')[idim].split(':')[0]
    12068         dimv = '{:d}'.format(len(objnc.dimensions[dimn]))
    12069         if idim == 0:
    12070             origdimsS = dimn + '(' + dimv + ')'
    12071         else:
    12072             origdimsS = origdimsS + ' ' + dimn + '(' + dimv + ')'
    12073 
    12074 
    12075     newattr = set_attribute(newvar, 'orig_dimensions', origdimsS)
    12076 
     12073            oldvarattr = objvar.ncattrs()
     12074   
     12075            varname = variables_values(vn)[0]
     12076            if searchInlist(oldvarattr, 'standard_name'):
     12077                stdname = objvar.getncattr('standard_name')
     12078            else:
     12079                stdname = variables_values(vn)[1]
     12080       
     12081            if searchInlist(oldvarattr, 'long_name'):
     12082                lname = objvar.getncattr('long_name')
     12083            else:
     12084                lname = variables_values(vn)[4].replace('|',' ')
     12085
     12086            if searchInlist(oldvarattr, 'units'):
     12087                uname = objvar.getncattr('units')
     12088            else:
     12089                uname = variables_values(vn)[5]
     12090
     12091            dimsoperS = numVector_String(dimsoper.split(':'),', ')
     12092   
     12093            newvar = objnewnc.createVariable(varname + operkind, 'f4',
     12094              tuple(newvardimns))
     12095            newattr = basicvardef(newvar, stdname + operkind, lname + ' '+ operkind +\
     12096              ' along ' + dimsoperS, uname)
     12097
     12098            newvar[:] = newvarv
     12099            for idim in range(len(objvar.shape)):
     12100                dimn = dimvals.split('|')[idim].split(':')[0]
     12101                dimv = '{:d}'.format(len(objnc.dimensions[dimn]))
     12102                if idim == 0:
     12103                    origdimsS = dimn + '(' + dimv + ')'
     12104                else:
     12105                    origdimsS = origdimsS + ' ' + dimn + '(' + dimv + ')'
     12106
     12107            newattr = set_attribute(newvar, 'orig_dimensions', origdimsS)
     12108   
    1207712109# global attributes
    1207812110    objnewnc.setncattr('author', 'L. Fita')
     
    1210012132
    1210112133    return
     12134
     12135#file_oper_alongdims('Time:-1|bottom_top:-1|south_north:-1|west_east:-1,bottom_top,sum,Times:XLAT:XLONG',
     12136#  '/home/lluis/PY/wrfout_d01_2001-11-11_00:00:00.tests', 'QVAPOR')
    1210212137
    1210312138#file_oper_alongdims('time:-1|z:-1|x:-1|y:-1,time:y,mean,pressure:lat', '/home/lluis/etudes/WRF_LMDZ/WaquaL/WRF_LMDZ/AR40/vertical_interpolation_WRFp.nc', 'WRFt')
Note: See TracChangeset for help on using the changeset viewer.