#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Wed Apr 17 11:44:01 EDT 2024 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 #atlantic mask ifile = '/tigress/gvecchi/DATA/FOR_FLOR/atlantic.nc' mask = xr.open_dataset(ifile)['E551'].rename(GRIDLON_T='lon', GRIDLAT_T='lat') \ .pipe(lambda x: x.assign_coords(lat=x.lat.values+0.5)) #get the amoc model = 'FLOR' """ expname = 'CTL1860_newdiag_1-4-1xCO2_tigercpu_intelmpi_18_576P' years = range(2001, 2280+1) expname = 'CTL1860_newdiag_tigercpu_intelmpi_18_576PE' years = range(1, 3000+1) expname = 'CTL1990_v201905_tigercpu_intelmpi_18_576PE' years = range(1, 3000+1) expname = 'co2x4_CTL1860_tigercpu_intelmpi_18_576PE' years = range(101, 250+1) expname = 'co2xp25_CTL1860_tigercpu_intelmpi_18_576PE' years = range(101, 250+1) expname = 'p4p0sol_CTL1860_tigercpu_intelmpi_18_576PE' years = range(101, 400+1) expname = 'm4p0sol_CTL1860_tigercpu_intelmpi_18_576PE' years = range(101, 800+1) expname = 'p6p0sol_CTL1860_tigercpu_intelmpi_18_576PE' years = range(101, 600+1) expname = 'm6p0sol_CTL1860_tigercpu_intelmpi_18_576PE' years = range(101, 597+1) expname = 'co2x2_CTL1860_tigercpu_intelmpi_18_576PE' years = range(101, 600+1) expname = 'co2xp5_CTL1860_tigercpu_intelmpi_18_576PE' years = range(101, 600+1) expname = 'p2p0sol_CTL1860_tigercpu_intelmpi_18_576PE' years = range(101, 400+1) """ expname = 'm2p0sol_CTL1860_tigercpu_intelmpi_18_576PE' years = range(101, 400+1) ofile = f'amoc_{model}_{expname}_{years[0]}-{years[-1]}.nc' if os.path.exists(ofile): print('[exists]:', ofile) sys.exit() das = [] for year in years: ifile = f'/tigress/wenchang/MODEL_OUT/{expname}/POSTP/{year:04d}0101.ocean.nc' #ifile = f'/home/wenchang/tgScratch/wenchang/{model}/work/{expname}/POSTP/{year:04d}0101.ocean.nc' #data from workdir of scratch; for +-4% solar print(year, ifile) da = xr.open_dataset(ifile)['ty_trans'].load() \ .rename(st_ocean='depth', yu_ocean='lat', xt_ocean='lon') \ .pipe(lambda x: x.where(mask.assign_coords(lat=x.lat.values)>0)) \ .sum('lon', keep_attrs=True).cumsum('depth', keep_attrs=True) #.mean('time', keep_attrs=True) das.append(da) print('concat...') da = xr.concat(das, dim='time') #save da.to_dataset(name='ty_trans').to_netcdf(ofile, encoding={'ty_trans': {'zlib': True, 'complevel': 1}}) print('[saved]:', ofile) if __name__ == '__main__': from wyconfig import * #my plot settings da.groupby('time.year').mean('time', keep_attrs=True).max(['depth', 'lat'], keep_attrs=True) \ .plot() plt.title(f'AMOC from {model} {expname}.split("_tigercpu")[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) tt.check(f'**Done**') print() if 'notshowfig' in sys.argv or 'n' in sys.argv: pass else: if 'plt' in globals(): plt.show()