#!/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 = 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 from misc import get_kws_from_argv # if __name__ == '__main__': tt.check('end import') # #start from here daname = get_kws_from_argv('daname', 't_surf') #func = lambda x: x.load().geo.fldmean() #funcname = 'glbmean' #func = funcs['nino34'] #funcname = 'nino34' func = funcs['annualmean'] funcname = 'annualmean' cleanup = False #remove cache or not das = dict() model = 'FLOR' """ #ctl1990_v201905 label = 'FLOR_ctl_1990_v201905' expname = 'CTL1990_v201905_tigercpu_intelmpi_18_576PE' da = get_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, years=range(1901,2000+1)) das[label] = da #ctl1990_v201905_FA label = 'FLOR_ctl_1990_v201905_FA' expname = 'CTL1990_v201905_FA_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname)#, years=range(100,201)) das[label] = da #ctl1990_v201905_FA05 label = 'FLOR_ctl_1990_v201905_FA05' expname = 'CTL1990_v201905_FA05_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname)#, years=range(100,201)) das[label] = da #ctl1990_v201905_FA05trop label = 'FLOR_ctl_1990_v201905_FA05trop' expname = 'CTL1990_v201905_FA05trop_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname)#, years=range(100,201)) das[label] = da #ctl1990_v201905_FAtrop label = 'FLOR_ctl_1990_v201905_FAtrop' expname = 'CTL1990_v201905_FAtrop_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname)#, years=range(100,201)) das[label] = da """ #ctl1860_v202407 label = 'FLOR_ctl_1860_v202407' expname = 'CTL1860_v202407_tigercpu_intelmpi_18_576PE' da = get_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, years=range(1901,2000+1)) das[label] = da #ctl1860_v202407_FA label = 'FLOR_ctl_1860_v202407_FA' expname = 'CTL1860_v202407_FA_tigercpu_intelmpi_18_576PE' da = get_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, years=range(1901,2000+1)) das[label] = da #ctl1860_v202407_FAtrop label = 'FLOR_ctl_1860_v202407_FAtrop' expname = 'CTL1860_v202407_FAtrop_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname)#, years=range(1901,2000+1)) das[label] = da model = 'CM2.1p1' #ctl1860_v202410 label = 'CM2p1_ctl_1860_v202407' expname = 'CTL1860_v202410_tigercpu_intelmpi_18_80PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) #, years=range(1901,2000+1)) das[label] = da #ctl1860_v202410_FAtrop label = 'CM2p1_ctl_1860_v202407_FAtrop' expname = 'CTL1860_v202410_FAtrop_tigercpu_intelmpi_18_80PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) #, years=range(1901,2000+1)) das[label] = da #units units = da.attrs['units'] def wyplot(da, label, ax=None, **kws): if ax is None: ax = plt.subplots()[1] da_ctl = das['FLOR_ctl_1990_v201905'] if 'FLOR_ctl_1990_v201905' in label else None #default ctl case da_ctl = das['FLOR_ctl_1860_v202407'] if 'FLOR_ctl_1860_v202407' in label else da_ctl #adjust the ctl case da_ctl = das['CM2p1_ctl_1860_v202407'] if 'CM2p1_ctl_1860_v202407' in label else da_ctl #adjust the ctl case #da = da.groupby('time.year').mean('time') daa = da.mean('time') - da_ctl.mean('time') #anomal from the original control #da = da.pipe(lowpass) #da = da.sel(year=slice(1900,2000)) daa.assign_attrs(units=units).plot(ax=ax, **kws) if __name__ == '__main__': from wyconfig import * #my plot settings from geoplots import mapplot if daname in ('t_surf', 't_ref'): vmax = 4 elif daname == 'slp': vmax = 3 elif daname == 'precip': vmax = 2 else: vmax = None if daname == 'precip': cmap = 'BrBG' else: cmap = None for label,da in das.items(): if label in ('FLOR_ctl_1990_v201905','FLOR_ctl_1860_v202407', 'CM2p1_ctl_1860_v202407'): continue #skip the ctl case fig,ax = plt.subplots() year_start = da.time[0].item().year year_stop = da.time[-1].item().year wyplot(da, label, ax=ax, robust=True, levels=21, vmax=vmax, cmap=cmap, extend='both') plt.sca(ax) mapplot() ax.set_title(f"{label} {daname} anomaly: {year_start}-{year_stop}") #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'__{daname}_{label}.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()