#!/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 misc.modelout import get_modelout_data, update_modelout_data 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=False, min_periods=1).mean() import geoxarray # if __name__ == '__main__': tt.check('end import') # #start from here daname = 't_surf' func = lambda x: x.load().geo.fldmean() funcname = 'glbmean' labels = [] das = [] dass = {} model = 'FLOR' expname = 'CTL1860_newdiag_tigercpu_intelmpi_18_576PE' label = 'CTL1860_FLOR' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) labels.append(label) das.append(da) dass[label] = da da_ctl_flor = da model = 'CM2.1p1' expname = 'CTL1860_tigercpu_intelmpi_18_80PE' label = 'CTL1860_CM2.1p1' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) labels.append(label) das.append(da) dass[label] = da da_ctl_cm2p1 = da model = 'FLOR' expname = 'm2p0sol_CTL1860_tigercpu_intelmpi_18_576PE' label = '-2% Solar FLOR' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) labels.append(label) das.append(da) dass[label] = da model = 'CM2.1p1' expname = 'CTL1860_m2pctSolar_tigercpu_intelmpi_18_80PE' label = '-2% Solar CM2.1' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) labels.append(label) das.append(da) dass[label] = da model = 'FLOR' expname = 'm4p0sol_CTL1860_tigercpu_intelmpi_18_576PE' label = '-4% Solar FLOR' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) labels.append(label) das.append(da) dass[label] = da model = 'CM2.1p1' expname = 'CTL1860_m4pctSolar_tigercpu_intelmpi_18_80PE' label = '-4% Solar CM2.1' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) labels.append(label) das.append(da) dass[label] = da model = 'FLOR' expname = 'm6p0sol_CTL1860_tigercpu_intelmpi_18_576PE' label = '-6% Solar FLOR' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) labels.append(label) das.append(da) dass[label] = da model = 'CM2.1p1' expname = 'CTL1860_m6pctSolar_tigercpu_intelmpi_18_80PE' label = '-6% Solar CM2.1' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) labels.append(label) das.append(da) dass[label] = da model = 'FLOR' expname = 'p6p0sol_CTL1860_tigercpu_intelmpi_18_576PE' label = '+6% Solar FLOR' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) labels.append(label) das.append(da) dass[label] = da model = 'CM2.1p1' expname = 'CTL1860_p6pctSolar_tigercpu_intelmpi_18_80PE' label = '+6% Solar CM2.1' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) labels.append(label) das.append(da) dass[label] = da def wyplot(da, flip=False, reset_year=True, normalize=True, **kws): label = kws.pop('label') lw = 1.5 if 'FLOR' in label else 1 da_ctl = da_ctl_flor if 'FlOR' in label else da_ctl_cm2p1 ax = kws.pop('ax', plt.gca()) da = da.groupby('time.year').mean('time') - da_ctl.groupby('time.year').mean('time').sel(year=slice(101,200)).mean('year') #anom if reset_year: da = da.assign_coords(year=range(1, da.year.size+1)) if normalize: #normalize to 2% solar radiation if '4%' in label: da = da/2 elif '6%' in label: da = da/3 if '+' not in label: da = -da if flip: da = -da da = da.pipe(lowpass) #da = da.assign_coords(year=da.year-100) #shift the year axis to start with 0 (instead of 100) da.plot(label=label, lw=lw, **kws) #ax.plot(da.isel(year=-1).year, da.isel(year=-1), marker='o', fillstyle='none', color='gray') #ax.text(da.year.values[-1], da.values[-1], f'{da.year.values[-1]}', color='gray') if __name__ == '__main__': from wyconfig import * #my plot settings fig,ax = plt.subplots(figsize=(8,4)) label = '-2% Solar FLOR' da = dass[label] da.pipe(wyplot, label=label, color='C0') label = '-2% Solar CM2.1' da = dass[label] da.pipe(wyplot, label=label, color='C0') label = '-4% Solar FLOR' da = dass[label] da.pipe(wyplot, label=label, color='C1') label = '-4% Solar CM2.1' da = dass[label] da.pipe(wyplot, label=label, color='C1') label = '-6% Solar FLOR' da = dass[label] da.pipe(wyplot, label=label, color='C2') label = '-6% Solar CM2.1' da = dass[label] da.pipe(wyplot, label=label, color='C2') label = '+6% Solar FLOR' da = dass[label] da.pipe(wyplot, label=label, color='C3') label = '+6% Solar CM2.1' da = dass[label] da.pipe(wyplot, label=label, color='C3') ax.legend() ax.set_ylabel(f'K') #ax.set_xlim(None, da_ctl.time.dt.year.values[-1]+500*0) ax.set_title(f'GMST anom, {nwindow}-{dimlp}-lp, scaled to +2% Solar') ax.set_ylim(None, 5) #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'__norm.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()