Changeset 17598


Ignore:
Timestamp:
03/28/14 12:18:11 (11 years ago)
Author:
cborstad
Message:

CHG: subset the input data for better efficiency, mask out nan's since they corrupt the spline calculation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/interp/interp.py

    r17596 r17598  
    3636        assert len(kwargs)==0, 'error, unexpected or misspelled kwargs'
    3737
    38         points=npy.array([x,y]).T
     38        # create sub-vectors that just cover the limits of xi and yi
     39        dx=x[1]-x[0]
     40        dy=y[1]-y[0]
     41        xlim=[min(xi)-dx,max(xi)+dx]
     42        ylim=[min(yi)-dy,max(yi)+dy]
     43        xflag=npy.logical_and(x>xlim[0],x<xlim[1])
     44        yflag=npy.logical_and(y>ylim[0],y<ylim[1])
     45        bothind=npy.nonzero(npy.logical_and(xflag,yflag))
     46        subdata=data[bothind]
     47        subx=x[bothind]
     48        suby=y[bothind]
     49        points=npy.array([subx,suby]).T
     50
     51        # mask out any nan's in the data and corresponding coordinate points
     52        mask=npy.isnan(subdata)
     53        ind=npy.nonzero(mask)[0]
     54        if len(ind):
     55                print "WARNING: input data grid contains nan values. Spline interpolation may be questionable."
     56        subdata=npy.delete(subdata,ind)
     57        points=npy.delete(points,ind,axis=0)
    3958
    4059        if maxiter:
    41                 curvy=CloughTocher2DInterpolator(points,data,tol,maxiter=maxiter)
     60                spline=CloughTocher2DInterpolator(points,subdata,tol,maxiter=maxiter)
    4261        else:
    43                 curvy=CloughTocher2DInterpolator(points,data,tol)
     62                spline=CloughTocher2DInterpolator(points,subdata,tol)
    4463
    45         interpdata=curvy(xi,yi)
     64        interpdata=spline(xi,yi)
    4665
    4766        return interpdata
     
    99118        mask=npy.isnan(flatsubdata)
    100119        ind=npy.nonzero(mask)[0]
    101         if float(len(ind))/float(len(flatsubdata)) > 0.1:
    102                 print "WARNING: over 10% of data grid contains nan values. Spline interpolation may be questionable."
     120        if len(ind):
     121                print "WARNING: input data grid contains nan values. Spline interpolation may be questionable."
    103122        flatsubdata=npy.delete(flatsubdata,ind)
    104123        points=npy.delete(points,ind,axis=0)
    105124
    106125        # create spline and index spline at mesh points
    107         spl=CloughTocher2DInterpolator(points,flatsubdata)
    108         interpdata=spl(xi,yi)
     126        spline=CloughTocher2DInterpolator(points,flatsubdata)
     127        interpdata=spline(xi,yi)
    109128
    110129        return interpdata
Note: See TracChangeset for help on using the changeset viewer.