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
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)
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)