예제 #1
0
def regioner(data,region,subset=False):    
    nidx=dt.get_nodes(data,region)

    idx0=np.in1d(data['nv'][:,0],nidx)
    idx1=np.in1d(data['nv'][:,1],nidx)
    idx2=np.in1d(data['nv'][:,2],nidx)
    eidx=idx0+idx1+idx2

    nv2 = data['nv'][eidx].flatten(order='F')
    nidx_uni=np.unique(nv2)
    nv_tmp2=np.empty(shape=nv2.shape)
    nv2_sortedind = nv2.argsort()
    nv2_sortd = nv2[nv2_sortedind]
         
    for i in xrange(len(nidx_uni)):
        i1 = bisect.bisect_left(nv2_sortd, nidx_uni[i])
        i2 = bisect.bisect_right(nv2_sortd,nidx_uni[i])
        inds = nv2_sortedind[i1:i2]
        nv_tmp2[inds] = i

    nv_new = np.reshape(nv_tmp2, (-1, 3), 'F')

    data['trigrid_sub'] = mplt.Triangulation(data['lon'][nidx_uni], data['lat'][nidx_uni],nv_new)
    data['nidx_sub']=nidx_uni
    data['eidx_sub']=eidx


    if subset==True:  
        data['zeta']=data['zeta'][:,nidx_uni]
        data['ua']=data['ua'][:,eidx]
        data['va']=data['va'][:,eidx]
        data['u']=data['u'][:,:,eidx]
        data['v']=data['v'][:,:,eidx]
        data['ww']=data['ww'][:,:,eidx]
        
    return data
예제 #2
0
def cross_shore_transect_2d(grid, name, region, vec, npt):
    data = dt.loadnc('runs/' + grid + '/' + name + '/output/',
                     singlename=grid + '_0001.nc')
    print('done load')
    data = dt.ncdatasort(data, trifinder=True)
    print('done sort')

    cages = gt.loadcage('runs/' + grid + '/' + name + '/input/' + grid +
                        '_cage.dat')
    if np.shape(cages) != ():
        tmparray = [
            list(
                zip(data['nodell'][data['nv'][i, [0, 1, 2, 0]], 0],
                    data['nodell'][data['nv'][i, [0, 1, 2, 0]], 1]))
            for i in cages
        ]
        color = 'g'
        lw = .2
        ls = 'solid'

    vectorstart = np.array(vec[0])
    vectorend = np.array(vec[1])
    vectorx = np.array([vectorstart[0], vectorend[0]])
    vectory = np.array([vectorstart[1], vectorend[1]])
    snv = (vectorend - vectorstart) / np.linalg.norm(vectorend - vectorstart)

    xi = np.linspace(vectorstart[0], vectorend[0], npt)
    yi = np.linspace(vectorstart[1], vectorend[1], npt)
    us = data['ua'].shape

    savepath = 'data/cross_shore_transect/'
    if not os.path.exists(savepath): os.makedirs(savepath)

    plotpath = 'figures/png/' + grid + '_2d/cross_shore_transect/'
    if not os.path.exists(plotpath): os.makedirs(plotpath)

    nidx = dt.get_nodes(data, region)
    f = plt.figure()
    ax = f.add_axes([.125, .1, .775, .8])
    triax = ax.tripcolor(data['trigrid'],
                         data['h'],
                         vmin=data['h'][nidx].min(),
                         vmax=data['h'][nidx].max())
    ax.plot(xi, yi, 'k', lw=3)
    if np.shape(cages) != ():
        lseg_t = LC(tmparray, linewidths=lw, linestyles=ls, color=color)
        coast = ax.add_collection(lseg_t)
        coast.set_zorder(30)
    pt.prettyplot_ll(ax, setregion=region, cb=triax, cblabel=r'Depth (m)')
    f.savefig(plotpath + name + '_' + ('%f' % vectorx[0]) + '_' +
              ('%f' % vectorx[1]) + '_' + ('%f' % vectory[0]) + '_' +
              ('%f' % vectory[1]) + '_' + ('%d' % len(xi)) +
              '_line_location.png',
              dpi=600)
    plt.close(f)

    fillarray_u = np.empty((us[0], npt))
    fillarray_v = np.empty((us[0], npt))
    fillalong = np.empty((us[0], npt))
    fillcross = np.empty((us[0], npt))
    dist = np.empty((npt, ))
    h = np.empty((npt, ))

    print('interp uvw on path')
    for i in range(0, len(xi)):
        print(i)
        fillarray_u[:, i] = interpE_at_loc(data, 'ua', [xi[i], yi[i]])
        fillarray_v[:, i] = interpE_at_loc(data, 'va', [xi[i], yi[i]])
        h[i] = interpN_at_loc(data, 'h', [xi[i], yi[i]])

    print('Calc along path current')
    for i in range(0, len(xi)):
        print(i)
        inner = np.inner(
            np.vstack([fillarray_u[:, i], fillarray_v[:, i]]).T, snv)
        along = np.vstack([inner * snv[0], inner * snv[1]]).T
        tmpa = np.multiply(np.sign(np.arctan2(along[:, 1], along[:, 0])),
                           np.linalg.norm(along, axis=1))
        fillalong[:, i] = tmpa
        cross = np.vstack([fillarray_u[:, i], fillarray_v[:, i]]).T - along
        tmpc = np.multiply(np.sign(np.arctan2(cross[:, 1], cross[:, 0])),
                           np.linalg.norm(cross, axis=1))
        fillcross[:, i] = tmpc

        dist[i] = (sw.dist([vectorstart[1], yi[i]], [vectorstart[0], xi[i]],
                           'km'))[0] * 1000

    if np.shape(cages) != ():
        incage = np.zeros((len(xi), ))
        host = data['trigrid'].get_trifinder().__call__(xi, yi)
        incage[np.in1d(host, cages)] = 1

    savedic = {}

    savedic['u'] = fillarray_u
    savedic['v'] = fillarray_v
    savedic['along'] = fillalong
    savedic['cross'] = fillcross
    savedic['distance'] = dist
    savedic['h'] = h
    savedic['lon'] = xi
    savedic['lat'] = yi
    if np.shape(cages) != ():
        savedic['incage'] = incage

    np.save(
        savepath + grid + '_' + name + '_' + ('%f' % vectorx[0]) + '_' +
        ('%f' % vectorx[1]) + '_' + ('%f' % vectory[0]) + '_' +
        ('%f' % vectory[1]) + '_' + ('%d' % len(xi)) + '_2d.npy', savedic)
    sio.savemat(savepath + 'matfiles/' + grid + '_' + name + '_' +
                ('%f' % vectorx[0]) + '_' + ('%f' % vectorx[1]) + '_' +
                ('%f' % vectory[0]) + '_' + ('%f' % vectory[1]) + '_' +
                ('%d' % len(xi)) + '_2d.mat',
                mdict=savedic)
예제 #3
0
def cross_shore_transect_2d(grid,name,region,vec,npt):
    data = dt.loadnc('runs/'+grid+'/'+name+'/output/',singlename=grid + '_0001.nc')
    print('done load')
    data = dt.ncdatasort(data,trifinder=True)
    print('done sort')

    cages=gt.loadcage('runs/'+grid+'/' +name+ '/input/' +grid+ '_cage.dat')
    if np.shape(cages)!=():
        tmparray=[list(zip(data['nodell'][data['nv'][i,[0,1,2,0]],0],data['nodell'][data['nv'][i,[0,1,2,0]],1])) for i in cages ]
        color='g'
        lw=.2
        ls='solid'
   
    vectorstart=np.array(vec[0])
    vectorend=np.array(vec[1])
    vectorx=np.array([vectorstart[0],vectorend[0]])
    vectory=np.array([vectorstart[1],vectorend[1]])
    snv=(vectorend-vectorstart)/np.linalg.norm(vectorend-vectorstart)

    xi=np.linspace(vectorstart[0],vectorend[0],npt)
    yi=np.linspace(vectorstart[1],vectorend[1],npt)
    us=data['ua'].shape

    savepath='data/cross_shore_transect/'
    if not os.path.exists(savepath): os.makedirs(savepath)

    plotpath='figures/png/'+grid+'_2d/cross_shore_transect/'
    if not os.path.exists(plotpath): os.makedirs(plotpath)



    nidx=dt.get_nodes(data,region)
    f=plt.figure()
    ax=f.add_axes([.125,.1,.775,.8])
    triax=ax.tripcolor(data['trigrid'],data['h'],vmin=data['h'][nidx].min(),vmax=data['h'][nidx].max())
    ax.plot(xi,yi,'k',lw=3)  
    if np.shape(cages)!=():   
        lseg_t=LC(tmparray,linewidths = lw,linestyles=ls,color=color)
        coast=ax.add_collection(lseg_t)
        coast.set_zorder(30)
    pt.prettyplot_ll(ax,setregion=region,cb=triax,cblabel=r'Depth (m)') 
    f.savefig(plotpath + name+'_'+('%f'%vectorx[0])+'_'+('%f'%vectorx[1])+'_'+('%f'%vectory[0])+'_'+('%f'%vectory[1])+'_'+('%d'%len(xi))+'_line_location.png',dpi=600)
    plt.close(f)

    fillarray_u=np.empty((us[0],npt))
    fillarray_v=np.empty((us[0],npt))
    fillalong=np.empty((us[0],npt))
    fillcross=np.empty((us[0],npt))
    dist=np.empty((npt,))
    h=np.empty((npt,))

    print('interp uvw on path')
    for i in range(0,len(xi)):
        print(i)
        fillarray_u[:,i]=interpE_at_loc(data,'ua',[xi[i],yi[i]])
        fillarray_v[:,i]=interpE_at_loc(data,'va',[xi[i],yi[i]])
        h[i]=interpN_at_loc(data,'h',[xi[i],yi[i]])

    print('Calc along path current')
    for i in range(0,len(xi)):
        print(i)
        inner=np.inner(np.vstack([fillarray_u[:,i],fillarray_v[:,i]]).T,snv)
        along=np.vstack([inner*snv[0],inner*snv[1]]).T
        tmpa=np.multiply(np.sign(np.arctan2(along[:,1],along[:,0])),np.linalg.norm(along,axis=1))
        fillalong[:,i]=tmpa
        cross=np.vstack([fillarray_u[:,i],fillarray_v[:,i]]).T-along
        tmpc=np.multiply(np.sign(np.arctan2(cross[:,1],cross[:,0])),np.linalg.norm(cross,axis=1))
        fillcross[:,i]=tmpc

        dist[i]=(sw.dist([vectorstart[1], yi[i]],[vectorstart[0], xi[i]],'km'))[0]*1000;
        
    if np.shape(cages)!=():
        incage=np.zeros((len(xi),))
        host=data['trigrid'].get_trifinder().__call__(xi,yi)
        incage[np.in1d(host,cages)]=1


    savedic={}

    savedic['u']=fillarray_u
    savedic['v']=fillarray_v
    savedic['along']=fillalong
    savedic['cross']=fillcross
    savedic['distance']=dist
    savedic['h']=h
    savedic['lon']=xi
    savedic['lat']=yi
    if np.shape(cages)!=():
        savedic['incage']=incage

    np.save(savepath+grid+'_'+name+'_'+('%f'%vectorx[0])+'_'+('%f'%vectorx[1])+'_'+('%f'%vectory[0])+'_'+('%f'%vectory[1])+'_'+('%d'%len(xi))+'_2d.npy',savedic)
    sio.savemat(savepath+'matfiles/'+grid+'_'+name+'_'+('%f'%vectorx[0])+'_'+('%f'%vectorx[1])+'_'+('%f'%vectory[0])+'_'+('%f'%vectory[1])+'_'+('%d'%len(xi))+'_2d.mat',mdict=savedic)