#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Wed Mar 11 02:00:36 PM EDT 2026 #windspharm package: https://ajdawson.github.io/windspharm/api/windspharm.xarray.html if __name__ == '__main__': import sys,os try: from misc.timer import Timer tt = Timer(f'[{os.getcwd()}] start ' + ' '.join(sys.argv)) except: pass import sys, os.path, os, glob, datetime import xarray as xr, numpy as np, pandas as pd, matplotlib.pyplot as plt #more imports wython = '/tigress/wenchang/wython' if wython not in sys.path: sys.path.append(wython); print('added to python path:', wython) from misc import get_kws_from_argv from windspharm.xarray import VectorWind # if __name__ == '__main__': try: tt.check('end import') except: pass # #start from here year_mon = get_kws_from_argv('year_mon', '2020-07') ifile = '/projects/w/wenchang/data/era5/analysis_wy/plevels/u200/daily/era5.u200.daily.2020-07.nc' ifile = ifile.replace('2020-07', f'{year_mon}') u = xr.open_dataarray(ifile).load().mean('time') ifile = '/projects/w/wenchang/data/era5/analysis_wy/plevels/v200/daily/era5.v200.daily.2020-07.nc' ifile = ifile.replace('2020-07', f'{year_mon}') v = xr.open_dataarray(ifile).load().mean('time') skiplon, skiplat = 50,25 #reduce dim size by skipping data points for better visualization of quiver plot ds = xr.Dataset(dict(u=u[::skiplat, ::skiplon], v=v[::skiplat, ::skiplon])) w = VectorWind(u,v) speed = w.magnitude() st = w.streamfunction() vp = w.velocitypotential() vort = w.vorticity() div = w.divergence() if __name__ == '__main__': from wyconfig import * #my plot settings from geoplots import mapplot fig,ax = plt.subplots() speed.plot() ds.plot.quiver(x='longitude', y='latitude', u='u', v='v') plt.sca(ax) mapplot() ax.set_title(f'ERA5 -{year_mon} 200hPa winds vector and speed') #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'__uv_{year_mon}.png') if 'overwritefig' in sys.argv or 'o' in sys.argv: wysavefig(figname, overwritefig=True) else: wysavefig(figname) fig,ax = plt.subplots() st.plot.contour(levels=21, colors='k') vort.plot(robust=True) plt.sca(ax) mapplot() ax.set_title(f'ERA5 {year_mon} 200hPa stream function and relative vorticity') #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'__psizeta_{year_mon}.png') if 'overwritefig' in sys.argv or 'o' in sys.argv: wysavefig(figname, overwritefig=True) else: wysavefig(figname) fig, ax = plt.subplots() vp.plot.contour(levels=11, colors='k') div.plot(robust=True) plt.sca(ax) mapplot() ax.set_title(f'ERA5 {year_mon} 200hPa velocity potential and divergence') #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'__phidiv_{year_mon}.png') if 'overwritefig' in sys.argv or 'o' in sys.argv: wysavefig(figname, overwritefig=True) else: wysavefig(figname) try: tt.check(f'**Done**') except: pass print() if 'notshowfig' in sys.argv or 'n' in sys.argv: pass else: if 'plt' in globals(): plt.show()