#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Wed Oct 5 11:09:59 EDT 2022 if __name__ == '__main__': import sys from misc.timer import Timer tt = Timer('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 from modelout import get_modelout_data, update_modelout_data from misc import get_kws_from_argv from misc.seasons import sel_season import xfilter nwindow, dimlp = 9, 'year' #lowpass = lambda x: x.filter.lowpass(1/nwindow, dim=dimlp, padtype='odd') lowpass = lambda x: x.rolling(year=nwindow, center=True, min_periods=1).mean() if x.year.size>9 else x import geoxarray # if __name__ == '__main__': tt.check('end import') # #start from here funcname = 'zonalmean' daname = get_kws_from_argv('daname', 'qo3') #qo3, temp, blk_crb ifile = '/projects/GEOCLIM/xjb/simons/sg/med/sso/SSO_AM41_1850.nc' ds = xr.open_dataset(ifile) model = 'AM4.1' expname = 'CTL1850_tiger3_intel24ifort_openmpi_1536PE' #da = update_modelout_data(daname=daname, model=model, expname=expname, dsname=dsname, func=func, funcname=funcname, odir='../../CTL')#, years=range(100,201)) da = ds['SSO_O3_CTL'] da_ctl = da expname = get_kws_from_argv('expname', 'CTL1850_BC_lat0_L2_Y0011_tiger3_intel24ifort_openmpi_1536PE') #da = update_modelout_data(daname=daname, model=model, expname=expname, dsname=dsname, func=func, funcname=funcname)#, years=range(100,201)) key = 'SSO_O3_' + expname.split('CTL1850_')[1].split('_Y0011')[0] #e.d. SSO_O3_BC_lat0_L2 da = ds[key] da_srm = da year_last = da.time.dt.year.values[-1] if __name__ == '__main__': from wyconfig import * #my plot settings from geoplots import xticks2lat season = get_kws_from_argv('season', 'DJF') figodir = None #if month is None else 'frames' pct = True if 'pct' in sys.argv else False cmap = None; vmin = None; levels = 21; vmax = None; extend = None if daname in ('blk_crb',): cmap = 'Greys'; vmin = 0; levels = 11 if daname in ('qo3',): cmap = 'PRGn' if daname in ('blk_crb',): vmax = 4e-10; extend = 'both' if daname in ('qo3',): vmax = 6e-6; extend = 'both' if daname in ('temp',): vmax = 50; extend = 'both' figsize = 8,4 fig,ax = plt.subplots(figsize=figsize) with xr.set_options(keep_attrs=True): da_ref = da_ctl.groupby('time.season').mean('time').sel(season=season) if season == 'DJF': da = da_srm.sel(time=slice('0011-12', '0012-02')).mean('time') else: da = da_srm.sel(time='0012').pipe(sel_season, season).mean('time') if pct: daa = ( da/da_ref - 1) *100 daa.attrs['units'] = '%' else: daa = da - da_ref daa.plot.contourf(x='lat', yincrease=False, yscale='log', levels=levels, cmap=cmap, vmin=vmin, vmax=vmax, extend=extend) if daname in ('qo3',): (da*0 + da_ref).plot.contour(x='lat', yincrease=False, yscale='log', linewidths=0.5) title = f'{model} {funcname} {daname} anom: {expname.split("_tiger3")[0]}, 0012{season}' #if month is not None: title += f'-{month:02d}' ax.set_title(title) xticks2lat() ax.set_xlabel('') #emission level if '_L2_' in expname: elev = 5.84530754043837 elif '_L6_' in expname: elev = 35.2211968195201 elif '_L8_' in expname: elev = 64.560183540236 ax.axhline(elev, color='gray', ls='--') #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'__{key}_{funcname}_anom_0012{season}.png') if figodir is not None: basename = os.path.basename(figname) figname = figname.replace(basename, os.path.join(figodir, basename)) if pct: figname = figname.replace('_anom', '_pct') 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: pass else: plt.show()