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