예제 #1
0
def load_nei2fvcom(filename, sidelength=True):
    """
    Loads a .nei file and returns the data as a dictionary that mimics the structure of fvcom output as closely as possible. 
    """

    # Load the neifile
    data = load_neifile(filename)

    # Use lcc projection get x,y data
    data['x'], data['y'], data['proj'] = pjt.lcc(data['lon'], data['lat'])

    # Get nv for grid
    data = get_nv(data)

    # ncdatasort to make typically structures
    data = dt.ncdatasort(data)

    # get the model sidelength
    if sidelength:
        data = get_sidelength(data)

    return data
예제 #2
0
def load_nei2fvcom(filename,sidelength=True):
    """
    Loads a .nei file and returns the data as a dictionary that mimics the structure of fvcom output as closely as possible. 
    """
    
    # Load the neifile
    data=load_neifile(filename)
    
    # Use lcc projection get x,y data
    data['x'],data['y'],data['proj']=pjt.lcc(data['lon'],data['lat'])
    
    # Get nv for grid
    data=get_nv(data)
    
    # ncdatasort to make typically structures
    data=dt.ncdatasort(data)
    
    # get the model sidelength
    if sidelength:
        data=get_sidelength(data)       
        
    return data
예제 #3
0
import os
np.set_printoptions(precision=8, suppress=True)

name = 'kitimat3_128'
grid = 'kitimat3'
dim = '2d'

directory = '/home/moflaher/Desktop/workspace_python/figures/timeseries/curl/' + grid + '_' + name + '_' + dim + '/'
if not os.path.exists(directory):
    os.makedirs(directory)

if 1 == 1:

    fileDir = '/media/moflaher/My Book/kitimat3_timetests/kitimat3_128_0/output/'
    data = dt.loadnc(fileDir, None, '2D')
    data = dt.ncdatasort(data)

    #region, passage, passageP = regions('kitimat3') # nargout=3
    #nidx, uvidx = get_indexs(nodell, uvnodell, region, trinodes) # nargout=2

if 1 == 1:
    a, b = data['ua'].shape  # nargout=2
    curl = np.zeros((b, a))
    z_vec = np.zeros((1, a)).T
    ua_in = np.hstack([data['ua'], z_vec]).T
    va_in = np.hstack([data['va'], z_vec]).T
    for i in np.arange(0, len(data['uvnodell'])):
        e1 = data['nbe'][i, 0]
        e2 = data['nbe'][i, 1]
        e3 = data['nbe'][i, 2]
        dudy = np.dot(data['a2u'][i, 0], ua_in[i, :]) + np.dot(
예제 #4
0
np.set_printoptions(precision=8,suppress=True)


name = 'kitimat3_128'
grid = 'kitimat3'
dim = '2d'

directory='/home/moflaher/Desktop/workspace_python/figures/timeseries/curl/' + grid + '_' + name + '_' + dim + '/'
if not os.path.exists(directory):
    os.makedirs(directory)

if 1 == 1:

    fileDir='/media/moflaher/My Book/kitimat3_timetests/kitimat3_128_0/output/'
    data = dt.loadnc(fileDir,None,'2D')
    data = dt.ncdatasort(data)
   


    #region, passage, passageP = regions('kitimat3') # nargout=3
    #nidx, uvidx = get_indexs(nodell, uvnodell, region, trinodes) # nargout=2



if 1 == 1:
    a, b = data['ua'].shape # nargout=2
    curl = np.zeros((b, a))
    z_vec = np.zeros((1,a)).T
    ua_in = np.hstack([data['ua'],z_vec]).T
    va_in = np.hstack([data['va'],z_vec]).T
    for i in np.arange(0,len(data['uvnodell'])):
예제 #5
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)
예제 #6
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)