#!/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 model = 'FLOR' # 'CM2.1p1' daname = 't_surf' func = lambda x: x.load().geo.fldmean() funcname = 'glbmean' cleanup = True #False #remove cache or not das = dict() expname = 'CTL1860_newdiag_tigercpu_intelmpi_18_576PE' #da = get_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname) das['CTL'] = da#.sel(time=slice('0100', '1000')) expname = 'co2x4_CTL1860_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['4xCO2'] = da expname = 'co2x2_CTL1860_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['2xCO2'] = da expname = 'co2xp5_CTL1860_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['0.5xCO2'] = da expname = 'co2xp25_CTL1860_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['0.25xCO2'] = da expname = 'p6p0sol_CTL1860_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['+6% Solar'] = da expname = 'p2p0sol_CTL1860_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['+2% Solar'] = da expname = 'p1p0sol_CTL1860_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['+1% Solar'] = da expname = 'm1p0sol_CTL1860_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['-1% Solar'] = da expname = 'm2p0sol_CTL1860_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['-2% Solar'] = da expname = 'm6p0sol_CTL1860_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['-6% Solar'] = da expname = 'm6p0sol_CTL1860_recover0251_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['-6% Solar back251'] = da expname = 'm6p0sol_CTL1860_recover0501_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['-6% Solar back501'] = da expname = 'm6p0sol_CTL1860_recover0591_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['-6% Solar back591'] = da expname = 'CTL1860_newdiag_1pct4xCO2_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['1%to4xCO2'] = da expname = 'CTL1860_newdiag_1pct4xCO2back_tigercpu_intelmpi_18_576PE' da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) das['1%to4xCO2back'] = da #expname = 'CTL1860_1pct4xCO2back_tigercpu_intelmpi_18_80PE' #da = update_modelout_data(daname=daname, model=model, expname=expname, func=func, funcname=funcname, cleanup=cleanup) #das['1%to4xCO2back'] = da def wyplot(da, flip=False, **kws): ax = kws.pop('ax', plt.gca()) da = da.groupby('time.year').mean('time') - das['CTL'].groupby('time.year').mean('time').sel(year=slice(101,200)).mean('year') #anom #if da.year[0] == 101: #fill zero to year 100 # da = xr.concat([das['CTL'].sel(time='0100').groupby('time.year').mean('time')*0, da], dim='year') #da = da.groupby('time.month') - da_ctl.sel(time=slice('0101','0200')).groupby('time.month').mean('time') #anom 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(**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)) for label,da in das.items(): if label=='CTL': da.pipe(wyplot, label=label, color='k') ax.set_prop_cycle(None) else: da.pipe(wyplot, label=label) ax.legend(ncol=3) ax.set_ylabel(f'{model} GMST anom [K], {nwindow}-{dimlp}-lp') ax.set_xlim(None, das['CTL'].time.dt.year.values[-1]+500*0) #savefig 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) #mirror the negative forcing fig,ax = plt.subplots(figsize=(8,4)) label = 'CTL' da = das[label] da.pipe(wyplot, label=label, color='k') label = '2xCO2' ii = 0 color = f'C{ii}' da = das[label] da.pipe(wyplot, label=label, color=color, ls='-') label = '0.5xCO2' da = das[label] da.pipe(wyplot, label=label, color=color, ls='--', flip=True) label = '4xCO2' ii += 1 color = f'C{ii}' da = das[label] da.pipe(wyplot, label=label, color=color, ls='-') label = '0.25xCO2' da = das[label] da.pipe(wyplot, label=label, color=color, ls='--', flip=True) label = '+1% Solar' ii += 1 color = f'C{ii}' da = das[label] da.pipe(wyplot, label=label, color=color, ls='-') label = '-1% Solar' da = das[label] da.pipe(wyplot, label=label, color=color, ls='--', flip=True) label = '+2% Solar' ii += 1 color = f'C{ii}' da = das[label] da.pipe(wyplot, label=label, color=color, ls='-') label = '-2% Solar' da = das[label] da.pipe(wyplot, label=label, color=color, ls='--', flip=True) label = '+6% Solar' ii += 1 color = f'C{ii}' da = das[label] da.pipe(wyplot, label=label, color=color, ls='-') label = '-6% Solar' da = das[label] da.pipe(wyplot, label=label, color=color, ls='--', flip=True) label = '-6% Solar back251' da = das[label] da.pipe(wyplot, label=label, color=color, ls='-.', flip=True) label = '-6% Solar back501' da = das[label] da.pipe(wyplot, label=label, color=color, ls='-.', flip=True) label = '-6% Solar back591' da = das[label] da.pipe(wyplot, label=label, color=color, ls='-.', flip=True) label = '1%to4xCO2' ii += 1 color = f'C{ii}' da = das[label] da.pipe(wyplot, label=label, color=color, ls='-') label = '1%to4xCO2back' ii += 1 color = f'C{ii}' da = das[label] da.pipe(wyplot, label=label, color=color, ls='-') """ label = '1%to4xCO2new' ii += 1 color = f'C{ii}' da = das[label] da.pipe(wyplot, label=label, color=color, ls='-') """ ax.legend(ncol=3) ax.set_ylabel(f'{model} GMST anom [K], {nwindow}-{dimlp}-lp') ax.set_xlim(None, das['CTL'].time.dt.year.values[-1]+500*0) #ax.set_xlim(100, None) #ax.set_xscale('log') #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'_mirror.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()