Changeset 396 in lmdz_wrf for trunk


Ignore:
Timestamp:
Apr 8, 2015, 4:01:25 PM (10 years ago)
Author:
lfita
Message:

Fixing 'slice_variable' for that dimensions which are not given a value to slice

Location:
trunk/tools
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/drawing.py

    r383 r396  
    519519    odimyu = objdimy.getncattr('units')
    520520
    521 # Getting only tat dimensions with coincident names
     521# Getting only that dimensions with coincident names
    522522    dimnvx = objdimx.dimensions
    523523    cutslice = []
     
    580580
    581581    if mapvalue == 'None': mapvalue = None
    582 
    583     print '  ' + fname + ': Lluis shapes valshad:',valshad.shape,'valcont:',valcont.shape
    584582
    585583    drw.plot_2D_shadow_contour(valshad, valcont, vnamesfig, odimxv, odimyv, odimxu,  \
     
    764762    if vdimxn == timename:
    765763        timevals = objsf.variables[vdimxn][:]
     764        timedims = objsf.variables[vdimxn].dimensions
    766765        dimt = 'x'
    767766        ovalaxis = objsf.variables[vdimyn]
     
    769768    elif vdimyn == timename:
    770769        timevals = objsf.variables[vdimyn][:]
     770        timedims = objsf.variables[vdimyn].dimensions
    771771        dimt = 'y'
    772772        ovalaxis = objsf.variables[vdimxn]
     
    779779    timepos, timelabels = drw.CFtimes_plot(timevals, timeunit, timekind, timefmt)
    780780
    781     if len(ovalaxis.shape) <= 2:
    782         ovalaxisv = ovalaxis[:]
    783 
    784     elif len(ovalaxis.shape) == 3:
    785         ovalaxisv = ovalaxis[0,:]
    786     else:
    787         print errormsg
    788         print '  ' + fname + ': shape of dimension variable:', ovalaxis.shape,       \
    789           ' not ready!!'
    790         quit(-1)
     781# Getting only that dimensions with coincident names
     782    dimnvx = ovalaxis.dimensions
     783
     784    cutslice = []
     785    for idimn in dimsshad:
     786        found = False
     787        for dimsn in dimnvx:
     788            if idimn == dimsn:
     789                cutslice.append(slice(0,len(objsf.dimensions[idimn])))
     790                found = True
     791        if not found: cutslice.append(0)
     792
     793    ovalaxisv = ovalaxis[tuple(cutslice)]
     794
     795##    if len(ovalaxis.shape) <= 2:
     796##        ovalaxisv = ovalaxis[:]
     797
     798##    elif len(ovalaxis.shape) == 3:
     799##        ovalaxisv = ovalaxis[0,:]
     800##    else:
     801##        print errormsg
     802##        print '  ' + fname + ': shape of dimension variable:', ovalaxis.shape,       \
     803##          ' not ready!!'
     804##        quit(-1)
    791805
    792806    if countlabelfmt == 'None':
     
    19221936    dimxv = dimtvalues[0:dimtsqx]
    19231937    dimyv = dimtvalues[0:dimt:dimtsqx]
    1924 
    1925     print 'Lluis lens: dimxv, dimyv:',len(dimxv), len(dimyv)
    19261938
    19271939    dimn = ['time','time']
  • trunk/tools/drawing_tools.py

    r385 r396  
    201201
    202202    Ndimcut = len(dimslice.split('|'))
     203    if Ndimcut == 0:
     204        Ndimcut = 1
     205        dimcut = list(dimslice)
     206
    203207    dimsl = dimslice.split('|')
    204208
     
    207211
    208212    for idd in range(Ndimvar):
     213        found = False
    209214        for idc in range(Ndimcut):
    210215            dimcutn = dimsl[idc].split(':')[0]
    211216            dimcutv = dimsl[idc].split(':')[1]
    212             if vardims[idd] == dimcutn: 
    213                 posfrac = dimcutv.find(':')
     217            if vardims[idd] == dimcutn:
     218                posfrac = dimcutv.find('@')
    214219                if posfrac != -1:
    215                     inifrac = int(dimcutv.split(':')[0])
    216                     endfrac = int(dimcutv.split(':')[1])
     220                    inifrac = int(dimcutv.split('@')[0])
     221                    endfrac = int(dimcutv.split('@')[1])
    217222                    varvalsdim.append(slice(inifrac,endfrac))
    218223                    dimnslice.append(vardims[idd])
     
    221226                        varvalsdim.append(slice(0,varobj.shape[idd]))
    222227                        dimnslice.append(vardims[idd])
     228                    elif int(dimcutv) == -9:
     229                        varvalsdim.append(int(varobj.shape[idd])-1)
    223230                    else:
    224231                        varvalsdim.append(int(dimcutv))
    225232                break
     233        if not found and not searchInlist(dimnslice,vardims[idd]):
     234            varvalsdim.append(slice(0,varobj.shape[idd]))
     235            dimnslice.append(vardims[idd])
    226236
    227237    varvalues = varobj[tuple(varvalsdim)]
     
    14471457        elif u == 'kg/(s*m2)': lu='$kgm^{-2}s^{-1}$'
    14481458        elif u == 'kgm-2s-1': lu='$kgm^{-2}s^{-1}$'
     1459        elif u == 'kg m-2 s-1': lu='$kgm^{-2}s^{-1}$'
    14491460        elif u == '1/m': lu='$m^{-1}$'
    14501461        elif u == 'm-1': lu='$m^{-1}$'
     
    15831594
    15841595    potinterval = np.log10(interval)
    1585     print 'LLuis minv, maxv:',minv,maxv,'potinterval:',potinterval
    15861596    Ipotint = int(potinterval)
    15871597    intvalue = np.float(interval / np.float(Nint))
     
    36923702    fname = 'plot_2D_shadow_contour'
    36933703
     3704
    36943705    if varsv == 'h':
    36953706        print fname + '_____________________________________________________________'
     
    38163827            else:
    38173828                y = np.zeros((dimxv.shape), dtype=np.float)
    3818                 print 'Lluis shapes y:',y.shape,'dimyv:',dimyv.shape,'dimxv:',dimxv.shape
    38193829
    38203830                if y.shape[0] == dimyv.shape[0]:
  • trunk/tools/nc_var_tools.py

    r392 r396  
    1069510695        dimt = objfile.variables[timn].shape
    1069610696
    10697     print 'Lluis Ttraj:',Ttraj+Tbeg,'dimt:',dimt
    10698 
    1069910697    if Tbeg + Ttraj > dimt:
    1070010698        print errormsg
     
    1097910977                      fillValue
    1098010978
    10981                     print 'Lluis slice2D:',slice2D,'slicev:',slicev
    1098210979                    varvalst[tuple(slice2D)] = varobj[tuple(slicev)]
    1098310980                    varvals[it,:,:,:] = varvalst
     
    1193511932
    1193611933    Ndimcut = len(dimslice.split('|'))
     11934    if Ndimcut == 0:
     11935        Ndimcut = 1
     11936        dimcut = list(dimslice)
     11937
    1193711938    dimsl = dimslice.split('|')
    1193811939
     
    1194111942
    1194211943    for idd in range(Ndimvar):
     11944        found = False
    1194311945        for idc in range(Ndimcut):
    1194411946            dimcutn = dimsl[idc].split(':')[0]
     
    1196011962                        varvalsdim.append(int(dimcutv))
    1196111963                break
     11964        if not found and not searchInlist(dimnslice,vardims[idd]):
     11965            varvalsdim.append(slice(0,varobj.shape[idd]))
     11966            dimnslice.append(vardims[idd])
    1196211967
    1196311968    varvalues = varobj[tuple(varvalsdim)]
     
    1199411999
    1199512000    if Nvardims != Ncutdims:
    11996         print errormsg
     12001        print warnmsg
    1199712002        print '  ' + fname + ': cutting for',Ncutdims,'but variable has:',Nvardims,  \
    1199812003          '!!'
    11999         quit(-1)
    12000 
    12001     for idc in range(Ncutdims):
     12004#        quit(-1)
     12005    cutdimvals = ''
     12006    for idv in range(Nvardims):
    1200212007        found = False
    12003         for idv in range(Nvardims):
     12008        Lcutdimvals = len(cutdimvals)
     12009        for idc in range(Ncutdims):
    1200412010            if vardims[idv] == cutdims[idc].split(':')[0]:
     12011                if Lcutdimvals > 0:
     12012                    cutdimvals = cutdimvals + '|' + cutdims[idc]
     12013                else:
     12014                    cutdimvals = cutdims[idc]
     12015
    1200512016                found = True
    1200612017                break
    1200712018        if not found:
    12008             print errormsg
    12009             print '  ' + fname + ": cutting by '",cutdims[idc].split(':')[0],        \
    12010               "' but variable has not it !!!"
    12011             print '  variable dims:',vardims
    12012             quit(-1)
    12013 
    12014     slicedvar, dimslice = slice_variable(ovar, dimvals)
     12019#            print errormsg
     12020#            print '  ' + fname + ": cutting by '",cutdims[idc].split(':')[0],        \
     12021#              "' but variable has not it !!!"
     12022#            print '  variable dims:',vardims
     12023            print warnmsg
     12024            print '  ' + fname + ": variable has dimension '",vardims[idv],          \
     12025              "' but is not cut taking all length !!!"
     12026            if Lcutdimvals > 0:
     12027                cutdimvals = cutdimvals + '|' + vardims[idv] + ':-1'
     12028            else:
     12029                cutdimvals = vardims[idv] + ':-1'
     12030#            quit(-1)
     12031
     12032    slicedvar, dimslice = slice_variable(ovar, cutdimvals)
    1201512033
    1201612034# operation
     
    1208512103    dimvn = values.split(',')[3]
    1208612104
     12105    dimsoperS = numVector_String(dimsoper.split(':'),', ')
    1208712106    objnc = NetCDFFile(ncfile, 'r')
    1208812107
     
    1215012169                    objvdim = objnc.variables[vardims[ivdim]]
    1215112170                    vdimtype = objvdim.dtype
    12152 
    12153                     dimsvdim = objvdim.dimensions
    12154                     dimvslice = []
    12155                     dimvdims = []
    12156                     for idmvd in range(len(dimsvdim)):
    12157                         found = False
    12158                         for idimv in range(len(newvardimns)):
    12159                             if dimsvdim[idmvd] == newvardimns[idimv]:
    12160                                 dimvslice.append(slice(0,objvdim.shape[idmvd]))
    12161                                 dimvdims.append(dimsvdim[idmvd])
    12162                                 found = True
    12163                                 break
    12164                         if not found:
    12165                             print warnmsg
    12166                             print '  ' + fname + ": dimension '" + dimsvdim[idmvd] + \
    12167                               "' not found !!"
    12168                             print "    adding it for variable dimension: '" +         \
    12169                               vardims[ivdim] + "'"
    12170                             if not objnewnc.dimensions.has_key(dimsvdim[idmvd]):
    12171                                 dsize = len(objnc.dimensions[dimsvdim[idmvd]])
    12172                                 objnewnc.createDimension(dimsvdim[idmvd], dsize)
    12173                             dimvslice.append(slice(len(objnc.dimensions[dimsvdim[idmvd]])))
    12174                             dimvdims.append(dimsvdim[idmvd])
     12171                    newdimvarv, newdimvardimns=operation_alongdims(objvdim,dimvals,dimsoper,operkind)
     12172
     12173# Old method introducing new dimension if needed
     12174##                    dimsvdim = objvdim.dimensions
     12175##                    dimvslice = []
     12176##                    dimvdims = []
     12177##                    for idmvd in range(len(dimsvdim)):
     12178##                        found = False
     12179##                        for idimv in range(len(newvardimns)):
     12180##                            if dimsvdim[idmvd] == newvardimns[idimv]:
     12181##                                dimvslice.append(slice(0,objvdim.shape[idmvd]))
     12182##                                dimvdims.append(dimsvdim[idmvd])
     12183##                                found = True
     12184##                                break
     12185##                        if not found:
     12186##                            print warnmsg
     12187##                            print '  ' + fname + ": dimension '" + dimsvdim[idmvd] + \
     12188##                              "' not found !!"
     12189##                            print "    adding it for variable dimension: '" +         \
     12190##                              vardims[ivdim] + "'"
     12191##                            if not objnewnc.dimensions.has_key(dimsvdim[idmvd]):
     12192##                                dsize = len(objnc.dimensions[dimsvdim[idmvd]])
     12193##                                objnewnc.createDimension(dimsvdim[idmvd], dsize)
     12194##                            dimvslice.append(slice(len(objnc.dimensions[dimsvdim[idmvd]])))
     12195##                            dimvdims.append(dimsvdim[idmvd])
    1217512196
    1217612197                    newvar = objnewnc.createVariable(vardims[ivdim], vdimtype,       \
    12177                       tuple(dimvdims))
    12178                     newvar[:] = objvdim[tuple(dimvslice)]
     12198                      tuple(newdimvardimns))
     12199                    newvar[:] = newdimvarv
    1217912200                    dimvattrs = objvdim.ncattrs()
    1218012201                    for attrn in dimvattrs:
    1218112202                        attrv = objvdim.getncattr(attrn)
    1218212203                        newattr = set_attribute(newvar,attrn,attrv)
     12204
     12205                    newattr = set_attribute(newvar, 'operation:',  operkind +        \
     12206                      ' along ' + dimsoperS)
    1218312207
    1218412208# new variable
     
    1220012224            else:
    1220112225                uname = variables_values(vn)[5]
    12202 
    12203             dimsoperS = numVector_String(dimsoper.split(':'),', ')
    1220412226   
    1220512227            newvar = objnewnc.createVariable(varname + operkind, 'f4',
     
    1250512527        for indima in range(Ndimvar):
    1250612528            found = False
    12507             print '  Lluis:',fname,dimns[indimv],dimvar[indima]
    1250812529            if dimns[indimv] == dimvar[indima]:
    1250912530                found = True
Note: See TracChangeset for help on using the changeset viewer.