#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Wed May 15 23:08:39 EDT 2024 if __name__ == '__main__': import sys,os from misc.timer import Timer tt = Timer(f'[{os.getcwd()}] start ' + ' '.join(sys.argv)) 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 import salem import geoxarray from misc import roll_lon from misc.wysalem import get_world_shape # if __name__ == '__main__': tt.check('end import') # #start from here """ lon0 = 360 - 51.6658 lat0 = -29.3646 lonslice = slice(360-55, 360-50) latslice = slice(-25,-30) subset = lambda x: x.interp(lon=lon0, lat=lat0) """ rename = lambda x: x.rename(longitude='lon', latitude='lat') timeslice = slice('2024-04-26', '2024-05-05') #shapefile based subset shapefile = '../state_Rio_Grande_do_Sul/43UF2500G.shp' shdf = salem.read_shapefile(shapefile) #brazil shape shdf_brazil = get_world_shape('Brazil') #subset = lambda x: x.sel(lon=lonslice, lat=latslice) def getdata(daname_long): ifiles = f'/tigress/wenchang/data/era5/analysis/realtime202405/era5.{daname_long}.2024-0?.nc' ds = xr.open_mfdataset(ifiles).sel(time=timeslice).pipe(rename).pipe(roll_lon).salem.subset(shape=shdf, margin=1).salem.roi(shape=shdf).load() \ .resample(time='1D').mean(keep_attrs=True) #dataset to dataarray daname = list(ds.data_vars)[0] da = ds[daname].geo.fldmean() return da daname_long = 'mean_total_precipitation_rate' precip = getdata(daname_long) precip = precip * 24 *3600 #units convert from kg m**-2 s**-2 to mm/day precip = precip.assign_attrs(units='mm/day', long_name=daname_long.replace('_', ' ')) #vimdiv daname_long = 'mean_vertically_integrated_moisture_divergence' vimdiv = getdata(daname_long) vimdiv = vimdiv * 24 *3600 #units convert from kg m**-2 s**-1 to mm/day vimdiv = vimdiv.assign_attrs(units='mm/day', long_name=daname_long.replace('_', ' ')) #cal time series func = lambda x: x.pipe(roll_lon).salem.subset(shape=shdf, margin=1).salem.roi(shape=shdf).load() \ .resample(time='1D').mean(keep_attrs=True) \ .geo.fldmean() #vimdiv ifile = '/tigress/wenchang/data/era5/analysis_wy/realtime202405/data_era5_moisture_transport.nc' ds = xr.open_dataset(ifile) vimdiv_offline = ds['vimdiv'].pipe(func) #vimdiv qclim uvclim ifile = '/tigress/wenchang/data/era5/analysis_wy/realtime202405/data_era5_moisture_transport_qclim_uvclim.nc' ds = xr.open_dataset(ifile) vimdiv_qclim_uvclim = ds['vimdiv'].pipe(roll_lon).salem.subset(shape=shdf, margin=1).salem.roi(shape=shdf).load().geo.fldmean() #vimdiv qanom uvclim ifile = '/tigress/wenchang/data/era5/analysis_wy/realtime202405/data_era5_moisture_transport_qanom_uvclim.nc' ds = xr.open_dataset(ifile) vimdiv_qanom_uvclim = ds['vimdiv'].pipe(func) #vimdiv qclim uvanom ifile = '/tigress/wenchang/data/era5/analysis_wy/realtime202405/data_era5_moisture_transport_qclim_uvanom.nc' ds = xr.open_dataset(ifile) vimdiv_qclim_uvanom = ds['vimdiv'].pipe(func) #vimdiv qanom uvanom ifile = '/tigress/wenchang/data/era5/analysis_wy/realtime202405/data_era5_moisture_transport_qanom_uvanom.nc' ds = xr.open_dataset(ifile) vimdiv_qanom_uvanom = ds['vimdiv'].pipe(func) if __name__ == '__main__': from wyconfig import * #my plot settings from geoplots import mapplot #fig, ax = plt.subplots(figsize=(8,3)) fig, ax = plt.subplots() #da = precip #da.plot(marker='o', markerfacecolor='none', label='precip') da = -vimdiv #da.plot(marker='*', markerfacecolor='none', label='online', color='k', markersize=10) da.plot(marker='o', markerfacecolor='none', label='online', color='k') da = -vimdiv_offline da.plot(marker='o', markerfacecolor='none', label='mc(q,v)', color='gray') da = -vimdiv_qclim_uvclim ax.axhline(da, ls='--', color='C0', label='mc(qc,vc)') da = -vimdiv_qanom_uvclim da.plot(marker='o', markerfacecolor='none', label='mc(qa,vc)', ls='--', color='C1') da = -vimdiv_qclim_uvanom da.plot(marker='o', markerfacecolor='none', label='mc(qc,va)', ls='--', color='C2') da = -vimdiv_qanom_uvanom da.plot(marker='o', markerfacecolor='none', label='mc(qa,va)', ls='--', color='C3') ax.set_title(f'ERA5 moisture convergence: state Rio Grande do Sul precip') ax.set_xlabel('') ax.set_ylabel(vimdiv.attrs['units']) ax.legend(loc='upper right', ncol=2) ax.axhline(0, color='gray', ls='--') axin = ax.inset_axes([0, 0.5, 0.2, 0.5], transform=ax.transAxes) shdf_brazil.boundary.plot(ax=axin, color='gray', lw=1) shdf.plot(ax=axin, color='gray') #axin.set_xticks(range(-70, -50+1, 10)) #axin.set_yticks(range(-40, -10+1, 10)) #mapplot(ax=axin) axin.spines['left'].set_visible(False) axin.spines['bottom'].set_visible(False) axin.set_xticks([]) axin.set_yticks([]) axin.patch.set_alpha(0) #iavefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'.png') if 'overwritefig' in sys.argv or 'o' in sys.argv: wysavefig(figname, overwritefig=True) else: wysavefig(figname) tt.check(f'**Done**') print() if 'notshowfig' in sys.argv or 'n' in sys.argv: pass else: if 'plt' in globals(): plt.show()