def plot_wf_spectrum_vort(initializer, perc=99):

    domain = Domain.Domain(initializer)

    with mfdset(initializer.fil) as fh:
        e = gv('e', domain, 'hi', fh, plot_loc='qi').xsm().ysm().read_array(
            tmean=False,
            extend_kwargs=dict(method='mirror')).move_to('ui').move_to('qi')
        uy = gv('u', domain, 'ul', fh,
                plot_loc='ql').yep().read_array(
                    tmean=False,
                    filled=0,
                    extend_kwargs=dict(method='vorticity')).ddx(2)
        vx = gv('v', domain, 'vl', fh,
                plot_loc='ql').xep().read_array(
                    tmean=False,
                    filled=0,
                    extend_kwargs=dict(method='vorticity')).ddx(3)
        vort = (vx - uy).toz([-1], e=e)
        vort.name = ''
        fig, ax = plt.subplots(1, 2)
        vort.plot('nanmean',
                  initializer.meanax,
                  perc=98,
                  contour=False,
                  cbar=True,
                  plot_kwargs=dict(cmap='RdBu_r'),
                  ax=ax[0])

        initializer.ls = 0
        initializer.le = None
        domain1 = Domain.Domain(initializer)
        h = gv('e', domain1, 'hi', fh).read_array().o1diff(1).values
        omega = 2 * np.pi * (1 / 24 / 3600 + 1 / 365 / 24 / 3600)
        lr = np.sum(
            np.sqrt(h * domain.db) / np.pi /
            (2 * omega *
             np.sin(np.radians(0.5 * (initializer.slat + initializer.nlat)))),
            axis=1,
            keepdims=True)
        lr = np.mean(lr, axis=(0, 1, 2, 3)).squeeze()

        sig = vort.mean(axis=2).values.squeeze()
        fx, fx1, ft, Rsq = cross_spectrum(sig, 5 * 24 * 3600, 4000)

        vmax = np.percentile(Rsq, 99.9)
        im = ax[1].pcolormesh(fx1, ft, Rsq, cmap='Reds', vmin=0, vmax=vmax)
        fig.colorbar(im, ax=ax[1])
        beta = 2 * omega * np.cos(
            np.radians(0.5 *
                       (initializer.slat + initializer.nlat))) / domain.R_earth
        w = -beta * fx / (fx**2 + lr**-2)
        ax[1].plot(-fx, -w, 'k')
    return fig, ax
def plot_wf_spectrum(initializer, perc=99):

    domain = Domain.Domain(initializer)

    with mfdset(initializer.fil) as fh:
        e = gv('e', domain, 'hi', fh).read_array(tmean='anom')
        fig, ax = plt.subplots(1, 2)
        e.plot('nanmean',
               initializer.meanax,
               ax=ax[0],
               cbar=True,
               contour=False,
               plot_kwargs=dict(cmap='RdBu_r'))

        initializer.ls = 0
        initializer.le = None
        domain1 = Domain.Domain(initializer)
        h = gv('e', domain1, 'hi', fh).read_array().o1diff(1).values
        omega = 2 * np.pi * (1 / 24 / 3600 + 1 / 365 / 24 / 3600)
        lr = np.sum(
            np.sqrt(h * domain.db) / np.pi /
            (2 * omega *
             np.sin(np.radians(0.5 * (initializer.slat + initializer.nlat)))),
            axis=1,
            keepdims=True)
        lr = np.mean(lr, axis=(0, 1, 2, 3)).squeeze()

        sig = e.mean(axis=2).values.squeeze()
        fx, fx1, ft, Rsq = cross_spectrum(sig, 5 * 24 * 3600, 4000)

        vmax = np.percentile(Rsq, 99.9)
        im = ax[1].pcolormesh(fx1, ft, Rsq, cmap='Reds', vmin=0, vmax=vmax)
        fig.colorbar(im, ax=ax[1])
        beta = 2 * omega * np.cos(
            np.radians(0.5 *
                       (initializer.slat + initializer.nlat))) / domain.R_earth
        w = -beta * fx / (fx**2 + lr**-2)
        ax[1].plot(-fx, -w, 'k')
    return fig, ax
Пример #3
0
def extract_cb_terms_pym6(initializer):

    domain = Domain.Domain(initializer)

    with mfdset(initializer.fil) as fh, mfdset(initializer.fil2) as fh2:

        vhy = gv('vh',domain,'vl',fh2,fh,plot_loc='hl').ysm().read_array(filled=0).ddx(2,div_by_area=True)
        uhx = gv('uh',domain,'ul',fh2,fh,plot_loc='hl').xsm().read_array(filled=0).ddx(3,div_by_area=True)
        wd = gv('wd',domain,'hi',fh2).read_array().o1diff(1)
#    budgetlist = [-uhx*(1/domain.dyT[uhx._slice[2:]]),-vhy*(1/domain.dxT[vhy._slice[2:]]),-wd]
    budgetlist = [-uhx,-vhy,-wd]
    lab = [ r'$-(\bar{h}\hat{u})_{\tilde{x}}$',
            r'$-(\bar{h}\hat{v})_{\tilde{y}}$',
            r'$-(\bar{h}\hat{\varpi})_{\tilde{b}}$']
    for i,var in enumerate(budgetlist):
        var.name = lab[i]
    return budgetlist
Пример #4
0
def plot_sst_vort(geofil,
                  vgeofil,
                  fil,
                  fil2,
                  xstart,
                  xend,
                  ystart,
                  yend,
                  ls,
                  le,
                  fil3=None,
                  z=np.linspace(-10, -9, 4),
                  htol=1e-3,
                  whichterms=None):

    domain = Domain.Domain2(geofil,
                            vgeofil,
                            xstart,
                            xend,
                            ystart,
                            yend,
                            ls=ls,
                            le=le,
                            ts=450,
                            te=451)

    with mfdset(fil2) as fh2:
        rho = gv('e', domain, 'hi', fh2).read_array(tmean=False).toz(z[0],
                                                                     rho=True)
        T = (-rho + 1031) * (1 / 0.2)
        T.name = ''
        fig, ax = plt.subplots(1, 2, sharex=True, sharey=True)
        T.plot('nanmean', (0, 1),
               contour=False,
               cbar=True,
               plot_kwargs=dict(cmap='RdYlBu_r', vmax=20, vmin=10),
               ax=ax[0])

        rho = gv('e', domain, 'hi', fh2).read_array(tmean=False).toz(z[1],
                                                                     rho=True)
        T = (-rho + 1031) * (1 / 0.2)
        T.name = ''
        T.plot('nanmean', (0, 1),
               contour=False,
               cbar=True,
               plot_kwargs=dict(cmap='RdYlBu_r', vmax=10, vmin=6),
               ax=ax[1])

#        e = gv('e',domain,'hi',fh2,plot_loc='qi').xsm().ysm().read_array(tmean=False,
#                extend_kwargs=dict(method='mirror')).move_to('ui').move_to('qi')
#        uy = gv('u',domain,'ul',fh2,plot_loc='ql').yep().read_array(tmean=False,
#                extend_kwargs=dict(method='vorticity')).ddx(2)
#        vx = gv('v',domain,'vl',fh2,plot_loc='ql').xep().read_array(tmean=False,
#                extend_kwargs=dict(method='vorticity')).ddx(3)
#        vort = (vx - uy)
#        vort.name = ''
#        vort.plot('nanmean',(0,1),perc=98,contour=False,cbar=True,plot_kwargs=dict(cmap='RdBu_r'),ax=ax[1])
#        ax[1].set_ylabel('')
#
#        vortz = vort.toz([-1],e=e)
#        vortz.name = ''
#        vortz.plot('nanmean',(0,1),perc=98,contour=False,cbar=True,plot_kwargs=dict(cmap='RdBu_r'),ax=ax[2])

#        vmax = np.nanpercentile(np.fabs(vortz.values),98)
#        xx,yy = np.meshgrid(vortz.dom.lonq[vortz._plot_slice[3,0]:vortz._plot_slice[3,1]],
#                vortz.dom.latq[vortz._plot_slice[2,0]:vortz._plot_slice[2,1]])
#        print(xx.shape, yy.shape, vortz.values[0,0,:,:].shape)
#        im = ax[2].pcolormesh(xx,yy,
#                vortz.values[0,0,:,:],cmap='RdBu_r',vmin=-vmax,vmax=vmax)
#        print(e.values.shape)
#        im = ax[2].pcolormesh(e.dom.lonq[e._plot_slice[3,0]:e._plot_slice[3,1]],
#                e.dom.latq[e._plot_slice[2,0]:e._plot_slice[2,1]],
#                e.values[0,0,:,:],cmap='RdBu_r')
#        cbar = fig.colorbar(im,ax=ax[2])
#        cbar.formatter.set_powerlimits((-2,2))
#        cbar.update_ticks()
#        ax[2].set_ylabel('')

    domain = Domain.Domain2(geofil,
                            vgeofil,
                            xstart,
                            xend,
                            ystart,
                            yend,
                            ls=0,
                            le=1)
    with mfdset(fil) as fh:
        e = gv('e', domain, 'hi', fh).read_array()
        cs = ax[0].contour(e.dom.lonh[e._plot_slice[3, 0]:e._plot_slice[3, 1]],
                           e.dom.lath[e._plot_slice[2, 0]:e._plot_slice[2, 1]],
                           e.values.squeeze(),
                           levels=[-0.4, -0.3, -0.15, 0, 0.15, 0.3, 0.4],
                           colors='k')
        cs.clabel(inline=True)
    return fig
Пример #5
0
def plot_twamomy_pym6(initializer, **kwargs):
    budgetlist = extract_twamomy_terms_pym6(initializer)
    terms = kwargs.get('terms', None)
    if terms:
        budgetlist = [budgetlist[i] for i in terms]
    with mfdset(initializer.fil) as fh, mfdset(initializer.fil2) as fh2:
        e = (gv('e', budgetlist[0].dom, 'hi', fh2, fh,
                plot_loc='vl').yep().read_array(extend_kwargs={
                    'method': 'mirror'
                }).move_to('vi'))
    plot_kwargs = dict(cmap='RdBu_r')
    plotter_kwargs = dict(xtokm=True,
                          zcoord=True,
                          z=initializer.z,
                          e=e,
                          isop_mean=True)

    ax, fig = Plotter.budget_plot(budgetlist,
                                  initializer.meanax,
                                  plot_kwargs=plot_kwargs,
                                  plotter_kwargs=plotter_kwargs,
                                  individual_cbars=False,
                                  **kwargs)

    swash = kwargs.get('swash', True)
    plotter_kwargs.pop('ax')
    if swash:

        initializer_for_swash = Domain.Initializer(geofil=initializer.geofil,
                                                   vgeofil=initializer.vgeofil,
                                                   wlon=-0.5,
                                                   elon=0,
                                                   slat=10,
                                                   nlat=11)
        domain_for_swash0 = Domain.Domain(initializer_for_swash)
        with mfdset(initializer.fil3) as fh:
            islayerdeep = (gv('islayerdeep',
                              budgetlist[0].dom,
                              'ql',
                              fh,
                              plot_loc='vl').xsm().read_array(tmean=False,
                                                              extend_kwargs={
                                                                  'method':
                                                                  'mirror'
                                                              }).move_to('vl'))
            islayerdeep0 = (gv('islayerdeep',
                               domain_for_swash0,
                               'ql',
                               fh,
                               plot_loc='vl').xsm().read_array(
                                   tmean=False,
                                   extend_kwargs={
                                       'method': 'mirror'
                                   }).move_to('vl'))
            swashperc = (-islayerdeep / islayerdeep0.values[-1, 0, 0, 0] +
                         1) * 100
        plot_kwargs = kwargs.get('swash_plot_kwargs',
                                 dict(colors='grey', linewidths=4))
        for axc in ax.ravel():
            axc, _ = swashperc.plot('nanmean',
                                    initializer.meanax,
                                    only_contour=True,
                                    clevs=np.array([1]),
                                    annotate='None',
                                    ax=axc,
                                    plot_kwargs=plot_kwargs,
                                    **plotter_kwargs)

    return ax, fig
Пример #6
0
def extract_twamomy_terms_pym6(initializer):

    domain = Domain.Domain(initializer)

    plot_loc = 'vl'
    with mfdset(initializer.fil) as fh, mfdset(initializer.fil2) as fh2:

        h = (gv('h_Cv', domain, plot_loc, fh2, fh,
                plot_loc=plot_loc).read_array(filled=0))
        vr = (gv('vh',
                 domain,
                 plot_loc,
                 fh2,
                 fh,
                 plot_loc=plot_loc,
                 divisor='h_Cv').read_array(divide_by_dx=True, filled=0))
        vrx = (gv('vh',
                  domain,
                  plot_loc,
                  fh2,
                  fh,
                  plot_loc=plot_loc,
                  divisor='h_Cv').xsm().xep().read_array(
                      extend_kwargs={
                          'method': 'vorticity'
                      },
                      divide_by_dx=True,
                      filled=0).ddx(3).move_to(plot_loc))
        vry = (gv('vh',
                  domain,
                  plot_loc,
                  fh2,
                  fh,
                  plot_loc=plot_loc,
                  divisor='h_Cv').ysm().yep().read_array(
                      extend_kwargs={
                          'method': 'symmetric'
                      },
                      divide_by_dx=True,
                      filled=0).ddx(2).move_to(plot_loc))
        humx = (gv('uh', domain, 'ul', fh2, fh,
                   plot_loc=plot_loc).xsm().yep().read_array(
                       extend_kwargs={
                           'method': 'vorticity'
                       }, filled=0).ddx(3, div_by_area=True).move_to(plot_loc))
        hum = (gv('uh', domain, 'ul', fh2, fh,
                  plot_loc=plot_loc).xsm().yep().read_array(
                      divide_by_dy=True,
                      filled=0,
                      extend_kwargs={
                          'method': 'vorticity'
                      }).move_to('hl').move_to(plot_loc))
        hvmy = (gv('vh', domain, plot_loc, fh2, fh,
                   plot_loc=plot_loc).ysm().yep().read_array(
                       filled=0, extend_kwargs={
                           'method': 'symmetric'
                       }).ddx(2, div_by_area=True).move_to(plot_loc))
        huvxphvvym = (
            (gv('twa_huvxpt', domain, plot_loc, fh2, fh,
                plot_loc=plot_loc).read_array(filled=0)) +
            (gv('twa_hvvymt', domain, plot_loc, fh2, fh,
                plot_loc=plot_loc).read_array(filled=0)))
        hvvym = (gv('hvv_Cv', domain, plot_loc, fh2, fh,
                    plot_loc=plot_loc).ysm().yep().read_array(
                        extend_kwargs={
                            'method': 'symmetric'
                        }, filled=0).ddx(2,
                                         div_by_area=True).move_to(plot_loc))
        huvxm = -(huvxphvvym + hvvym)
        vrb = (gv('vh',
                  domain,
                  plot_loc,
                  fh2,
                  fh,
                  plot_loc=plot_loc,
                  divisor='h_Cv').lsm().lep().read_array(
                      extend_kwargs={
                          'method': 'mirror'
                      },
                      divide_by_dx=True,
                      filled=0).ddx(1).move_to(plot_loc))
        hwb = (gv('wd', domain, 'hi', fh2, fh,
                  plot_loc=plot_loc).yep().read_array(
                      filled=0, extend_kwargs={
                          'method': 'vorticity'
                      }).o1diff(1).move_to(plot_loc))
        hwm = (gv('wd', domain, 'hi', fh2, fh,
                  plot_loc=plot_loc).yep().read_array(
                      filled=0, extend_kwargs={
                          'method': 'vorticity'
                      }).move_to('hl').move_to(plot_loc)) * domain.db
        esq = (gv('esq', domain, 'hl', fh2, fh,
                  plot_loc=plot_loc).yep().read_array(
                      extend_kwargs={'method': 'mirror'}))
        e = (gv('e', domain, 'hi', fh2, fh,
                plot_loc=plot_loc).yep().read_array(extend_kwargs={
                    'method': 'mirror'
                }).move_to('hl'))
        edlsqm = esq - e * e
        edlsqmy = edlsqm.ddx(2)
        hpfv = (gv('twa_hpfv', domain, plot_loc, fh2, fh,
                   plot_loc=plot_loc).read_array(filled=0))
        pfvm = (gv('PFv', domain, plot_loc, fh2, fh,
                   plot_loc=plot_loc).read_array(filled=0))
        edpfvdmb = -hpfv + h * pfvm - edlsqmy * domain.db * 0.5
        hmfum = (gv('twa_hmfu', domain, plot_loc, fh2, fh,
                    plot_loc=plot_loc).read_array(filled=0))
        hvwbm = (gv('twa_hvwb', domain, plot_loc, fh2, fh,
                    plot_loc=plot_loc).read_array(filled=0))
        hdiffvm = (gv('twa_hdiffv',
                      domain,
                      plot_loc,
                      fh2,
                      fh,
                      plot_loc=plot_loc).read_array(filled=0))
        hdvdtviscm = (gv('twa_hdvdtvisc',
                         domain,
                         plot_loc,
                         fh2,
                         fh,
                         plot_loc=plot_loc).read_array(filled=0))

        advx = hum * vrx / h
        advy = vr * vry
        advb = hwm * vrb / h
        cor = hmfum / h
        pfvm = pfvm

        xdivep1 = -huvxm / h
        xdivep2 = advx
        xdivep3 = vr * humx / h
        xdivep = (xdivep1 + xdivep2 + xdivep3)

        ydivep1 = -hvvym / h
        ydivep2 = advy
        ydivep3 = vr * hvmy / h
        ydivep4 = -edlsqmy / 2 * domain.db / h
        ydivep = (ydivep1 + ydivep2 + ydivep3 + ydivep4)

        bdivep1 = hvwbm / h
        bdivep2 = advb
        bdivep3 = vr * hwb / h
        bdivep4 = -edpfvdmb / h
        bdivep = (bdivep1 + bdivep2 + bdivep3 + bdivep4)
        Y1twa = hdiffvm / h
        Y2twa = hdvdtviscm / h

    budgetlist = [
        -advx, -advy, -advb, cor, pfvm, xdivep, ydivep1 + ydivep2 + ydivep3,
        ydivep4, bdivep1 + bdivep2 + bdivep3, bdivep4, Y1twa, Y2twa
    ]
    ti = [
        '(a)', '(b)', '(c)', '(d)', '(e)', '(f)', '(g)', '(h)', '(i)', '(j)',
        '(k)', '(l)'
    ]
    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}})_{\tilde{y}}$""",
        r"""$-\frac{1}{2\overline{\zeta_{\tilde{b}}}}(\overline{\zeta^{\prime 2}})_{\tilde{y}}$""",
        r"""$-\frac{1}{\overline{h}}(\overline{h}\widehat{v^{\prime \prime}\varpi ^{\prime \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, var in enumerate(budgetlist):
        var.name = lab[i]

    return budgetlist
Пример #7
0
def plot_forcing(fil, fil2=None):
    y = np.linspace(10, 60, 100)
    sflat = 20
    nflat = 40

    T = np.zeros(y.shape)
    Tnorth = 10
    Tsouth = 20
    T[y >= sflat] = (Tsouth - Tnorth) / (sflat - nflat) * (y[y >= sflat] -
                                                           nflat) + Tnorth
    T[y < sflat] = Tsouth
    T[y > nflat] = Tnorth

    rho0 = 1031
    drhodt = -0.2
    rho = rho0 + drhodt * T

    gs = gridspec.GridSpec(2, 3, width_ratios=[1, 4, 1], height_ratios=[1, 4])
    fig = plt.figure(figsize=(9, 4))
    #ax = fig.add_subplot(121)
    ax = plt.subplot(gs[1])
    ax.plot(y, T, 'k', lw=1)
    #    ax.set_ylabel('T ($^{\circ}$C)')
    ax.set_xlabel('y ($^{\circ}$N)')
    ax.set_ylim(8, 22)
    ax.grid(True)
    ax.xaxis.tick_top()
    ax.xaxis.set_label_position("top")

    ax2 = ax.twinx()
    ax2.set_ylabel(r"""$\rho (kgm^{-3})$""")
    ax2.set_ylim(ax.get_ylim())
    yticks = ax.get_yticks()
    ax2.set_yticks(yticks[::2])
    yticks = rho0 + drhodt * yticks[::2]
    ax2.set_yticklabels(['{}'.format(i) for i in yticks])

    z = np.linspace(0, 3000)
    dabyss = 1500
    Tabyss = 5
    Tz = (Tabyss - Tsouth) / dabyss * z + Tsouth
    Tz[z > dabyss] = Tabyss

    #ax = fig.add_subplot(122)
    ax = plt.subplot(gs[3])
    ax.plot(Tz, z, 'k', lw=1)
    ax.set_xlabel('T ($^{\circ}$C)')
    ax.set_ylabel('z (m)')
    ax.set_xlim(4, 21)
    ax.grid(True)
    ax.invert_yaxis()
    #    ax.yaxis.tick_right()
    #    ax.yaxis.set_label_position("right")

    #    ax2 = ax.twiny()
    #    ax2.set_xlabel(r"""$\rho (kgm^{-3})$""")
    #    ax2.set_xlim(ax.get_xlim())
    #    xticks = ax.get_xticks()
    #    ax2.set_xticks(xticks[::2])
    #    xticks = rho0 + drhodt*xticks[::2]
    #    ax2.set_xticklabels(['{}'.format(i) for i in xticks])

    with mfdset(fil) as fh, mfdset(fil2) as fh2:
        geofil = 'ocean_geometry.nc'
        vgeofil = 'Vertical_coordinate.nc'
        domain = Domain.Domain2(geofil,
                                vgeofil,
                                -0.5,
                                0,
                                10,
                                60,
                                ls=0,
                                le=None)
        e = gv('e', domain, 'hi', fh).read_array()
        ax = plt.subplot(gs[4])
        ax.plot(domain.lath[e.plot_slice[2, 0]:e.plot_slice[2, 1]],
                np.mean(e.values, axis=(0, 3)).T[:, ::2],
                'k',
                lw=1)
        ax.plot(domain.lath[e.plot_slice[2, 0]:e.plot_slice[2, 1]],
                np.mean(e.values, axis=(0, 3)).T[:, -1],
                'k',
                lw=1)
        ax.set_yticklabels('')
        ax.set_xlabel('y ($^{\circ}$N)')
        ax.axvline(x=38.5, color='k')
        ax.grid()
        swash = gv('islayerdeep', domain, 'ql', fh2,
                   plot_loc='hl').xsm().ysm().read_array(
                       extend_kwargs=dict(method='mirror'),
                       tmean=False).move_to('ul').move_to('hl')
        swash0 = fh2.variables['islayerdeep'][-1, 0, 0, 320]
        swash = (-swash + swash0) * (100 / swash0)
        z = np.linspace(-3000, 0)
        swash = swash.toz(z, e=e)
        ax.contour(swash.dom.lath[e.plot_slice[2, 0]:e.plot_slice[2, 1]],
                   z,
                   np.nanmean(swash.values, axis=(0, 3)),
                   levels=[1],
                   colors='r')

        domain = Domain.Domain2(geofil,
                                vgeofil,
                                -0.5,
                                0,
                                38,
                                39,
                                ls=0,
                                le=None)
        ax = plt.subplot(gs[5])
        e = gv('e', domain, 'hi', fh).read_array()
        ax.plot(domain.lonh[e.plot_slice[3, 0]:e.plot_slice[3, 1]],
                np.mean(e.values, axis=(0, 2)).T[:, ::2],
                'k',
                lw=1)
        ax.plot(domain.lonh[e.plot_slice[3, 0]:e.plot_slice[3, 1]],
                np.mean(e.values, axis=(0, 2)).T[:, -1],
                'k',
                lw=1)
        ax.set_yticklabels('')
        ax.set_xlabel('x ($^{\circ}$)')

        swash = gv('islayerdeep', domain, 'ql', fh2,
                   plot_loc='hl').xsm().ysm().read_array(
                       tmean=False).move_to('ul').move_to('hl')
        swash0 = fh2.variables['islayerdeep'][-1, 0, 0, 320]
        swash = (-swash + swash0) * (100 / swash0)
        z = np.linspace(-3000, 0)
        swash = swash.toz(z, e=e)

        ax.contour(swash.dom.lonh[swash.plot_slice[3, 0]:swash.plot_slice[3,
                                                                          1]],
                   z,
                   np.nanmean(swash.values, axis=(0, 2)),
                   levels=[1],
                   colors='r')
        xdegtokm(ax, (38 + 39) / 2)
        ax.grid()
        #swash.plot('nanmean',(0,2),zcoord=True,e=e,z=np.linspace(-3000,0),cbar=True,ax=ax)
    return fig
def extract_ep_terms_pym6(initializer):

    domain = Domain.Domain(initializer)

    plot_loc = 'vl'
    with mfdset(initializer.fil) as fh, mfdset(initializer.fil2) as fh2:

        #initializer.z = np.linspace(-500, 0, 20)
        e = (gv('e', domain, 'hi', fh2, fh, plot_loc=plot_loc)
             .yep().read_array(
                 extend_kwargs={'method': 'mirror'}).move_to('vi'))
        h = (gv('h_Cv', domain, plot_loc, fh2, fh, plot_loc=plot_loc)
             .read_array(filled=0))
        vr = (gv('vh',
                 domain,
                 plot_loc,
                 fh2,
                 fh,
                 plot_loc=plot_loc,
                 divisor='h_Cv').read_array(
                     divide_by_dx=True, filled=0))
        hum = (gv('uh', domain, 'ul', fh2, fh, plot_loc=plot_loc).xsm().yep()
               .read_array(
                   divide_by_dy=True,
                   filled=0,
                   extend_kwargs={'method': 'vorticity'})
               .move_to('hl').move_to(plot_loc))
        huvm = (gv('huv_Bu', domain, 'ql', fh2, fh, plot_loc=plot_loc).xsm()
                .read_array(
                    filled=0,
                    extend_kwargs={'method': 'vorticity'}).move_to(plot_loc))
        uv_e_flux = (huvm - vr * hum) / h
        uv_e_flux = uv_e_flux.mean(axis=initializer.meanax).toz(initializer.z,
                                                                e=e)
        ex = (gv('e', domain, 'hi', fh2, fh, plot_loc=plot_loc)
              .xsm().xep().yep().read_array(extend_kwargs={'method': 'mirror'})
              .ddx(3).move_to('hi').move_to('vi').move_to('vl'))
        ex = ex.mean(axis=initializer.meanax).toz(initializer.z, e=e)

        e1 = (gv('e', domain, 'hi', fh2, fh, plot_loc=plot_loc)
              .yep().read_array(extend_kwargs={'method': 'mirror'})
              .move_to('hl'))
        esq = (gv('esq', domain, 'hl', fh2, fh, plot_loc=plot_loc)
               .yep().read_array(extend_kwargs={'method': 'mirror'}))
        edlsqm = esq - e1 * e1
        edlsqmy = edlsqm.ddx(2)
        hpfv = (gv('twa_hpfv', domain, plot_loc, fh2, fh, plot_loc=plot_loc)
                .read_array(filled=0))
        pfvm = (gv('PFv', domain, plot_loc, fh2, fh, plot_loc=plot_loc)
                .read_array(filled=0))
        edpfvdmb = -hpfv + h * pfvm - edlsqmy * domain.db * 0.5
        edpfvdmb1 = copy.copy(edpfvdmb)
        edpfvdmb1 = edpfvdmb1.mean(axis=initializer.meanax).toz(initializer.z,
                                                                e=e)
        edpfvdmb = edpfvdmb / domain.db
        edpfvdm = edpfvdmb.vert_integral()
        edpfvdm = edpfvdm.mean(axis=initializer.meanax).toz(initializer.z, e=e)

    flux_list = [uv_e_flux, edpfvdm]
    lab = [
        r"""$\widehat{u^{\prime \prime}v^{\prime \prime}}(\hat{i} + \bar{\zeta_{\tilde{x}}}\hat{k})$""",
        r"""$\overline{\zeta^\prime m_{\tilde{y}}^\prime} \hat{k}$""",
        r"""$\widehat{u^{\prime \prime}v^{\prime \prime}}(\hat{i} + \bar{\zeta_{\tilde{x}}}\hat{k}) +\overline{\zeta^\prime m_{\tilde{y}}^\prime} \hat{k}$"""
    ]

    dz = np.diff(initializer.z)[0]
    dx = np.radians(
        np.diff(domain.lonh[ex._plot_slice[3, 0]:ex._plot_slice[3, 1]])[0]
    ) * 6378000 * np.cos(
        np.radians(0.5 * (initializer.slat + initializer.nlat)))
    fig, ax = plt.subplots(1, 3, sharex=True, sharey=True, figsize=(10, 5))
    units = 'xy'
    angles = 'xy'
    q1 = ax[0].quiver(
        domain.lonh[ex._plot_slice[3, 0]:ex._plot_slice[3, 1]],
        initializer.z[::2],
        uv_e_flux.values.squeeze()[::2] / dx * np.sqrt(dx**2 + dz**2),
        uv_e_flux.values.squeeze()[::2] * ex.values.squeeze()[::2] / dz *
        np.sqrt(dx**2 + dz**2),
        units=units)
    #        angles=angles)
    tx = ax[0].text(0.05, 0.1, lab[0], transform=ax[0].transAxes)
    tx.set_fontsize(15)
    tx.set_bbox(dict(facecolor='white', alpha=1, edgecolor='white'))
    ax[0].quiverkey(
        q1, 0.75, 1.05, 1e-2, r'$1e-2$', labelpos='E', coordinates='axes')
    xdegtokm(ax[0], 0.5 * (initializer.slat + initializer.nlat))
    ax[0].set_ylabel('z (m)')
    q2 = ax[1].quiver(
        domain.lonh[ex._plot_slice[3, 0]:ex._plot_slice[3, 1]],
        initializer.z[::2],
        np.zeros(edpfvdm.values.squeeze()[::2].shape),
        edpfvdm.values.squeeze()[::2] / dx * np.sqrt(dx**2 + dz**2),
        units=units)
    #        angles=angles)
    tx = ax[1].text(0.05, 0.1, lab[1], transform=ax[1].transAxes)
    tx.set_fontsize(15)
    tx.set_bbox(dict(facecolor='white', alpha=1, edgecolor='white'))
    ax[1].quiverkey(
        q2, 0.75, 1.05, 1e-3, r'$1e-3$', labelpos='E', coordinates='axes')
    xdegtokm(ax[1], 0.5 * (initializer.slat + initializer.nlat))
    q3 = ax[2].quiver(
        domain.lonh[ex._plot_slice[3, 0]:ex._plot_slice[3, 1]],
        initializer.z[::2],
        np.zeros(edpfvdm.values.squeeze()[::2].shape) +
        uv_e_flux.values.squeeze()[::2] / dx * np.sqrt(dx**2 + dz**2),
        (edpfvdm.values.squeeze()[::2] + uv_e_flux.values.squeeze()[::2] *
         ex.values.squeeze()[::2]) / dz * np.sqrt(dx**2 + dz**2),
        units=units)
    #        angles=angles)
    tx = ax[2].text(0.05, 0.1, lab[2], transform=ax[2].transAxes)
    tx.set_fontsize(15)
    tx.set_bbox(dict(facecolor='white', alpha=1, edgecolor='white'))
    ax[2].quiverkey(
        q3, 0.75, 1.05, 1e-2, r'$1e-2$', labelpos='E', coordinates='axes')
    xdegtokm(ax[2], 0.5 * (initializer.slat + initializer.nlat))

    return fig
Пример #9
0
def extract_buoy_terms_pym6(geofil,
                            vgeofil,
                            fil,
                            fil2,
                            xstart,
                            xend,
                            ystart,
                            yend,
                            ls,
                            le,
                            fil3=None,
                            z=np.linspace(-3000, 0, 100),
                            htol=1e-3,
                            whichterms=None):

    domain = Domain.Domain(geofil,
                           vgeofil,
                           xstart,
                           xend,
                           ystart,
                           yend,
                           ls=ls,
                           le=le)

    with mfdset(fil) as fh, mfdset(fil2) as fh2:

        h = -gv('e', domain, 'hi', fh2,
                units='m').read_array().o1diff(1).values
        h[h < htol] = np.nan
        sigma = gv('e', domain, 'hi', fh2).read_array().ddx(1).values

        ex = gv('e', domain, 'hi',
                fh2).xsm().xep().read_array(extend_kwargs={
                    'method': 'mirror'
                }).ddx(3).move_to('ul')
        u = gv('uh', domain, 'ul', fh2, fh, plot_loc='hl',
               divisor='h_Cu').xsm().read_array(divide_by_dy=True)
        uex = u * ex
        uex = uex.move_to('hl')  #.values
        ubx = -uex * (1 / sigma)

        ey = gv('e', domain, 'hi',
                fh2).ysm().yep().read_array().ddx(2).move_to('vl')
        v = gv('vh', domain, 'vl', fh2, fh, plot_loc='hl',
               divisor='h_Cv').ysm().read_array(divide_by_dx=True)
        vey = v * ey
        vey = vey.move_to('hl')  #.values
        vby = -vey * (1 / sigma)

        wd = gv('wd', domain, 'hi', fh2).read_array().move_to('hl')  #.values
        whash = wd + uex + vey
        wbz = whash * (1 / sigma)

        hwb = -gv('wd', domain, 'hi', fh2).read_array().o1diff(1) * domain.db
        wtwa = hwb * (1 / h)

        budgetlist = [-ubx, -vby, -wbz, -wtwa]
        name = [
            r'$-\hat{u}b^{\#}_x$', r'$-\hat{v}b^{\#}_y$', r'$-w^{\#}b^{\#}_z$',
            r'$\hat{\varpi}$'
        ]
        if whichterms:
            budgetlist = budgetlist[whichterms]
            name = name[whichterms]
        for i, var in enumerate(budgetlist):
            var.units = r'$ms^{-3}$'
            var.name = name[i]
        z = np.linspace(-2000, 0)
        e = gv('e', domain, 'hi', fh2).read_array()
        plot_kwargs = dict(cmap='RdBu_r')
        plotter_kwargs = dict(zcoord=True, z=z, e=e, isop_mean=True)

        fig = Plotter.budget_plot(budgetlist, (0, 2),
                                  plot_kwargs=plot_kwargs,
                                  plotter_kwargs=plotter_kwargs,
                                  perc=90,
                                  individual_cbars=False)
        return fig
Пример #10
0
def plot_eddy_velocities(initializer, ts=0, te=1, z=None):
    if z:
        initializer.z = z

    domain = Domain.Domain(initializer)
    initializer_instantaneous = copy.copy(initializer)
    initializer_instantaneous.ts = ts
    initializer_instantaneous.te = te
    domain1 = Domain.Domain(initializer_instantaneous)

    with mfdset(initializer.fil) as fh, mfdset(
            initializer.fil2) as fh2, mfdset(initializer.fil3) as fh3:
        e_cu = (gv('e', domain, 'hi', fh2, fh,
                   plot_loc='ui').xep().read_array(extend_kwargs={
                       'method': 'mirror'
                   }).move_to('ui'))
        ur = gv('uh_masked',
                domain,
                'ul',
                fh2,
                fh,
                plot_loc='ul',
                divisor='h_Cu',
                name=r'$\hat{u}$').read_array(divide_by_dy=True, filled=0)
        u = gv('u', domain1, 'ul', fh3, plot_loc='ul',
               name=r'$u$').read_array(filled=0, tmean=False)
        udd = u - ur
        udd = udd.toz(initializer.z, e=e_cu)
        udd.name = r"$u''$"
        u = u.toz(initializer.z, e=e_cu)
        um = gv('u', domain, 'ul', fh2, fh, plot_loc='ul',
                name=r'$\bar{u}$').read_array(filled=0).toz(initializer.z,
                                                            e=e_cu)
        ud = u - um
        ud.name = r"$u'$"

        e_cv = (gv('e', domain, 'hi', fh2, fh,
                   plot_loc='vi').yep().read_array(extend_kwargs={
                       'method': 'mirror'
                   }).move_to('vi'))
        vr = gv('vh_masked',
                domain,
                'vl',
                fh2,
                fh,
                plot_loc='vl',
                divisor='h_Cv',
                name=r'$\hat{v}$').read_array(divide_by_dy=True, filled=0)
        v = gv('v', domain1, 'vl', fh3, plot_loc='vl',
               name=r'$v$').read_array(filled=0, tmean=False)
        vdd = v - vr
        vdd = vdd.toz(initializer.z, e=e_cv)
        vdd.name = r"$v''$"
        v = v.toz(initializer.z, e=e_cv)
        vm = gv('v', domain, 'vl', fh2, fh, plot_loc='vl',
                name=r'$\bar{v}$').read_array(filled=0).toz(initializer.z,
                                                            e=e_cv)
        vd = v - vm
        vd.name = r"$v'$"

    budgetlist = [u, ud, udd, v, vd, vdd]
    ax, fig = Plotter.budget_plot(budgetlist,
                                  initializer.meanax,
                                  ncols=3,
                                  plot_kwargs=dict(cmap='RdBu_r'),
                                  individual_cbars=False)

    #        fig, ax = plt.subplots(2, 3, sharex=True, sharey=True)
    #        u.plot(
    #            'nanmean',
    #            initializer.meanax,
    #            ax=ax[0, 0],
    #            cmap='RdBu_r',
    #            cbar=True)
    #        ud.plot(
    #            'nanmean',
    #            initializer.meanax,
    #            ax=ax[0, 1],
    #            cmap='RdBu_r',
    #            cbar=True)
    #        udd.plot(
    #            'nanmean',
    #            initializer.meanax,
    #            ax=ax[0, 2],
    #            cmap='RdBu_r',
    #            cbar=True)
    #        v.plot(
    #            'nanmean',
    #            initializer.meanax,
    #            ax=ax[1, 0],
    #            cmap='RdBu_r',
    #            cbar=True)
    #        vd.plot(
    #            'nanmean',
    #            initializer.meanax,
    #            ax=ax[1, 1],
    #            cmap='RdBu_r',
    #            cbar=True)
    #        vdd.plot(
    #            'nanmean',
    #            initializer.meanax,
    #            ax=ax[1, 2],
    #            cmap='RdBu_r',
    #            cbar=True)

    return fig
def extract_velocities(initializer):

    htol = initializer.htol  #1e-3
    z = initializer.z
    meanax = initializer.meanax
    domain = Domain.Domain(initializer)

    fig, ax = plt.subplots(3, 3, sharex=True, sharey=True, figsize=(8, 8))
    ax = ax.ravel()

    with mfdset(initializer.fil) as fh, mfdset(initializer.fil2) as fh2:

        h = -gv('e', domain, 'hi', fh2,
                units='m').read_array().o1diff(1).values
        h[h < htol] = np.nan
        sigma = gv('e', domain, 'hi', fh2).read_array().ddx(1).values

        e = gv('e', domain, 'hi',
               fh2).xsm().xep().read_array(extend_kwargs={
                   'method': 'mirror'
               }).move_to('ul')
        ur = gv('uh',
                domain,
                'ul',
                fh2,
                fh,
                plot_loc='hl',
                divisor='h_Cu',
                name=r'$\hat{u}$').xsm().read_array(divide_by_dy=True,
                                                    filled=0)
        u = gv('u', domain, 'ul', fh2, fh, plot_loc='hl',
               name=r'$\bar{u}$').xsm().read_array(filled=0)
        ub = ur - u
        ub.name = r'$\frac{\overline{u^{\prime}h^{\prime}}}{\bar{h}}$'
        ax[2], im = ur.plot('nanmean',
                            meanax,
                            zcoord=True,
                            z=z,
                            e=e,
                            plot_kwargs=dict(cmap='RdBu_r'),
                            clevs=[-0.01, 0.01],
                            contour=True,
                            ax=ax[2],
                            perc=99)
        ax[2].plot(domain.lonq[e._plot_slice[3, 0]:e._plot_slice[3, 1]],
                   np.nanmean(e.values[:, ::4], axis=2).squeeze().T, 'k')
        vmin, vmax = im.get_clim()
        u.plot('nanmean',
               meanax,
               zcoord=True,
               z=z,
               e=e,
               clevs=[-0.01, 0.01],
               plot_kwargs=dict(cmap='RdBu_r', vmin=vmin, vmax=vmax),
               cbar=False,
               contour=True,
               ax=ax[0],
               perc=99)
        ax[0].plot(domain.lonq[e._plot_slice[3, 0]:e._plot_slice[3, 1]],
                   np.nanmean(e.values[:, ::4], axis=2).squeeze().T, 'k')
        ub.plot('nanmean',
                meanax,
                zcoord=True,
                z=z,
                e=e,
                clevs=[-0.01, 0.01],
                plot_kwargs=dict(cmap='RdBu_r', vmin=vmin, vmax=vmax),
                cbar=False,
                contour=True,
                ax=ax[1],
                perc=99)
        ax[1].plot(domain.lonq[e._plot_slice[3, 0]:e._plot_slice[3, 1]],
                   np.nanmean(e.values[:, ::4], axis=2).squeeze().T, 'k')
        cbar = fig.colorbar(im, ax=ax[:3].tolist())
        cbar.formatter.set_powerlimits((-2, 2))
        cbar.update_ticks()

        ex = gv('e', domain, 'hi',
                fh2).xsm().xep().read_array(extend_kwargs={
                    'method': 'mirror'
                }).ddx(3).move_to('ul')
        uex = ur * ex
        uex = uex.move_to('hl')  #.values

        e = gv('e', domain, 'hi',
               fh2).ysm().yep().read_array(extend_kwargs={
                   'method': 'mirror'
               }).move_to('vl')
        vr = gv('vh',
                domain,
                'vl',
                fh2,
                fh,
                plot_loc='hl',
                divisor='h_Cv',
                name=r'$\hat{v}$').ysm().read_array(divide_by_dx=True,
                                                    filled=0)
        v = gv('v', domain, 'vl', fh2, fh, plot_loc='hl',
               name=r'$\bar{v}$').ysm().read_array(filled=0)
        vb = vr - v
        vb.name = r'$\frac{\overline{v^{\prime}h^{\prime}}}{\bar{h}}$'
        ax[5], im = vr.plot('nanmean',
                            meanax,
                            zcoord=True,
                            z=z,
                            e=e,
                            plot_kwargs=dict(cmap='RdBu_r'),
                            clevs=[-0.12, 0.12],
                            contour=True,
                            ax=ax[5],
                            perc=99)
        vmin, vmax = im.get_clim()
        ax[5].plot(domain.lonh[e._plot_slice[3, 0]:e._plot_slice[3, 1]],
                   np.nanmean(e.values[:, ::4], axis=2).squeeze().T, 'k')
        v.plot('nanmean',
               meanax,
               zcoord=True,
               z=z,
               e=e,
               clevs=[-0.12, 0.12],
               plot_kwargs=dict(cmap='RdBu_r', vmin=vmin, vmax=vmax),
               contour=True,
               ax=ax[3],
               perc=99)
        ax[3].plot(domain.lonh[e._plot_slice[3, 0]:e._plot_slice[3, 1]],
                   np.nanmean(e.values[:, ::4], axis=2).squeeze().T, 'k')
        vb.plot('nanmean',
                meanax,
                zcoord=True,
                z=z,
                e=e,
                clevs=[-0.12, 0.12],
                plot_kwargs=dict(cmap='RdBu_r'),
                contour=True,
                ax=ax[4],
                perc=99)
        ax[4].plot(domain.lonh[e._plot_slice[3, 0]:e._plot_slice[3, 1]],
                   np.nanmean(e.values[:, ::4], axis=2).squeeze().T, 'k')
        cbar = fig.colorbar(im, ax=ax[3:6].tolist())
        cbar.formatter.set_powerlimits((-2, 2))
        cbar.update_ticks()

        ey = gv('e', domain, 'hi',
                fh2).ysm().yep().read_array().ddx(2).move_to('vl')
        vey = vr * ey
        vey = vey.move_to('hl')  #.values

        e = gv('e', domain, 'hi', fh2).read_array()  #.values
        wd = gv('wd',
                domain,
                'hi',
                fh2,
                name=r'$\hat{\varpi}\bar{\zeta}_{\tilde{b}}$').read_array(
                ).move_to('hl')  #.values
        conv = uex + vey
        conv.name = r'$\hat{u}\bar{\zeta}_{\tilde{x}}+\hat{v}\bar{\zeta}_{\tilde{y}}$'
        whash = wd + conv
        whash.name = r'$w^{\#}$'
        ax[8], im = whash.plot('nanmean',
                               meanax,
                               zcoord=True,
                               z=z,
                               e=e,
                               plot_kwargs=dict(cmap='RdBu_r'),
                               clevs=[-0.0001, 0.0001],
                               contour=True,
                               fmt='%.0e',
                               ax=ax[8],
                               perc=99)
        vmin, vmax = im.get_clim()
        ax[8].plot(domain.lonh[e._plot_slice[3, 0]:e._plot_slice[3, 1]],
                   np.nanmean(e.values[:, ::4], axis=2).squeeze().T, 'k')
        wd.plot('nanmean',
                meanax,
                zcoord=True,
                z=z,
                e=e,
                clevs=[-0.0001, 0.0001],
                plot_kwargs=dict(cmap='RdBu_r', vmin=vmin, vmax=vmax),
                contour=True,
                fmt='%.0e',
                ax=ax[7],
                perc=99)
        ax[7].plot(domain.lonh[e._plot_slice[3, 0]:e._plot_slice[3, 1]],
                   np.nanmean(e.values[:, ::4], axis=2).squeeze().T, 'k')
        conv.plot('nanmean',
                  meanax,
                  zcoord=True,
                  z=z,
                  e=e,
                  clevs=[-0.0001, 0.0001],
                  plot_kwargs=dict(cmap='RdBu_r', vmin=vmin, vmax=vmax),
                  contour=True,
                  fmt='%.0e',
                  ax=ax[6],
                  perc=99,
                  xtokm=True)
        ax[6].plot(domain.lonh[e._plot_slice[3, 0]:e._plot_slice[3, 1]],
                   np.nanmean(e.values[:, ::4], axis=2).squeeze().T, 'k')
        cbar = fig.colorbar(im, ax=ax[6:9].tolist())
        cbar.formatter.set_powerlimits((-2, 2))
        cbar.update_ticks()
    for i, axc in enumerate(ax):
        axc.set_ylabel('z (m)') if i % 3 == 0 else axc.set_ylabel('')
        axc.set_xlabel('x from EB (km)') if i > 5 else axc.set_xlabel('')

    fig2, ax = plt.subplots(1, 1, figsize=(4, 1))
    ax.plot(domain.lonh[e._plot_slice[3, 0]:e._plot_slice[3, 1]],
            np.nanmean(e.values, axis=2).squeeze().T, 'k')
    xdegtokm(ax, 0.5 * (initializer.slat + initializer.nlat))
    ax.set_ylim(-500, 0)
    ax.set_ylabel('z (m)')

    return fig, fig2