#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Thu Mar 9 16:56:46 EST 2023 if __name__ == '__main__': import sys,os from misc.timer import Timer tt = Timer(f'[{os.getcwd()}] 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 wython = '/tigress/wenchang/wython' if wython not in sys.path: sys.path.append(wython); print('added to python path:', wython) #from misc import get_kws_from_argv # if __name__ == '__main__': tt.check('end import') # #start from here model = 'AM2.1' expname = 'amip_rmWarming' #years_ref = slice(1981,2010) #years_ref = slice(850,1850) years_ref = slice(1871,1900) #ifile = 'rrvco2_AM2.1p1_amipHadISSTchancorr_ens_tigercpu_intelmpi_18_30PE_5ens_1871-2020_atmos_scalar.nc' #ifile = 'precip_AM2.1p1_amipHadISSTchancorr_ens_tigercpu_intelmpi_18_30PE_5ens_1871-2020_glbmean.nc' #ifile = 'precip_AM2.1p1_amipLMR2019SST0850_ens_tigercpu_intelmpi_18_30PE_5ens_0850-1999_glbmean.nc' ifile = 'precip_AM2.1p1_amipHadISSTchancorr_rmWarming_ens_tigercpu_intelmpi_18_30PE_5ens_1871-2020_glbmean.nc' da = xr.open_dataarray(ifile) da = da.mean('ens').groupby('time.year').mean('time') da = da/da.sel(year=years_ref).mean('year')*100 -100 da.attrs['units'] = '%' precip = da #da.plot() #gmst #ifile = 't_surf_AM2.1p1_amipHadISSTchancorr_ens_tigercpu_intelmpi_18_30PE_5ens_1871-2020_glbmean.nc' #ifile = 't_surf_AM2.1p1_amipLMR2019SST0850_ens_tigercpu_intelmpi_18_30PE_5ens_0850-1999_glbmean.nc' ifile = 't_surf_AM2.1p1_amipHadISSTchancorr_rmWarming_ens_tigercpu_intelmpi_18_30PE_5ens_1871-2020_glbmean.nc' da = xr.open_dataarray(ifile) da = da.mean('ens').groupby('time.year').mean('time') da = da - da.sel(year=years_ref).mean('year') da.attrs['units'] = 'K' gmsta = da b_gmst = 2.63 #% per K #plt.figure(); da.plot() """ #co2 ifile = 'rrvco2_AM2.1p1_amipHadISSTchancorr_ens_tigercpu_intelmpi_18_30PE_5ens_1871-2020_atmos_scalar.nc' da = xr.open_dataarray(ifile).squeeze(drop=True).pipe(np.log2) da = da.mean('ens').groupby('time.year').mean('time') da = da - da.sel(year=years_ref).mean('year') da.attrs['units'] = '2xCO2 forcing' fco2 = da b_co2 = -2.40 #% per 2xCO2 #plt.figure(); da.plot() """ if __name__ == '__main__': from wyconfig import * #my plot settings func_lp = lambda da: da.rolling(year=31, center=True, min_periods=1).mean() fig,ax = plt.subplots() alpha = 0.3 #precip color = 'k' da = precip da.plot(color=color, alpha=alpha) da.pipe(func_lp).plot(label=f'{model} {expname} 5ens glbmean precip', color=color) y = da #modeled precip ii = 0; color = f'C{ii}' da = b_gmst * gmsta #+ b_co2 * fco2 da.plot(color=color, alpha=alpha) da.pipe(func_lp).plot(label='precip from gmsta', color=color) y_hat = da """ ls = '--' #gmsta only ii += 1; color = f'C{ii}' da = b_gmst * gmsta da.plot(color=color, alpha=alpha) da.pipe(func_lp).plot(label='gmsta only', color=color, ls=ls) #co2 only ii += 1; color = f'C{ii}' da = b_co2 * fco2 #da.plot(color=color, alpha=alpha) da.pipe(func_lp).plot(label='co2 only', color=color, ls=ls) #residual ii += 1; color = f'C{ii}' #da = precip - (b_gmst * gmsta + b_co2 * fco2) da = precip - (b_gmst * gmsta) da.plot(color=color, alpha=alpha) da.pipe(func_lp).plot(label='residual', color=color, ls=ls) """ ax.legend() ax.set_ylabel(f'% of {years_ref.start}-{years_ref.stop} annual clim') import xlinregress reg = y.linregress.on(gmsta, dim='year') print(reg) #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) tt.check(f'**Done**') print() if 'notshowfig' in sys.argv or 'n' in sys.argv: pass else: if 'plt' in globals(): plt.show()