#!/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 misc import get_kws_from_argv import xfilter nwindow, dimlp = 12*1, 'time' lowpass = lambda x: x.filter.lowpass(1/nwindow, dim=dimlp, padtype=None) #lowpass = lambda x: x.filter.lowpass(1/nwindow, dim=dimlp, method='gust') #lowpass = lambda x: x.rolling(year=nwindow, center=True, min_periods=1).mean() if x.year.size>9 else x import geoxarray # if __name__ == '__main__': tt.check('end import') # #start from here #daname = 't_surf' from modelout.getdata import funcs daname = get_kws_from_argv('daname','qo3_col') # 'blk_crb_col') #qo3_col funcname = get_kws_from_argv('funcname', 'glbmean') #func = lambda x: x.load().geo.fldmean() func = funcs[funcname] dsname = 'atmos_month' if daname in ('blk_crb_col'): dsname = 'atmos_month_aer' model = 'AM4.1' """ expname = 'CTL1850_tiger3_intel24ifort_openmpi_1536PE' da = update_modelout_data(daname=daname, model=model, expname=expname, dsname=dsname, func=func, funcname=funcname, odir='../SRM/CTL')#, years=range(100,201)) da_ctl1850 = da """ expname = 'CTL1990_tiger3_intel24ifort_openmpi_1536PE' da = update_modelout_data(daname=daname, model=model, expname=expname, dsname=dsname, func=func, funcname=funcname, odir='CTL')#, years=range(100,201)) da_ctl1990 = da units = da.attrs['units'] expname = 'CTL1990v202604_tiger3_intel24ifort_openmpi_1536PE' da = update_modelout_data(daname=daname, model=model, expname=expname, dsname=dsname, func=func, funcname=funcname, odir='CTL')#, years=range(100,201)) da_ctl1990v202604 = da #expname = 'CTL1990v202604_volc1991_tiger3_intel24ifort_openmpi_1536PE' #da = update_modelout_data(daname=daname, model=model, expname=expname, dsname=dsname, func=func, funcname=funcname, odir='CTL')#, years=range(100,201)) #da_ctl1990v202604_volc1991 = da expname = 'CTL1990v202604v2_tiger3_intel24ifort_openmpi_1536PE' da = update_modelout_data(daname=daname, model=model, expname=expname, dsname=dsname, func=func, funcname=funcname, odir='CTL')#, years=range(100,201)) da_ctl1990v202604v2 = da das = []; labels = [] # for yy in range(11, 100, 2): ifile = f'/scratch/gpfs/GEOCLIM/wenchang/tiger3/AM4.1/work/CTL1990_BC_L2_Y{yy:04d}_tiger3_intel24ifort_openmpi_1536PE/POSTP/{yy+1:04d}0101.atmos_month.nc' if yy == 11 or os.path.exists(ifile): #experiment available expname = f'CTL1990_BC_L2_Y{yy:04d}_tiger3_intel24ifort_openmpi_1536PE' da = update_modelout_data(daname=daname, model=model, expname=expname, dsname=dsname, func=func, funcname=funcname)#, odir='BC_lat0_L6_Y0011plus') #das.append(da.sel(time=slice(f'{yy:04d}', f'{yy+1:04d}')).drop('time')) #sel two years das.append(da) labels.append(expname.split("_tiger3")[0]) else: continue N = len(das) #da_ens = xr.concat(das, dim=pd.Index(range(1, N+1), name='ens')) #da_ens['time'] = da_ctl1990.sel(time=slice('0001', '0002')).time #print(da_ens); sys.exit() """ #ctl ens das = [] for yy in range(11, 11+N*2, 2): da = da_ctl1990.sel(time=slice(f'{yy:04d}', f'{yy+1:04d}')).drop('time') das.append(da) da_ctl1990_ens = xr.concat(das, dim=pd.Index(range(1, N+1), name='ens')) da_ctl1990_ens['time'] = da_ctl1990.sel(time=slice('0001', '0002')).time #print(da_ctl1990_ens); sys.exit() # daa_ens = da_ens - da_ctl1990_ens da_ref = da_ctl1990_ens.groupby('time.month').mean(['time', 'ens']) if daname in ('blk_crb_col',): daa_ens = (daa_ens*0.51e6).assign_attrs(units='Tg') da_ref = (da_ref*0.51e6).assign_attrs(units='Tg') else: daa_ens.attrs['units'] = units da_ref.attrs['units'] = units """ if __name__ == '__main__': from wyconfig import * #my plot settings #ctl fig,ax = plt.subplots()#figsize=(8,4)) with xr.set_options(keep_attrs=True): if daname in ('blk_crb_col',): da_ctl1990 = (da_ctl1990*0.51e6).assign_attrs(units='Tg', long_name='BC') units = 'Tg' da = da_ctl1990 da.plot(color='k', label='CTL1990') da = da_ctl1990v202604 da.plot(color='C0', label='CTL1990v202604') #da = da_ctl1990v202604_volc1991 #da.plot(color='C1', label='CTL1990v202604_volc1991') da = da_ctl1990v202604v2 da.plot(color='C1', label='CTL1990v202604v2') colors = plt.colormaps['turbo'](np.linspace(0.1, 0.9, N)) for da_bc,label,color in zip(das, labels, colors): da = da_bc if daname in ('blk_crb_col',): da = (da*0.51e6).assign_attrs(units='Tg', long_name='BC') da.plot(color=color, ls='-') title = f'{model} {funcname} {daname}' ax.set_title(title) #ax.legend(loc='upper left', bbox_to_anchor=(1,1)) ax.legend() ax.set_xlim(None, da_ctl1990.time[(10+N*2+10)*12].item()) if daname in ('blk_crb_col',): ax.set_ylim(0,None) if daname in ('blk_crb_col', 'qo3_col'): mean = da_ctl1990.sel(time=slice('0011', None)).mean('time').item() ax.axhline(mean, color='k', ls='--') ax.text(da_ctl1990.time[0].item(), mean, f'\n{mean:.3g}{units}', va='bottom', ha='right') #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'__{daname}_{funcname}.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()