#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Mon Oct 7 16:05:12 EDT 2024 if __name__ == '__main__': import sys,os try: from misc.timer import Timer tt = Timer(f'[{os.getcwd()}] start ' + ' '.join(sys.argv)) except: pass 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 import xlinregress from modelout.getdata import funcs # if __name__ == '__main__': try: tt.check('end import') except: pass # #start from here #nonFA EW ifile = '/tigress/wenchang/analysis/FLOR/ens/indexEW/t_surf_FLOR_HistRCP45_tigercpu_intelmpi_18_576PE_10ens_1860-2100_indexEW.nc' da = xr.open_dataarray(ifile).sel(time=slice('1970', '2020')).groupby('time.year').mean('time') rg = da.linregress.on(da.year, dim='year') rgEW0 = rg #NS 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).sel(time=slice('1970', '2020')).groupby('time.year').mean('time') rg = da.linregress.on(da.year, dim='year') rgNS0 = rg #wrap to dataset indexes0 = xr.Dataset(dict( EW=rgEW0.slope.pipe(lambda x: x*50).assign_attrs(units='K per 50 years', long_name='EW index'), NS=rgNS0.slope.pipe(lambda x: x*50).assign_attrs(units='K per 50 years', long_name='NS index') )) #FA EW ifiles = [glob.glob(f'/tigress/wenchang/analysis/active_monitor/indexEW/t_surf_FLOR_HistRCP45_FA_tigercpu_intelmpi_18_576PE_e{ii}_1860-????_indexEW.nc')[0] for ii in range(1,3+1)] das = [xr.open_dataarray(ifile).sel(time=slice('1970','2020')).groupby('time.year').mean('time') for ifile in ifiles] da = xr.concat(das, dim=pd.Index(range(1,3+1), name='ens')) rg = da.linregress.on(da.year, dim='year') rgEW_FA = rg #NS ifiles = [glob.glob(f'/tigress/wenchang/analysis/active_monitor/indexNS/t_surf_FLOR_HistRCP45_FA_tigercpu_intelmpi_18_576PE_e{ii}_1860-????_indexNS.nc')[0] for ii in range(1,3+1)] das = [xr.open_dataarray(ifile).sel(time=slice('1970','2020')).groupby('time.year').mean('time') for ifile in ifiles] da = xr.concat(das, dim=pd.Index(range(1,3+1), name='ens')) rg = da.linregress.on(da.year, dim='year') rgNS_FA = rg #wrap to dataset indexesFA = xr.Dataset(dict( EW=rgEW_FA.slope.pipe(lambda x: x*50).assign_attrs(units='K per 50 years', long_name='EW index'), NS=rgNS_FA.slope.pipe(lambda x: x*50).assign_attrs(units='K per 50 years', long_name='NS index') )) #HadISST ifile = '/tigress/wenchang/modelInput/HadISST/HadISST_sst.187001-202403.wy.nc' da = xr.open_dataarray(ifile).sel(time=slice('1970', '2020')).groupby('time.year').mean('time') #EW daEW = da.pipe(funcs['indexEW']) rg = daEW.linregress.on(daEW.year, dim='year') rgEW = rg #NS daNS = da.pipe(funcs['indexNS']) rg = daNS.linregress.on(daNS.year, dim='year') rgNS = rg #wrap indexesHadISST = xr.Dataset(dict( EW=rgEW.slope.pipe(lambda x: x*50).assign_attrs(units='K per 50 years', long_name='EW index'), NS=rgNS.slope.pipe(lambda x: x*50).assign_attrs(units='K per 50 years', long_name='NS index') )) #nonFA 2xCO2 EW ifile = glob.glob(f'/projects2/w/wenchang/analysis/active_monitor/indexEW/t_surf_FLOR_CTL1860_v202407_tigercpu_intelmpi_18_576PE_1901-????_indexEW.nc')[0] da = xr.open_dataarray(ifile).sel(time=slice('1951', '2050')).mean('time') da_ref = da ifile = '/projects2/w/wenchang/analysis/active_monitor/indexEW/t_surf_FLOR_CTL1860_v202407_2xCO2_tigercpu_intelmpi_18_576PE_2001-2200_indexEW.nc' da = xr.open_dataarray(ifile).sel(time=slice('2101', '2200')).mean('time') da = da - da_ref daEW = da #NS ifile = glob.glob(f'/projects2/w/wenchang/analysis/active_monitor/indexNS/t_surf_FLOR_CTL1860_v202407_tigercpu_intelmpi_18_576PE_1901-????_indexNS.nc')[0] da = xr.open_dataarray(ifile).sel(time=slice('1951', '2050')).mean('time') da_ref = da ifile = '/projects2/w/wenchang/analysis/active_monitor/indexNS/t_surf_FLOR_CTL1860_v202407_2xCO2_tigercpu_intelmpi_18_576PE_2001-2200_indexNS.nc' da = xr.open_dataarray(ifile).sel(time=slice('2101', '2200')).mean('time') da = da - da_ref daNS = da indexes2xCO2 = xr.Dataset(dict( EW=daEW.assign_attrs(units='K', long_name='EW index'), NS=daNS.assign_attrs(units='K', long_name='EW index') )) #FA 2xCO2 EW ifile = glob.glob(f'/projects2/w/wenchang/analysis/active_monitor/indexEW/t_surf_FLOR_CTL1860_v202407_FA_tigercpu_intelmpi_18_576PE_1901-????_indexEW.nc')[0] da = xr.open_dataarray(ifile).sel(time=slice('1951', '2050')).mean('time') da_ref = da ifile = '/projects2/w/wenchang/analysis/active_monitor/indexEW/t_surf_FLOR_CTL1860_v202407_FA_2xCO2_tigercpu_intelmpi_18_576PE_2001-2200_indexEW.nc' da = xr.open_dataarray(ifile).sel(time=slice('2101', '2200')).mean('time') da = da - da_ref daEW = da #NS ifile = glob.glob(f'/projects2/w/wenchang/analysis/active_monitor/indexNS/t_surf_FLOR_CTL1860_v202407_FA_tigercpu_intelmpi_18_576PE_1901-????_indexNS.nc')[0] da = xr.open_dataarray(ifile).sel(time=slice('1951', '2050')).mean('time') da_ref = da ifile = '/projects2/w/wenchang/analysis/active_monitor/indexNS/t_surf_FLOR_CTL1860_v202407_FA_2xCO2_tigercpu_intelmpi_18_576PE_2001-2200_indexNS.nc' da = xr.open_dataarray(ifile).sel(time=slice('2101', '2200')).mean('time') da = da - da_ref daNS = da indexes2xCO2FA = xr.Dataset(dict( EW=daEW.assign_attrs(units='K per 50 years', long_name='EW index'), NS=daNS.assign_attrs(units='K per 50 years', long_name='EW index') )) if __name__ == '__main__': from wyconfig import * #my plot settings fig,ax = plt.subplots(figsize=(6,4.5)) indexesHadISST.plot.scatter(x='EW', y='NS', ax=ax, label='HadISST', color='none', edgecolors='k') indexes2xCO2.plot.scatter(x='EW', y='NS', ax=ax, label='nonFA 2xCO2', color='none', edgecolors='C0', marker='^') indexes0.plot.scatter(x='EW', y='NS', ax=ax, label='nonFA', color='none', edgecolors='C0') indexes0.mean('ens', keep_attrs=True).plot.scatter(x='EW', y='NS', ax=ax, label='nonFA ensemble mean', color='C0') indexes2xCO2FA.plot.scatter(x='EW', y='NS', ax=ax, label='FA 2xCO2', color='none', edgecolors='C1', marker='^') indexesFA.plot.scatter(x='EW', y='NS', ax=ax, label='FA', color='none', edgecolors='C1') indexesFA.mean('ens', keep_attrs=True).plot.scatter(x='EW', y='NS', ax=ax, label='FA ens mean', color='C1') ax.legend() ax.axhline(0, ls='--', color='gray') ax.axvline(0, ls='--', color='gray') ax.set_title('FLOR EW vs NS indexes linear trends over 1970-2020') ax.set_xlim(-1.5, 1.5) ax.set_ylim(-0.6, 0.6) #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) try: tt.check(f'**Done**') except: pass print() if 'notshowfig' in sys.argv or 'n' in sys.argv: pass else: if 'plt' in globals(): plt.show()