Esempio n. 1
0
def plot_cb(geofil,fil,xstart,xend,ystart,yend,zs,ze,meanax,
        savfil=None,perc=99):
    X,Y,P = extract_cb_terms(geofil,fil,xstart,xend,ystart,yend,zs,ze,meanax)
    cmax = np.nanpercentile(np.absolute(P),perc)
    fig,axc = plt.subplots(1,3,sharex=True,sharey=True,figsize=(10, 3))
    ti = ['(a)','(b)','(c)','(d)','(e)','(f)','(g)','(h)','(i)','(j)']
    lab = [ r'$(\bar{h}\hat{u})_{\tilde{x}}$',
            r'$(\bar{h}\hat{v})_{\tilde{y}}$',
            r'$(\bar{h}\hat{\varpi})_{\tilde{b}}$']

    for i in range(P.shape[-1]):
        ax = axc.ravel()[i]
        im = m6plot((X,Y,P[:,:,i]),ax,vmax=cmax,vmin=-cmax,#ptype='imshow',
                txt=lab[i], ylim=(-2500,0),cmap='RdBu_r',cbar=False)

        xdegtokm(ax,0.5*(ystart+yend))
        if i == 0:
            ax.set_ylabel('z (m)')
        #ax.set_ylim(-1500,0)

    fig.tight_layout()
    cb = fig.colorbar(im, ax=axc.ravel().tolist())
    cb.formatter.set_powerlimits((0, 0))
    cb.update_ticks()

    if savfil:
        plt.savefig(savfil+'.eps', dpi=300, facecolor='w', edgecolor='w',
                    format='eps', transparent=False, bbox_inches='tight')
    else:
        im = m6plot((X,Y,np.sum(P,axis=2)),vmax=cmax,vmin=-cmax,cmap='RdBu_r')
        plt.show()
def plot_momx(geofil,
              fil,
              xstart,
              xend,
              ystart,
              yend,
              zs,
              ze,
              meanax,
              savfil=None,
              alreadysaved=False):
    X, Y, P = extract_momx_terms(geofil, fil, xstart, xend, ystart, yend, zs,
                                 ze, meanax, alreadysaved)
    cmax = np.nanmax(np.absolute(P))
    fig = plt.figure(figsize=(12, 9))
    ti = ['(a)', '(b)', '(c)', '(d)', '(e)', '(f)', '(g)', '(h)', '(i)', '(j)']
    lab = [
        r'$\overline{(f+\zeta)v-(KE)_{\tilde{x}}}$',
        r'$-\overline{\varpi u_{\tilde{b}}}$', r'$-\overline{m_{\tilde{x}}}$',
        r'$\overline{X^H}$', r'$\overline{X^V}$'
    ]

    for i in range(P.shape[-1]):
        ax = plt.subplot(5, 2, i + 1)
        im = m6plot((X, Y, P[:, :, i]),
                    ax,
                    vmax=cmax,
                    vmin=-cmax,
                    txt=lab[i],
                    ylim=(-2500, 0),
                    cmap='RdBu_r')
        if i % 2:
            ax.set_yticklabels([])
        else:
            ax.set_ylabel('z (m)')

        if i > 2:
            xdegtokm(ax, 0.5 * (ystart + yend))

        else:
            ax.set_xticklabels([])

    if savfil:
        plt.savefig(savfil + '.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        im = m6plot((X, Y, np.sum(P, axis=2)), Zmax=cmax, cmap='RdBu_r')
        plt.show()
Esempio n. 3
0
def plot_nt(geofil,vgeofil,fil,fil2,xstart,xend,ystart,yend,zs,ze,meanax,
        cmaxscalefactor = 1, savfil=None):
    X,Y,P,lr = extract_northward_transport(geofil,vgeofil,fil,fil2,xstart,xend,ystart,yend,zs,ze,meanax)
    cmax = np.nanmax(np.absolute(P))*cmaxscalefactor
    fig,ax = plt.subplots(1,2,sharey=True,figsize=(4,4))#,figsize=(8, 4))
    ti = [r'$\int_{-D}^{0} (vdx) dz$ $(m^3s^{-1}) \forall v>0$',
            r'$\int_{-D}^{0} (vdx) dz$ $(m^3s^{-1}) \forall v<0$']
    for i in range(P.shape[-1]):
        im = m6plot((X,Y,P[:,:,i]),ax[i],vmax=cmax,vmin=-cmax,ptype='imshow',
                cmap='RdBu_r',cbar=False)
        cs = ax[i].contour(X,Y,P[:,:,i],
                colors='k',levels=[-4,-3,3,4])
        cs.clabel(inline=True,fmt="%.3f")

        ax[i].plot(-np.nanmean(lr,axis=1),Y,lw=2,color='k')
        ax[i].grid(True)
        xdegtokm(ax[i],0.5*(ystart+yend))
    ax[0].set_ylabel(r'y ($^{\circ}$)')
    fig.tight_layout()
    cb = fig.colorbar(im,ax=[ax[0],ax[1]])
    cb.formatter.set_powerlimits((0, 0))
    cb.update_ticks()

#    ax[2].plot(np.nansum(P[:,:,0],axis=1)/1e3,Y,lw=2,label='North',color='r')
#    ax[2].plot(np.nansum(-P[:,:,1],axis=1)/1e3,Y,lw=2,label='South',color='b')
#    ax[2].set_xlabel('EB transport ($10^3 m^3s^{-1}$)')
#    #ax.text(0.1,0.05,r'$\int_{D}^{0} \int_{EB}^{} v dx dz$ ($m^3s^{-1}$)',transform=ax.transAxes)
#    ax[2].grid(True)
#    plt.legend(loc='best')

#    ax = plt.subplot(1,4,1)
#    ax.plot(np.nanmean(lr,axis=1),Y,lw=2,color='k')
#    ax.set_xlabel(r'$L_R$ (km)')
#    plt.ylabel(r'$y (^{\circ}$)')
#    ax.grid(True)
#    plt.tight_layout()
    
    if savfil:
        plt.savefig(savfil+'.eps', dpi=300, facecolor='w',
                    format='eps', transparent=True, bbox_inches='tight')
    else:
        return fig
def extractT(geofil,
             fil,
             xstart,
             xend,
             ystart,
             yend,
             zs,
             ze,
             meanax,
             ts=0,
             te=None,
             z=None,
             drhodt=-0.2,
             rho0=1031.0,
             savfil=None,
             plotit=True,
             loop=True):

    keepax = ()
    for i in range(4):
        if i not in meanax:
            keepax += (i, )

    fh = mfdset(fil)
    (xs, xe), (ys, ye), dimh = rdp1.getlatlonindx(fh,
                                                  wlon=xstart,
                                                  elon=xend,
                                                  slat=ystart,
                                                  nlat=yend,
                                                  zs=zs,
                                                  ze=ze)
    fhgeo = dset(geofil)
    D = rdp1.getgeombyindx(fhgeo, xs, xe, ys, ye)[0]
    fhgeo.close()
    nt = dimh[0].size
    t0 = time.time()

    zl = rdp1.getdims(fh)[2][1]
    if loop:
        print('Reading data in loop...')
        e = fh.variables['e'][0:1, zs:ze, ys:ye, xs:xe] / nt
        for i in range(nt):
            e += fh.variables['e'][i:i + 1, zs:ze, ys:ye, xs:xe] / nt
            sys.stdout.write('\r' + str(int((i + 1) / nt * 100)) + '% done...')
            sys.stdout.flush()
        print('Time taken for data reading: {}s'.format(time.time() - t0))
    else:
        e = fh.variables['e'][ts:te, zs:ze, ys:ye, xs:xe]

    X = dimh[keepax[1]]
    Y = dimh[keepax[0]]
    if 1 in keepax:
        Y = z
        if z == None:
            z = np.linspace(-np.nanmax(D), -1, num=50)
            Y = z
    T = getTatz(zl, z, e)
    T = (T - rho0) / drhodt
    T = np.ma.apply_over_axes(np.nanmean, T, meanax)

    P = T.squeeze()
    data = (X, Y, P)

    if plotit:
        Pmax = np.nanmax(P)
        Pmin = np.nanmin(P)
        im = m6plot(data,
                    vmax=Pmax,
                    vmin=Pmin,
                    title=r'T at 40N ($^{\circ}$C)',
                    xlabel=r'x ($^{\circ}$)',
                    ylabel='z (m)',
                    bvnorm=True,
                    blevs=15)
        if savfil:
            plt.savefig(savfil + '.eps',
                        dpi=300,
                        facecolor='w',
                        edgecolor='w',
                        format='eps',
                        transparent=False,
                        bbox_inches='tight')
        else:
            plt.show()
    else:
        return data
Esempio n. 5
0
def plot_twamomy(geofil,
                 vgeofil,
                 fil,
                 fil2,
                 xstart,
                 xend,
                 ystart,
                 yend,
                 zs,
                 ze,
                 meanax,
                 fil3=None,
                 cmaxpercfactor=1,
                 cmaxpercfactorforep=1,
                 plotterms=[3, 4, 5, 6, 7, 8],
                 swashperc=1,
                 savfil=None,
                 savfilep=None,
                 alreadysaved=False):
    X, Y, P, Pep, swash, em = extract_twamomy_terms(geofil,
                                                    vgeofil,
                                                    fil,
                                                    fil2,
                                                    xstart,
                                                    xend,
                                                    ystart,
                                                    yend,
                                                    zs,
                                                    ze,
                                                    meanax,
                                                    alreadysaved=alreadysaved,
                                                    fil3=fil3)
    P = np.ma.masked_array(P, mask=np.isnan(P)).squeeze()
    cmax = np.nanpercentile(P, [cmaxpercfactor, 100 - cmaxpercfactor])
    cmax = np.max(np.fabs(cmax))
    fig, ax = plt.subplots(np.int8(np.ceil(len(plotterms) / 2)),
                           2,
                           sharex=True,
                           sharey=True,
                           figsize=(10, 5.5))
    ti = ['(a)', '(b)', '(c)', '(d)', '(e)', '(f)', '(g)', '(h)', '(i)', '(j)']
    lab = [
        r'$-\hat{u}\hat{v}_{\tilde{x}}$',
        r'$-\hat{v}\hat{v}_{\tilde{y}}$',
        r'$-\hat{\varpi}\hat{v}_{\tilde{b}}$',
        r'$-f\hat{u}$',
        r'$-\overline{m_{\tilde{y}}}$',
        r"""$-\frac{1}{\overline{h}}(\overline{h}\widehat{u^{\prime \prime}v^{\prime \prime}})_{\tilde{x}}$""",
        #r"""$-\frac{1}{\overline{h}}(\overline{h}\widehat{v^{\prime \prime}v^{\prime \prime}}+\frac{1}{2}\overline{\zeta^{\prime 2}})_{\tilde{y}}$""",
        r"""$-\frac{1}{\overline{h}}(\overline{h}\widehat{v^{\prime \prime}v^{\prime \prime}})_{\tilde{y}}$""",
        #r"""$-\frac{1}{\overline{h}}(\overline{h}\widehat{v^{\prime \prime}\varpi ^{\prime \prime}} + \overline{\zeta^\prime m_{\tilde{y}}^\prime})_{\tilde{b}}$""",
        r"""$-\frac{1}{\overline{\zeta_{\tilde{b}}}}(\overline{\zeta^\prime m_{\tilde{y}}^\prime})_{\tilde{b}}$""",
        r'$\widehat{Y^H}$',
        r'$\widehat{Y^V}$'
    ]

    for i, p in enumerate(plotterms):
        axc = ax.ravel()[i]
        im = m6plot((X, Y, P[:, :, p]),
                    axc,
                    vmax=cmax,
                    vmin=-cmax,
                    ptype='imshow',
                    txt=lab[p],
                    ylim=(-2000, 0),
                    cmap='RdBu_r',
                    cbar=False)
        if fil3:
            cs = axc.contour(X,
                             Y,
                             swash,
                             np.array([swashperc]),
                             colors='grey',
                             linewidths=4)
        cs = axc.contour(X,
                         Y,
                         P[:, :, p],
                         levels=[-2e-6, -1e-6, 1e-6, 2e-6],
                         colors='k',
                         linestyles='dashed')
        cs.clabel(inline=True, fmt="%.0e")
        cs1 = axc.plot(X, em[::4, :].T, 'k')

        if i % 2 == 0:
            axc.set_ylabel('z (m)')
        if i > np.size(ax) - 3:
            xdegtokm(axc, 0.5 * (ystart + yend))

    fig.tight_layout()
    cb = fig.colorbar(im, ax=ax.ravel().tolist())
    cb.formatter.set_powerlimits((0, 0))
    cb.update_ticks()
    if savfil:
        plt.savefig(savfil + '.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()

    im = m6plot((X, Y, np.sum(P, axis=2)),
                vmax=cmax,
                vmin=-cmax,
                ptype='imshow',
                cmap='RdBu_r',
                ylim=(-2500, 0))
    if savfil:
        plt.savefig(savfil + 'res.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()

    Pep = np.ma.masked_array(Pep, mask=np.isnan(Pep)).squeeze()
    cmax = np.nanpercentile(Pep,
                            [cmaxpercfactorforep, 100 - cmaxpercfactorforep])
    cmax = np.max(np.fabs(cmax))

    lab = [
        r'$-\frac{(\overline{huv})_{\tilde{x}}}{\overline{h}}$',
        r'$\frac{\hat{v}(\overline{hu})_{\tilde{x}}}{\overline{h}}$',
        r'$-\frac{(\overline{hvv})_{\tilde{y}}}{\overline{h}}$',
        r'$\frac{\hat{v}(\overline{hv})_{\tilde{y}}}{\overline{h}}$',
        r"""-$\frac{1}{2\overline{h}}\overline{\zeta ^{\prime 2}}_{\tilde{y}}$""",
        r'$-\frac{(\overline{hv\varpi})_{\tilde{b}}}{\overline{h}}$',
        r'$\frac{\hat{v}(\overline{h\varpi})_{\tilde{b}}}{\overline{h}}$',
        r"""$-\frac{(\overline{\zeta^\prime m_{\tilde{y}}^\prime})_{\tilde{b}}}{\overline{h}}$"""
    ]

    fig, ax = plt.subplots(np.int8(np.ceil(Pep.shape[-1] / 2)),
                           2,
                           sharex=True,
                           sharey=True,
                           figsize=(12, 9))
    for i in range(Pep.shape[-1]):
        axc = ax.ravel()[i]
        im = m6plot((X, Y, Pep[:, :, i]),
                    axc,
                    vmax=cmax,
                    vmin=-cmax,
                    ptype='imshow',
                    txt=lab[i],
                    cmap='RdBu_r',
                    ylim=(-2500, 0),
                    cbar=False)
        if fil3:
            cs = axc.contour(X,
                             Y,
                             swash,
                             np.array([swashperc]),
                             colors='grey',
                             linewidths=4)
        cs = axc.contour(X,
                         Y,
                         P[:, :, p],
                         levels=[-2e-6, -1e-6, 1e-6, 2e-6],
                         colors='k')
        cs.clabel(inline=True, fmt="%.0e")
        if i % 2 == 0:
            axc.set_ylabel('z (m)')

        if i > np.size(ax) - 3:
            xdegtokm(axc, 0.5 * (ystart + yend))

    fig.tight_layout()
    cb = fig.colorbar(im, ax=ax.ravel().tolist())
    cb.formatter.set_powerlimits((0, 0))
    cb.update_ticks()

    if savfilep:
        plt.savefig(savfilep + '.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()
Esempio n. 6
0
def plot_twamomy(geofil,
                 vgeofil,
                 fil,
                 fil2,
                 xstart,
                 xend,
                 ystart,
                 yend,
                 zs,
                 ze,
                 meanax,
                 cmaxscalefactor=1,
                 cmaxscalefactorforep=1,
                 savfil=None,
                 savfilep=None,
                 alreadysaved=False):
    X, Y, P, Pep = extract_twamomy_terms(geofil, vgeofil, fil, fil2, xstart,
                                         xend, ystart, yend, zs, ze, meanax,
                                         alreadysaved)
    cmax = np.nanmax(np.absolute(P)) * cmaxscalefactor
    fig = plt.figure(figsize=(12, 9))
    ti = ['(a)', '(b)', '(c)', '(d)', '(e)', '(f)', '(g)', '(h)', '(i)', '(j)']
    lab = [
        r'$-\hat{u}\hat{v}_{\tilde{x}}$', r'$-\hat{v}\hat{v}_{\tilde{y}}$',
        r'$-\hat{\varpi}\hat{v}_{\tilde{b}}$', r'$-f\hat{u}$',
        r'$-\overline{m_{\tilde{y}}}$',
        r"""$-\frac{1}{\overline{h}}(\widehat{u^{\prime \prime}v^{\prime \prime}})_{\tilde{x}}$""",
        r"""$-\frac{1}{\overline{h}}(\widehat{v^{\prime \prime}v^{\prime \prime}}+\frac{1}{2}\overline{\zeta^{\prime 2}})_{\tilde{y}}$""",
        r"""$-\frac{1}{\overline{h}}(\widehat{v^{\prime \prime}\varpi ^{\prime \prime}} + \overline{\zeta^\prime m_{\tilde{y}}^\prime})_{\tilde{b}}$""",
        r'$\widehat{Y^H}$', r'$\widehat{Y^V}$'
    ]

    for i in range(P.shape[-1]):
        ax = plt.subplot(5, 2, i + 1)
        im = m6plot((X, Y, P[:, :, i]),
                    ax,
                    vmax=cmax,
                    vmin=-cmax,
                    txt=lab[i],
                    ylim=(-2500, 0),
                    cmap='RdBu_r')
        if i % 2:
            ax.set_yticklabels([])
        else:
            ax.set_ylabel('z (m)')

        if i > 7:
            xdegtokm(ax, 0.5 * (ystart + yend))

        else:
            ax.set_xticklabels([])

    if savfil:
        plt.savefig(savfil + '.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()

    if savfil:
        im = m6plot((X, Y, np.sum(P, axis=2)),
                    vmax=cmax,
                    vmin=-cmax,
                    cmap='RdBu_r',
                    ylim=(-2500, 0))
        plt.savefig(savfil + 'res.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()

    lab = [
        r'$-\frac{(\overline{huv})_{\tilde{x}}}{\overline{h}}$',
        r'$\frac{\hat{v}(\overline{hu})_{\tilde{x}}}{\overline{h}}$',
        r'$-\frac{(\overline{hvv})_{\tilde{y}}}{\overline{h}}$',
        r'$\frac{\hat{v}(\overline{hv})_{\tilde{y}}}{\overline{h}}$',
        r"""-$\frac{1}{2\overline{h}}\overline{\zeta ^{\prime 2}}_{\tilde{y}}$""",
        r'$-\frac{(\overline{hv\varpi})_{\tilde{b}}}{\overline{h}}$',
        r'$\frac{\hat{v}(\overline{h\varpi})_{\tilde{b}}}{\overline{h}}$',
        r"""$-\frac{(\overline{\zeta^\prime m_{\tilde{y}}^\prime})_{\tilde{b}}}{\overline{h}}$"""
    ]

    cmax = np.nanmax(np.absolute(Pep)) * cmaxscalefactorforep
    plt.figure(figsize=(12, 8))
    for i in range(Pep.shape[-1]):
        ax = plt.subplot(4, 2, i + 1)
        im = m6plot((X, Y, Pep[:, :, i]),
                    ax,
                    vmax=cmax,
                    vmin=-cmax,
                    txt=lab[i],
                    cmap='RdBu_r',
                    ylim=(-2500, 0))
        if i % 2:
            ax.set_yticklabels([])
        else:
            plt.ylabel('z (m)')

        if i > 5:
            xdegtokm(ax, 0.5 * (ystart + yend))
        else:
            ax.set_xticklabels([])

    if savfilep:
        plt.savefig(savfilep + '.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()
Esempio n. 7
0
def extract_uv(geofil,
               fil,
               fil2,
               fil3,
               xstart,
               xend,
               ystart,
               yend,
               zs,
               ze,
               savfil=None,
               utwamaxscalefactor=1,
               vtwamaxscalefactor=1):

    fh = mfdset(fil)
    fh2 = mfdset(fil2)
    zi = rdp1.getdims(fh)[2][0]

    fhgeo = dset(geofil)

    (xs, xe), (ys, ye), dimutwa = rdp1.getlatlonindx(
        fh,
        wlon=xstart,
        elon=xend,
        slat=ystart,
        nlat=yend,
        zs=zs,
        ze=ze,
        xhxq='xq',
        yhyq='yh')
    em = fh.variables['e'][0:, zs:ze, ys:ye, xs:xe]
    elm = 0.5 * (em[:, 0:-1, :, :] + em[:, 1:, :, :])
    elm = np.ma.apply_over_axes(np.mean, elm, (0, 2))
    dycu = rdp1.getgeombyindx(fhgeo, xs, xe, ys, ye)[2][1]

    uh = fh.variables['uh'][0:, zs:ze, ys:ye, xs:xe]
    h_cu = fh2.variables['h_Cu'][0:, zs:ze, ys:ye, xs:xe]
    utwa = uh / h_cu / dycu

    fig = plt.figure()
    ax = fig.add_subplot(221)
    X = dimutwa[3]
    X = np.meshgrid(X, dimutwa[1])[0]
    Y = elm.squeeze()
    utwa = np.ma.apply_over_axes(np.nanmean, utwa, (0, 2))
    utwa = utwa.squeeze()
    cmax = np.nanmax(np.absolute(utwa)) * utwamaxscalefactor
    im = m6plot(
        (X, Y, utwa),
        ax=ax,
        ylabel='z (m)',
        txt=r'$\hat{u}$',
        vmin=-cmax,
        vmax=cmax,
        cmap='RdBu_r',
        ylim=(-3000, 0))
    ax.set_xticklabels([])

    (xs, xe), (ys, ye), dimvtwa = rdp1.getlatlonindx(
        fh,
        wlon=xstart,
        elon=xend,
        slat=ystart,
        nlat=yend,
        zs=zs,
        ze=ze,
        xhxq='xh',
        yhyq='yq')
    em = fh.variables['e'][0:, zs:ze, ys:ye, xs:xe]
    elm = 0.5 * (em[:, 0:-1, :, :] + em[:, 1:, :, :])
    elm = np.ma.apply_over_axes(np.mean, elm, (0, 2))
    dxcv = rdp1.getgeombyindx(fhgeo, xs, xe, ys, ye)[2][2]

    vh = fh.variables['vh'][0:, zs:ze, ys:ye, xs:xe]
    h_cv = fh2.variables['h_Cv'][0:, zs:ze, ys:ye, xs:xe]
    vtwa = vh / h_cv / dxcv

    ax = fig.add_subplot(222)
    X = dimvtwa[3]
    X = np.meshgrid(X, dimvtwa[1])[0]
    Y = elm.squeeze()
    vtwa = np.ma.apply_over_axes(np.nanmean, vtwa, (0, 2))
    vtwa = vtwa.squeeze()
    cmax = np.nanmax(np.absolute(vtwa)) * vtwamaxscalefactor
    im = m6plot(
        (X, Y, vtwa),
        ax=ax,
        txt=r'$\hat{v}$',
        vmin=-cmax,
        vmax=cmax,
        cmap='RdBu_r',
        ylim=(-3000, 0))
    ax.set_xticklabels([])
    ax.set_yticklabels([])

    fh2.close()
    fh.close()
    fhgeo.close()

    fh3 = mfdset(fil3)
    (xs, xe), (ys, ye), dimu = rdp1.getlatlonindx(
        fh3,
        wlon=xstart,
        elon=xend,
        slat=ystart,
        nlat=yend,
        zs=zs,
        ze=ze,
        xhxq='xq',
        yhyq='yh',
        zlzi='zlremap')
    u = fh3.variables['u'][0:, zs:ze, ys:ye, xs:xe]
    ax = fig.add_subplot(223)
    X = dimu[3]
    Y = dimu[1]
    u = np.ma.apply_over_axes(np.nanmean, u, (0, 2))
    u = u.squeeze()
    cmax = np.nanmax(np.absolute(u))
    im = m6plot(
        (X, -Y, u),
        ax=ax,
        txt='u',
        ylabel='z (m)',
        vmin=-cmax,
        vmax=cmax,
        cmap='RdBu_r')
    xdegtokm(ax, 0.5 * (ystart + yend))

    (xs, xe), (ys, ye), dimv = rdp1.getlatlonindx(
        fh3,
        wlon=xstart,
        elon=xend,
        slat=ystart,
        nlat=yend,
        zs=zs,
        ze=ze,
        xhxq='xh',
        yhyq='yq',
        zlzi='zlremap')
    v = fh3.variables['v'][0:, zs:ze, ys:ye, xs:xe]
    ax = fig.add_subplot(224)
    X = dimv[3]
    Y = dimv[1]
    v = np.ma.apply_over_axes(np.nanmean, v, (0, 2))
    v = v.squeeze()
    cmax = np.nanmax(np.absolute(v))
    im = m6plot(
        (X, -Y, v), ax=ax, txt='v', vmin=-cmax, vmax=cmax, cmap='RdBu_r')
    xdegtokm(ax, 0.5 * (ystart + yend))
    ax.set_yticklabels([])
    fh3.close()

    if savfil:
        plt.savefig(
            savfil + '.eps',
            dpi=300,
            facecolor='w',
            edgecolor='w',
            format='eps',
            transparent=False,
            bbox_inches='tight')
    else:
        plt.show()
def plot_uv(geofil,
            vgeofil,
            fil,
            fil2,
            xstart,
            xend,
            ystart,
            yend,
            zs,
            ze,
            meanax,
            minperc=[1, 1, 0],
            xyasindices=False):

    X, Y, P = getuv(geofil,
                    vgeofil,
                    fil,
                    fil2,
                    xstart,
                    xend,
                    ystart,
                    yend,
                    zs,
                    ze,
                    meanax,
                    xyasindices=False)

    P1 = P[3:]
    P = P[:3]

    fig, ax = plt.subplots(len(P), 1, sharex=True, sharey=True, figsize=(4, 6))
    ti = ['(a)', '(b)', '(c)', '(d)', '(e)', '(f)', '(g)', '(h)', '(i)', '(j)']
    lab = [r'$\widehat{u}$', r'$\widehat{v}$', r'$w^{\#}$']

    for i in range(len(P)):
        P[i] = np.ma.masked_array(P[i], mask=np.isnan(P[i]))
        P[i] = P[i].squeeze()
        cmax = np.nanpercentile(P[i], [minperc[i], 100 - minperc[i]])
        cmax = np.max(np.fabs(cmax))
        axc = ax.ravel()[i]
        im = m6plot((X[i], Y[i], P[i]),
                    axc,
                    vmax=cmax,
                    vmin=-cmax,
                    ptype='imshow',
                    txt=lab[i],
                    ylim=(-2500, 0),
                    cmap='RdBu_r',
                    cbar=False)
        cb = fig.colorbar(im, ax=axc)
        cb.formatter.set_powerlimits((0, 0))
        cb.update_ticks()
        if i == len(P) - 1:
            xdegtokm(axc, 0.5 * (ystart + yend))
        axc.set_ylabel('z (m)')

    fig1, ax = plt.subplots(len(P1),
                            1,
                            sharex=True,
                            sharey=True,
                            figsize=(4, 4))
    ti = ['(a)', '(b)', '(c)', '(d)', '(e)', '(f)', '(g)', '(h)', '(i)', '(j)']
    lab = [r'$\overline{u}$', r'$\overline{v}$', r'$w^{\#}$']
    for i in range(len(P1)):
        P1[i] = np.ma.masked_array(P1[i], mask=np.isnan(P[i]))
        P1[i] = P1[i].squeeze()
        cmax = np.nanpercentile(P1[i], [minperc[i], 100 - minperc[i]])
        cmax = np.max(np.fabs(cmax))
        axc = ax.ravel()[i]
        im = m6plot((X[i], Y[i], P1[i]),
                    axc,
                    vmax=cmax,
                    vmin=-cmax,
                    ptype='imshow',
                    txt=lab[i],
                    ylim=(-2500, 0),
                    cmap='RdBu_r',
                    cbar=False)
        cb = fig.colorbar(im, ax=axc)
        cb.formatter.set_powerlimits((0, 0))
        cb.update_ticks()
        if i == len(P1) - 1:
            xdegtokm(axc, 0.5 * (ystart + yend))
        axc.set_ylabel('z (m)')
    return fig, fig1
Esempio n. 9
0
def plot_twapv(geofil,
               vgeofil,
               fil,
               fil2,
               xstart,
               xend,
               ystart,
               yend,
               zs,
               ze,
               meanax,
               fil3=None,
               plotterms=[0, 1, 10, 11, 12, 13],
               swashperc=1,
               cmaxpercfactor=1,
               cmaxpercfactorpvhash=15,
               cmaxpercfactorPnew=15,
               savfil=None,
               savfilep=None,
               alreadysaved=False):
    X, Y, P, pvhash, Pnew, swash = extract_twapv_terms(
        geofil,
        vgeofil,
        fil,
        fil2,
        xstart,
        xend,
        ystart,
        yend,
        zs,
        ze,
        meanax,
        alreadysaved=alreadysaved,
        fil3=fil3)
    cmax = np.nanpercentile(P, [cmaxpercfactor, 100 - cmaxpercfactor])
    cmax = np.max(np.fabs(cmax))
    fig, ax = plt.subplots(np.int8(np.ceil(P.shape[-1] / 2)),
                           2,
                           sharex=True,
                           sharey=True,
                           figsize=(12, 9))
    ti = [
        '(a)', '(b)', '(c)', '(d)', '(e)', '(f)', '(g)', '(h)', '(i)', '(j)',
        '(k)', '(l)', '(m)', '(n)', '(o)', '(p)', '(q)', '(r)'
    ]
    labx = [
        r'$(\hat{u}\hat{u}_{\tilde{x}})_{\tilde{y}}$',
        r'$(\hat{v}\hat{u}_{\tilde{y}})_{\tilde{y}}$',
        r'$(\hat{\varpi}\hat{u}_{\tilde{b}})_{\tilde{y}}$',
        r'$(-f\hat{v})_{\tilde{y}}$',
        r'$(\overline{m_{\tilde{x}}})_{\tilde{y}}$',
        r"""$(\frac{1}{\overline{h}}(\overline{h}\widehat{u^{\prime \prime}u^{\prime \prime}}+\frac{1}{2}\overline{\zeta^{\prime 2}})_{\tilde{x}})_{\tilde{y}}$""",
        r"""$(\frac{1}{\overline{h}}(\overline{h}\widehat{u^{\prime \prime}v^{\prime \prime}})_{\tilde{y}}$""",
        r"""$(\frac{1}{\overline{h}}(\overline{h}\widehat{u^{\prime \prime}\varpi^{\prime \prime}} + \overline{\zeta^{\prime}m_{\tilde{x}}^{\prime}})_{\tilde{b}})_{\tilde{y}}$""",
        r'$(-\widehat{X^H})_{\tilde{y}}$', r'$(-\widehat{X^V})_{\tilde{y}}$'
    ]
    laby = [
        r'$(-\hat{u}\hat{v}_{\tilde{x}})_{\tilde{x}}$',
        r'$(-\hat{v}\hat{v}_{\tilde{y}})_{\tilde{x}}$',
        r'$(-\hat{\varpi}\hat{v}_{\tilde{b}})_{\tilde{x}}$',
        r'$(-f\hat{u})_{\tilde{x}}$',
        r'$(-\overline{m_{\tilde{y}}})_{\tilde{x}}$',
        r"""$(-\frac{1}{\overline{h}}(\overline{h}\widehat{u^{\prime \prime}v^{\prime \prime}})_{\tilde{x}})_{\tilde{x}}$""",
        r"""$(-\frac{1}{\overline{h}}(\overline{h}\widehat{v^{\prime \prime}v^{\prime \prime}}+\frac{1}{2}\overline{\zeta^{\prime 2}})_{\tilde{y}})_{\tilde{x}}$""",
        r"""$(-\frac{1}{\overline{h}}(\overline{h}\widehat{v^{\prime \prime}\varpi^{\prime \prime}} + \overline{\zeta^{\prime}m_{\tilde{y}}^{\prime}})_{\tilde{b}})_{\tilde{x}}$""",
        r'$(\widehat{Y^H})_{\tilde{x}}$', r'$(\widehat{Y^V})_{\tilde{x}}$'
    ]
    for i in range(P.shape[-1]):
        axc = ax.ravel()[i]
        im = m6plot((X, Y, P[:, :, i]),
                    axc,
                    vmax=cmax,
                    vmin=-cmax,
                    ptype='imshow',
                    txt=labx[i] + ' + ' + laby[i],
                    ylim=(-2500, 0),
                    cmap='RdBu_r',
                    cbar=False)
        if fil3:
            cs = axc.contour(X, Y, swash, np.array([swashperc]), colors='k')

        if i % 2 == 0:
            axc.set_ylabel('z (m)')
        if i > np.size(ax) - 3:
            xdegtokm(axc, 0.5 * (ystart + yend))

    fig.tight_layout()
    cb = fig.colorbar(im, ax=ax.ravel().tolist())
    cb.formatter.set_powerlimits((0, 0))
    cb.update_ticks()
    if savfil:
        plt.savefig(savfil + '.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()

    im = m6plot((X, Y, np.sum(P, axis=2)),
                vmax=cmax,
                vmin=-cmax,
                ptype='imshow',
                cmap='RdBu_r',
                ylim=(-2500, 0))
    if savfil:
        plt.savefig(savfil + 'res.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()

    fig, ax = plt.subplots(np.int8(np.ceil(len(plotterms) / 2)),
                           2,
                           sharex=True,
                           sharey=True,
                           figsize=(12, 7))

    cmaxpvhash = np.nanpercentile(
        pvhash, [cmaxpercfactorpvhash, 100 - cmaxpercfactorpvhash])
    cmaxpvhash = np.max(np.fabs(cmaxpvhash))

    cmax = np.nanpercentile(Pnew,
                            [cmaxpercfactorPnew, 100 - cmaxpercfactorPnew])
    cmax = np.max(np.fabs(cmax))

    lab = [
        r"$-\hat{u}\Pi^{\#}_{\tilde{x}}$",
        r"$-\hat{v}\Pi^{\#}_{\tilde{y}}$",
        r"$\Pi^{\#}(\bar{h} \hat{\varpi})_{\tilde{b}}$",
        r"$\frac{(\hat{\varpi}\hat{u}_{\tilde{b}})_{\tilde{y}}}{\bar{h}}$",
        r"""$\frac{1}{\bar{h}}(\frac{1}{\bar{h}}(\bar{h}\widehat{u^{\prime \prime}u^{\prime \prime}}+\frac{1}{2}\overline{\zeta^{\prime 2}})_{\tilde{x}})_{\tilde{y}}$""",
        r"""$\frac{1}{\bar{h}}(\frac{1}{\bar{h}}(\bar{h}\widehat{u^{\prime \prime}v^{\prime \prime}})_{\tilde{y}})_{\tilde{y}}$""",
        r"""$\frac{1}{\bar{h}}(\frac{1}{\bar{h}}(\bar{h}\widehat{u^{\prime \prime}\varpi^{\prime \prime}} + \overline{\zeta^{\prime}m_{\tilde{x}}^{\prime}})_{\tilde{b}})_{\tilde{y}}$""",
        r'$-\frac{1}{\bar{h}}(\widehat{X^H})_{\tilde{y}}$',
        r'$-\frac{1}{\bar{h}}(\widehat{X^V})_{\tilde{y}}$',
        r'$-\frac{(\hat{\varpi}\hat{v}_{\tilde{b}})_{\tilde{x}}}{\bar{h}}$',
        r"""$-\frac{1}{\bar{h}}(\frac{1}{\bar{h}}(\bar{h}\widehat{u^{\prime \prime}v^{\prime \prime}})_{\tilde{x}})_{\tilde{x}}$""",
        #r"""$-\frac{1}{\bar{h}}(\frac{1}{\bar{h}}(\bar{h}\widehat{v^{\prime \prime}v^{\prime \prime}}+\frac{1}{2}\overline{\zeta^{\prime 2}})_{\tilde{y}})_{\tilde{x}}$""",
        r"""$-\frac{1}{\bar{h}}(\frac{1}{\bar{h}}(\bar{h}\widehat{v^{\prime \prime}v^{\prime \prime}})_{\tilde{y}})_{\tilde{x}}$""",
        #r"""$-\frac{1}{\bar{h}}(\frac{1}{\bar{h}}(\bar{h}\widehat{v^{\prime \prime}\varpi^{\prime \prime}} + \overline{\zeta^{\prime}m_{\tilde{y}}^{\prime}})_{\tilde{b}})_{\tilde{x}}$""",
        r"""$-\frac{1}{\bar{h}}(\frac{1}{\bar{h}}(\overline{\zeta^{\prime}m_{\tilde{y}}^{\prime}})_{\tilde{b}})_{\tilde{x}}$""",
        r'$\frac{1}{\bar{h}}(\widehat{Y^H})_{\tilde{x}}$',
        r'$\frac{1}{\bar{h}}(\widehat{Y^V})_{\tilde{x}}$',
        r'$B_{\tilde{x} \tilde{y}} - B_{\tilde{y} \tilde{x}}$'
    ]

    matplotlib.rcParams['contour.negative_linestyle'] = 'solid'
    for i, p in enumerate(plotterms):
        axc = ax.ravel()[i]
        im = m6plot((X, Y, Pnew[:, :, p]),
                    axc,
                    vmax=cmax,
                    vmin=-cmax,
                    ptype='imshow',
                    ylim=(-1200, 0),
                    txt=lab[p],
                    cmap='RdBu_r',
                    cbar=False)
        im2 = axc.contour(X, Y, pvhash, np.logspace(-6, -5.5, 5), colors='k')
        if fil3:
            cs = axc.contour(X, Y, swash, np.array([swashperc]), colors='k')
        if i % 2 == 0:
            axc.set_ylabel('z (m)')
        if i > np.size(ax) - 3:
            xdegtokm(axc, 0.5 * (ystart + yend))

    fig.tight_layout()
    cb = fig.colorbar(im, ax=ax.ravel().tolist())
    cb.formatter.set_powerlimits((0, 0))
    cb.update_ticks()
    if savfil:
        plt.savefig(savfil + 'Pnew.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()
    im = m6plot((X, Y, np.sum(Pnew, axis=2)),
                ptype='imshow',
                vmax=cmax,
                vmin=-cmax,
                cmap='RdBu_r',
                ylim=(-2500, 0))
    if savfil:
        plt.savefig(savfil + 'Pnewres.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()

    cmax = np.nanpercentile(pvhash,
                            [cmaxpercfactorpvhash, 100 - cmaxpercfactorpvhash])
    cmax = np.max(np.fabs(cmax))
    im = m6plot((X, Y, pvhash),
                ptype='imshow',
                vmax=cmax,
                vmin=-cmax,
                cmap='RdBu_r',
                ylim=(-2500, 0))
    if fil3:
        cs = axc.contour(X, Y, swash, np.array([swashperc]), colors='k')
    if savfil:
        plt.savefig(savfil + 'pvhash.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()
Esempio n. 10
0
def plot_buoy_budget(geofil,
                     vgeofil,
                     fil,
                     fil2,
                     xstart,
                     xend,
                     ystart,
                     yend,
                     zs,
                     ze,
                     meanax,
                     minperc=0,
                     savfil=None,
                     z=np.linspace(-3000, 0, 100),
                     htol=1e-3,
                     fil3=None):

    dims, P = extract_buoy_terms(geofil,
                                 vgeofil,
                                 fil,
                                 fil2,
                                 xstart,
                                 xend,
                                 ystart,
                                 yend,
                                 zs,
                                 ze,
                                 z=z,
                                 htol=htol,
                                 fil3=fil3)

    keepax = ()
    for i in range(4):
        if i not in meanax:
            keepax += (i, )

    fig, ax = plt.subplots(int(np.ceil(P.shape[4] / 2)),
                           2,
                           sharex=True,
                           sharey=True,
                           figsize=(6, 4))
    ti = ['(a)', '(b)', '(c)', '(d)', '(e)', '(f)', '(g)', '(h)', '(i)', '(j)']
    lab = [
        r'$\widehat{u}b^{\#}_{x}$', r'$\widehat{v}b^{\#}_{y}$',
        r'$w^{\#}b^{\#}_{z}$', r'$\widehat{\varpi}$'
    ]

    cmax = np.nanpercentile(P.ravel(), [minperc, 100 - minperc])
    cmax = np.max(np.fabs(cmax))
    P = np.ma.masked_array(P, mask=np.isnan(P))
    P = np.apply_over_axes(np.nanmean, P, meanax).squeeze()
    X = dims[keepax[1]]
    Y = dims[keepax[0]]
    if 1 in keepax:
        Y = z
    for i in range(ax.size):
        axc = ax.ravel()[i]
        im = m6plot((X, Y, P[:, :, i]),
                    axc,
                    vmax=cmax,
                    vmin=-cmax,
                    ptype='imshow',
                    txt=lab[i],
                    cmap='RdBu_r',
                    cbar=False)

        if i % 2 == 0:
            axc.set_ylabel('z (m)')
        if i >= np.size(ax) - 2:
            xdegtokm(axc, 0.5 * (ystart + yend))

    fig.tight_layout()
    cb = fig.colorbar(im, ax=ax.ravel().tolist())
    cb.formatter.set_powerlimits((0, 0))
    cb.update_ticks()

    if savfil:
        plt.savefig(savfil + '.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()

    im = m6plot((X, Y, np.sum(P, axis=2)),
                vmax=cmax,
                vmin=-cmax,
                ptype='imshow',
                cmap='RdBu_r',
                ylim=(-2500, 0))
    if savfil:
        plt.savefig(savfil + 'res.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()
Esempio n. 11
0
def extract_twapv(geofil,
                  vgeofil,
                  fil,
                  fil2,
                  xstart,
                  xend,
                  ystart,
                  yend,
                  zs,
                  ze,
                  meanax,
                  savfil=None,
                  cmaxscalefactor=None,
                  plotatz=False,
                  Z=None):

    keepax = ()
    for i in range(4):
        if i not in meanax:
            keepax += (i, )

    fhgeo = dset(geofil)
    fh = mfdset(fil)
    fh2 = mfdset(fil2)
    zi = rdp1.getdims(fh)[2][0]
    dbl = np.diff(zi) * 9.8 / 1031
    (xs, xe), (ys, ye), dimq = rdp1.getlatlonindx(fh,
                                                  wlon=xstart,
                                                  elon=xend,
                                                  slat=ystart,
                                                  nlat=yend,
                                                  zs=zs,
                                                  ze=ze,
                                                  xhxq='xq',
                                                  yhyq='yq')
    dxbu = rdp1.getgeombyindx(fhgeo, xs, xe, ys, ye)[2][4]
    dybu = rdp1.getgeombyindx(fhgeo, xs, xe, ys, ye)[2][5]
    dycu = rdp1.getgeombyindx(fhgeo, xs, xe, ys, ye + 1)[2][1]
    dxcv = rdp1.getgeombyindx(fhgeo, xs, xe, ys, ye)[2][2]
    f = rdp1.getgeombyindx(fhgeo, xs, xe, ys, ye)[-1]
    nt_const = dimq[0].size
    fhgeo.close()

    em = fh.variables['e'][0:, zs:ze, ys:ye, xs:xe]
    elm = 0.5 * (em[:, 0:-1, :, :] + em[:, 1:, :, :])

    uh = fh.variables['uh'][0:, zs:ze, ys:ye + 1, xs:xe]

    h_cu = fh2.variables['h_Cu'][0:, zs:ze, ys:ye + 1, xs:xe]
    utwa = uh / h_cu / dycu
    h_cu = np.where(h_cu > 1e-3, h_cu, np.nan)

    vh = fh.variables['vh'][0:, zs:ze, ys:ye, xs:xe]

    h_cv = fh2.variables['h_Cv'][0:, zs:ze, ys:ye, xs:xe]
    vtwa = vh / h_cv / dxcv
    vtwa = np.concatenate((vtwa, -vtwa[:, :, :, -1:]), axis=3)
    h_cv = np.concatenate((h_cv, -h_cv[:, :, :, -1:]), axis=3)
    h_cv = np.where(h_cv > 1e-3, h_cv, np.nan)

    fh2.close()
    fh.close()

    hq = 0.25 * (h_cu[:, :, :-1, :] + h_cv[:, :, :, :-1] + h_cu[:, :, 1:, :] +
                 h_cv[:, :, :, 1:])

    pv = f - np.diff(utwa, axis=2) / dybu + np.diff(vtwa, axis=3) / dxbu
    pv = pv / (hq / dbl[:, np.newaxis, np.newaxis])

    X = dimq[keepax[1]]
    Y = dimq[keepax[0]]
    if 1 in keepax:
        em = np.ma.apply_over_axes(np.mean, em, meanax)
        elm = np.ma.apply_over_axes(np.mean, elm, meanax)
        Y = elm.squeeze()
        X = np.meshgrid(X, dimq[1])[0]

    if plotatz:
        pv = getvaratz(pv, Z, em)

    pv = np.ma.apply_over_axes(np.nanmean, pv, meanax)
    pv = pv.squeeze()
    cmax = np.nanmax(np.absolute(pv)) * cmaxscalefactor
    im = m6plot((X, Y, pv),
                xlabel=r'x ($^{\circ}$ E)',
                ylabel=r'y ($^{\circ}$ N)',
                vmin=6e-10,
                vmax=cmax,
                aspect='equal',
                bvnorm=True)

    if savfil:
        plt.savefig(savfil + '.eps',
                    dpi=300,
                    facecolor='w',
                    edgecolor='w',
                    format='eps',
                    transparent=False,
                    bbox_inches='tight')
    else:
        plt.show()