#!/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 modelout.getdata import funcs import xfilter #nwindow, dimlp = 1, 'year' 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>nwindow else x import geoxarray # if __name__ == '__main__': tt.check('end import') # #start from here daname = 't_surf' func = lambda x: x.load().geo.fldmean() #func = lambda da: da.rename(grid_xt='lon', grid_yt='lat').sel(lon=slice(360-170, 360-120), lat=slice(-5, 5)).load().geo.fldmean() #funcname = 'nino3' funcname = 'indexNS' func = funcs[funcname] das = [] labels = [] model = 'FLOR' #HistRCP45_FA for ens in range(1, 3+1): label = f'HistRCP45_FA_ens{ens:02d}' expname = f'HistRCP45_FA_tigercpu_intelmpi_18_576PE_e{ens}' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname)#, years=range(100,201)) labels.append(label) das.append(da) da_ref = ( das[0].groupby('time.year').mean('time').isel(year=slice(0,30)).mean('year') + das[1].groupby('time.year').mean('time').isel(year=slice(0,30)).mean('year') + das[2].groupby('time.year').mean('time').isel(year=slice(0,30)).mean('year') )/3 #ens mean of the first 30 years mean def wyplot(da, label, anom_on=False, **kws): da = da.groupby('time.year').mean('time') #da = da - 273.15 #K -> degC if anom_on: da = da - da_ref # remove the mean of the first 30 years da = da.pipe(lowpass) da.plot(label=label, **kws) if __name__ == '__main__': from wyconfig import * #my plot settings anom_on = True if 'anom' in sys.argv else False #ctl fig,ax = plt.subplots(figsize=(8,4)) #HistRCP45 #ifile = '/tigress/wenchang/analysis/FLOR/ens/t_surf_FLOR_HistRCP45_tigercpu_intelmpi_18_576PE_10ens_1860-2100_glbmean.nc' ifile = '/tigress/wenchang/analysis/FLOR/ens/indexNS/t_surf_FLOR_HistRCP45_tigercpu_intelmpi_18_576PE_10ens_1860-2100_indexNS.nc' da = xr.open_dataarray(ifile) \ .groupby('time.year').mean('time') if anom_on: da = da.pipe(lambda x: x - x.isel(year=slice(0,30)).mean('year').mean('ens')) da = da.pipe(lowpass) for ii in range(1,10+1): da.sel(ens=ii).plot(ax=ax, lw=1, color='gray', alpha=0.2, ls='-') da.mean('ens').plot(ax=ax, color='gray', ls='-', label='HistRCP45') #HistRCP45_FA ii = 0 for da,label in zip(das, labels): wyplot(da, label, anom_on=anom_on, ax=ax, color=f'C{ii}',ls='-', alpha=0.5) ii += 1 ax.legend(ncol=1) #ax.set_title(f'indexNS, {nwindow}-{dimlp}-RunAvg') title = f'indexNS, {nwindow}-{dimlp}-RunAvg' if anom_on: title = title.replace('indexNS', 'indexNS anom') ax.set_title(title) ax.set_ylabel(f'degC') ax.set_xlim(1860, 2100) #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'.png') if anom_on: figname = figname.replace('.png', '__anom.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: pass else: plt.show()