Changeset 786 in lmdz_wrf for trunk


Ignore:
Timestamp:
May 29, 2016, 7:48:24 PM (9 years ago)
Author:
lfita
Message:

Fixing `sellonlatbox' for files with station-list data

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/nc_var_tools.py

    r783 r786  
    56115611        vardims = varobj.dimensions
    56125612
    5613         if not searchInlist(list(vardims),dimn):
     5613        if not gen.searchInlist(list(vardims),dimn):
    56145614            varvals = varobj[:]
    56155615        else:
     
    56275627##
    56285628        varattrs = varobj.ncattrs()
    5629         if searchInlist(varattrs, '_FillValue'):
     5629        if gen.searchInlist(varattrs, '_FillValue'):
    56305630            varfil = varobj._FillValue
    56315631        else:
     
    58545854    gen.check_arguments(fname,values,arguments,',')
    58555855
    5856 
    58575856    lonn = values.split(',')[0]
    58585857    latn = values.split(',')[1]
     
    59315930        dimx = lonv.shape[0]
    59325931        dimy = latv.shape[0]
    5933         malonlat = np.zeros((dimy,dimx), dtype=lonv.dtype)
    5934         for i in range(dimx):
    5935             malonlat[:,i] = malon[i] + malat
     5932        malonlat = malon.mask + malat.mask
     5933        malonv = ma.array(lonv, mask=malonlat)
     5934        malatv = ma.array(latv, mask=malonlat)
    59365935    elif len(lonv.shape) == 2:
    59375936        dlonn = loninf.dimns[1]
     
    59515950        dimy = lonv.shape[1]
    59525951        malonlat = np.zeros((dimy,dimx), dtype=bool)
    5953         malonlat = malon.mask[0,:,:] + malat.mask[0,:,:]
    5954         malonv = ma.array(lonv, mask=malon)
    5955         malatv = ma.array(latv, mask=malon)
     5952        malonlat = malon.mask + malat.mask
     5953        malonv = ma.array(lonv, mask=malonlat)
     5954        malatv = ma.array(latv, mask=malonlat)
    59565955    else:
    59575956        print errormsg
     
    59695968
    59705969    ilon = dimx
    5971     for j in range(dimy):
    5972         for i in range(dimx):
    5973             if malonlat[j,i] == False and i < ilon:
    5974               ilon = i
    59755970    elon = 0
    5976     for j in range(dimy):
    5977         for i in range(dimx):
    5978             if malonlat[j,i] == False and i > elon:
    5979               elon = i
    5980 
    59815971    ilat = dimy
    5982     for j in range(dimy):
    5983         for i in range(dimx):
    5984             if malonlat[j,i] == False and j < ilat:
    5985               ilat = j
    59865972    elat = 0
    5987     for j in range(dimy):
    5988         for i in range(dimx):
    5989             if malonlat[j,i] == False and j > elat:
    5990               elat = j
    5991 
    5992     newdimx = elon - ilon + 1
    5993     newdimy = elat - ilat + 1
     5973    if  len(lonv.shape) > 1:
     5974        for j in range(dimy):
     5975            for i in range(dimx):
     5976                if malonlat[j,i] == False and i < ilon:
     5977                    ilon = i
     5978                if malonlat[j,i] == False and i > elon:
     5979                    elon = i
     5980                if malonlat[j,i] == False and j < ilat:
     5981                    ilat = j
     5982                if malonlat[j,i] == False and j > elat:
     5983                    elat = j
     5984    else:
     5985        if dimx != dimy:
     5986            for i in range(dimx):
     5987                if malonlat[i] == False and i < ilon:
     5988                    ilon = i
     5989                if malonlat[i] == False and i > elon:
     5990                    elon = i
     5991            for j in range(dimy):
     5992                if malonlat[j] == False and j < ilat:
     5993                    ilat = j
     5994                if malonlat[j] == False and j > elat:
     5995                    elat = i
     5996        else:
     5997            for i in range(dimx):
     5998                if malonlat[i] == False and i < ilon:
     5999                    ilon = i
     6000                    ilat = i
     6001                if malonlat[i] == False and i > elon:
     6002                    elon = i
     6003                    elat = i
     6004
     6005    print 'ilon elon ilat elat:', ilon, elon, ilat, elat
     6006#    newdimx = elon - ilon + 1
     6007#    newdimy = elat - ilat + 1
     6008    newdimx = dimx - np.sum(malonv.mask)
     6009    newdimy = dimy - np.sum(malatv.mask)
    59946010
    59956011    if len(malon.shape) == 1:
     
    60496065            if not gen.searchInlist(newncobj.dimensions, dimn):
    60506066                newncobj.createDimension(dimn, len(objfile.dimensions[dimn]))
    6051             if dimn == dlonn:
     6067# Very special case when we have for example a list of stations (which is the case!)
     6068            if dimn == dlonn and dimx != dimy:
    60526069                varslice.append(slice(ilon,elon+1))
    6053             elif dimn == dlatn:
     6070            elif dimn == dlatn and dimx != dimy:
    60546071                varslice.append(slice(ilat,elat+1))
    60556072            else:
     
    60616078            newvar = newncobj.createVariable(vn, nctype(varinf.dtype), varinf.dimns, \
    60626079              fill_value = varinf.FillValue)
    6063         newvar[:] = varobj[tuple(varslice)]
     6080
     6081        if dimx != dimy:
     6082            newvar[:] = varobj[tuple(varslice)]
     6083        else:
     6084# Very special case when we have for example a list of stations (which is the case!)
     6085            print '  ' + fname + ': woow we are in a stations-list like of file...'
     6086            inpos0 = 0
     6087            for i in range(newdimx):
     6088                inpos = gen.index_vec(malonlat[inpos0:dimx+1], False)
     6089                inpos = inpos + inpos0
     6090                inpos0 = inpos + 1
     6091                varslice = []
     6092                newvarslice = []
     6093                for dimn in varinf.dimns:
     6094                    if not gen.searchInlist(newncobj.dimensions, dimn):
     6095                        newncobj.createDimension(dimn, len(objfile.dimensions[dimn]))
     6096# Very special case when we have for example a list of stations (which is the case!)
     6097                    if dimn == dlonn:
     6098                        varslice.append(inpos)
     6099                        newvarslice.append(i)
     6100                    else:
     6101                        varslice.append(slice(0,len(objfile.dimensions[dimn])))
     6102                        newvarslice.append(slice(0,len(objfile.dimensions[dimn])))
     6103                newvar[tuple(newvarslice)] = varobj[tuple(varslice)]
    60646104
    60656105        for atrn in varinf.attributes:
Note: See TracChangeset for help on using the changeset viewer.