#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Tue Oct 31 15:24:39 EDT 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 from misc.seasons import sel_season from misc.landmask import whereland # if __name__ == '__main__': tt.check('end import') # #start from here season = 'JAS' func_es = lambda T: 6.109*np.exp(17.625*T/(T+243.04)) #units: hPa func_vpd = lambda es,rh: es*(1-rh/100) ifile = 't_ref_AM2.5C360_amipHadISSTrcp45_tigercpu_intelmpi_18_1080PE_ens06_1980-2020_atmos_daily.region.230_270_20_50.nc' print('loading...', ifile) da = xr.open_dataarray(ifile).load().pipe(sel_season, season) da = (da - 273.15).assign_attrs(units='decC') #K to C T = da ifile = 'rh_ref_AM2.5C360_amipHadISSTrcp45_tigercpu_intelmpi_18_1080PE_ens06_1980-2020_atmos_daily.region.230_270_20_50.nc' print('loading...', ifile) da = xr.open_dataarray(ifile).load().pipe(sel_season, season) RH = da print('es...', ifile) es = func_es(T).assign_attrs(units='hPa') print('vpd...', ifile) es = func_es(T).assign_attrs(units='hPa') vpd = func_vpd(es, RH).assign_attrs(units='hPa') vpd_1980to2019 = vpd.sel(time=slice('1980', '2019')).mean('time', keep_attrs=True) vpd_diff = vpd.sel(time=slice('2010', '2019')).mean('time') - vpd.sel(time=slice('1980', '1999')).mean('time') vpd_diff.attrs['units'] = 'hPa' if __name__ == '__main__': from wyconfig import * #my plot settings from geoplots import mapplot figsize = 4.5,4 fig,ax = plt.subplots(figsize=figsize) da = vpd_1980to2019.pipe(whereland) da.plot(ax=ax, levels=np.arange(0, 51, 10), cmap='YlOrBr') mapplot(ax=ax) ax.set_title('AM2.5C360 JAS VPD, 1980-2019,\n ens06') ax.set_xlabel('') ax.set_ylabel('') ax.set_xlim(360-125, 360-95) ax.set_ylim(25, 50) #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) fig,ax = plt.subplots(figsize=figsize) da = vpd_diff.pipe(whereland) da.plot(ax=ax, levels=np.arange(-6, 6.1, 2), cmap='Spectral_r', extend='both') mapplot(ax=ax) ax.set_title('AM2.5C360 JAS VPD diff,\n 2010-2019 minus 1980-1999, ens06') ax.set_xlabel('') ax.set_ylabel('') ax.set_xlim(360-125, 360-95) ax.set_ylim(25, 50) #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'__diff.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()