ax.set_ylabel('EOF {}'.format(cou[1])) ax.legend() plt.suptitle('Regime {} - {}'.format(reg, nomecoso)) figs.append(fig) fig.savefig(cart_out + 'regime{}_pdf_proj{}.pdf'.format(reg, filter_tag)) ctl.plot_pdfpages(cart_out + 'ERApre1988_vs_post{}.pdf'.format(filter_tag), figs) sys.exit() pcs_ref_1, dates1 = ctl.sel_time_range(results_ref['pcs'], results_ref['dates'], ctl.range_years(1957, 1987)) pcs_ref_2, dates2 = ctl.sel_time_range(results_ref['pcs'], results_ref['dates'], ctl.range_years(1988, 2018)) lab_ref_1, dates1 = ctl.sel_time_range(nulabs_ref, results_ref['dates'], ctl.range_years(1957, 1987)) lab_ref_2, dates2 = ctl.sel_time_range(nulabs_ref, results_ref['dates'], ctl.range_years(1988, 2018)) for reg in range(4): figs = [] print(reg) extra1 = (lab_ref_1 != reg) & (nulabs_1 == reg) extra2 = (lab_ref_2 != reg) & (nulabs_2 == reg) print('Extra in series 1: {} of {}\n'.format(np.sum(extra1), np.sum(lab_ref_1 == reg)))
import numpy as np from numpy import linalg as LA from matplotlib import pyplot as plt from matplotlib import colors as mpl_colors from matplotlib import cm import pickle import matplotlib.animation as animation from matplotlib.animation import ImageMagickFileWriter import cartopy.crs as ccrs #cart = '/home/fabiano/Research/lavori/SPHINX_for_lisboa/' cart = '/home/fedefab/Scrivania/Research/Post-doc/SPHINX/' ref_period = ctl.range_years(1850, 1900) filena = 'lcb0-1850-2100-tas_mon.nc' var, lat, lon, dates, time_units, var_units = ctl.read3Dncfield(cart + filena) dates_pdh = pd.to_datetime(dates) # Global stuff global_mean = ctl.global_mean(var, lat) zonal_mean = ctl.zonal_mean(var) climat_mon, dates_mon, climat_std = ctl.monthly_climatology( var, dates, dates_range=ref_period) climat_year = np.mean(climat_mon, axis=0) yearly_anom, years = ctl.yearly_average(var, dates)
ctl.mkdir(cart_out) ref_file = '/data-hobbes/fabiano/CMIP6/zg_day_EC-Earth3_ssp585_r4i1p1f1_gr_201501-210012_r25_rc.nc' modnam = 'EC-Earth3P' yearange = (2015, 2100) cbar_range = [0., 3.] cbar_range_notr = [-1, 1] ############################################################################# var, coords, aux_info = ctl.read_iris_nc(ref_file, extract_level_hPa=500) lat = coords['lat'] lon = coords['lon'] dates = coords['dates'] var, dates = ctl.sel_time_range(var, dates, ctl.range_years(yearange[0], yearange[1])) var_set, dates_set = ctl.seasonal_set(var, dates, 'DJF', seasonal_average=True) years = np.array([da.year for da in dates_set]) ############## PLOT GLOBAL TRENDS ###################### fig, ax = plt.subplots() glob_mea = ctl.global_mean(var_set, lat) g0 = glob_mea[0] m, c = ctl.linear_regre(years, glob_mea) ax.scatter(years, glob_mea - g0, label='Global', color='blue') ax.plot(years, c + m * years - g0, color='blue') var_area, lat_area, lon_area = ctl.sel_area(lat, lon, var_set, 'EAT') eat_mea = ctl.global_mean(var_area, lat_area)
file_in = '/data-hobbes/fabiano/OBS/ERA/ERA40+Int_daily_1957-2018_zg500_remap25_meters.nc' #var, coords, aux_info = ctl.read_iris_nc(file_in, extract_level_hPa = 500) var, coords, aux_info = ctl.readxDncfield(file_in, extract_level=500) lat = coords['lat'] lon = coords['lon'] dates = coords['dates'] mean_field_all['ERA'], lowfrvar['ERA'], highfrvar['ERA'], stat_eddy_all[ 'ERA'] = ctl.variability_lowhi(lat, lon, var, dates, season, area=area, dates_range=ctl.range_years(1957, 2014)) cart_in = '/data-hobbes/fabiano/PRIMAVERA/incoming/hist-1950/' flist = cart_in + 'lista_filez_v7.dat' fi = open(flist, 'r') lista_files = [lin.rstrip() for lin in fi.readlines()] fi.close() #mean_RMSbias_all = dict() for filo in lista_files: metadata = ctl.cmip6_naming(filo) mod_name = metadata['model'] + '_' + metadata['member'] #var, coords, aux_info = ctl.read_iris_nc(file_in, extract_level_hPa = 500) var, coords, aux_info = ctl.readxDncfield(cart_in + filo, extract_level=500)
li.rstrip() for li in open(cart_mods + 'listamods', 'r').readlines() ] mean_field_all = dict() lowfrvar = dict() highfrvar = dict() stat_eddy_all = dict() file_in = '/data-hobbes/fabiano/OBS/ERA/ERA40+Int_daily_1957-2018_zg500_remap25_meters.nc' var, coords, aux_info = ctl.read_iris_nc(file_in, extract_level_hPa=500) lat = coords['lat'] lon = coords['lon'] dates = coords['dates'] var, dates = ctl.sel_time_range(var, dates, ctl.range_years(1979, 2014)) mean_field, _ = ctl.seasonal_climatology(var, dates, season) var_anoms = ctl.anomalies_daily_detrended(var, dates) # LOW FREQ VARIABILITY #var_low = ctl.running_mean(var_anoms, 5) var_low = ctl.lowpass_lanczos(var_anoms, 6) var_low_DJF, dates_DJF = ctl.sel_season(var_low, dates, season) lowfr_variab = np.std(var_low_DJF, axis=0) lowfr_variab_zonal = ctl.zonal_mean(lowfr_variab) # High freq var_high = var_anoms - var_low var_high_DJF, dates_DJF = ctl.sel_season(var_high, dates, season)
if varnam == 'tas': ifile = cart + '1950-2160-tas-monthly_remap25_rechunk.nc' var, lat, lon, dates, time_units, var_units, time_cal = ctl.readxDncfield( ifile) print(var.keys()) weights = abs(np.cos(np.deg2rad(lat))) # var, coords, aux_info = ctl.read_iris_nc(ifile) # lat = coords['lat'] # lon = coords['lon'] # dates = coords['dates'] for ens in ens_mem: # zonal mean for season in ['year', 'DJF', 'JJA']: var_pre, dates_pre = ctl.sel_time_range( var[ens], dates, ctl.range_years(2085, 2095)) var_pre_seas, _ = ctl.seasonal_climatology(var_pre, dates_pre, season) var_zon = ctl.zonal_mean(var_pre_seas) var_zon_wcos = weights * var_zon fields[(varnam, ens, 'pre', season, 'zonal')] = var_zon fields[(varnam, ens, 'pre', season, 'zonal_wcos')] = var_zon_wcos var_pre, dates_pre = ctl.sel_time_range( var[ens], dates, ctl.range_years(2110, 2120)) var_pre_seas, _ = ctl.seasonal_climatology(var_pre, dates_pre, season) var_zon = ctl.zonal_mean(var_pre_seas)
okmods = [cos for cos in results_hist.keys() if cos in results_ssp.keys()] print(okmods) print(len(okmods)) print('BAUUUUUUUUUUUUUUUUUUUUUUUUU') ## plots runfreq = dict() seasfreq = dict() fig = plt.figure(figsize=(16, 12)) for reg in range(4): ax = fig.add_subplot(2, 2, reg + 1) cosi = [] for mem in okmods: labok, datok = ctl.sel_time_range(results_hist[mem]['labels'], results_hist[mem]['dates'], ctl.range_years(yr0, yr1)) seasfr, yr = ctl.calc_seasonal_clus_freq(labok, datok, numclus) seasfreq[('hist_cmip5', mem, reg)] = seasfr[reg, :] seas20 = np.array(ctl.running_mean(seasfr[reg, :], 20)) print(mem, len(seas20)) if len(seas20) == len(yr): ax.plot(yr, seas20) cosi.append(seas20) else: print(mem, len(seas20), 'too short') coso = np.mean(cosi, axis=0) runfreq[('hist_cmip5', reg)] = coso ax.plot(yr, coso, color='black', linewidth=3) ax.set_title(reg_names_area[area][reg]) fig.savefig(cart_out + 'models_run20_{}_hist.pdf'.format(area))
results_refEOF, results_ref = pickle.load(open(filogen, 'rb')) results_refEOF['ERA'] = results_ref ################################################################## cart_sst = '/data-woodstock/PRIMAVERA/stream1/merged/tos/' filsst = 'tos-{}-1950-2014-{}-remap.nc' #cart_sst = '/nas/PRIMAVERA/Stream1/hist-1950/{}/{}/tos/' filera = '/nas/reference/ERA40+Int/sst_Amon_ERA40_195701-201812_1deg.nc' sstera, datacoords, _ = ctl.readxDncfield(filera) datesera = datacoords['dates'] lat = datacoords['lat'] lon = datacoords['lon'] sstera = sstera - 273.15 sstera_mean, sstera_sd = ctl.seasonal_climatology(sstera, datesera, 'DJF', dates_range = ctl.range_years(1957, 2014)) area_box = (-80, 10, 20, 80) sstera_mean_area, latsel, lonsel = ctl.sel_area(lat, lon, sstera_mean, area_box) okpoera = (sstera_mean_area < -100) | (sstera_mean_area > 500) allcose = dict() allrms = dict() allpatcor = dict() #for mod, mem in zip(model_names, ens_mems): for mod in model_names: print(mod) filmod_part = 'tos-{}-1950-2014-'.format(mod) if 'AWI' in mod: filmod_part = 'tos-{}-1950-2010-'.format(mod)
zg_noglob_zonme = ctl.zonal_mean(zg_noglob) zg_se = zg_noglob - zg_noglob_zonme[..., np.newaxis] se_trend, se_errtrend, _, _ = ctl.local_lineartrend_climate( lat, lon, zg_se, dates, None) try: zghist, coords, _ = ctl.readxDncfield(cartmon_hist + filhist.format(mod)) lat = coords['lat'] lon = coords['lon'] dates = coords['dates'] zgmean, zgstd = ctl.seasonal_climatology(zghist, dates, season, dates_range=ctl.range_years( 1964, 2014)) cose[('hist mean', mod)] = zgmean cose[('hist std', mod)] = zgstd except: print('passsssss ' + mod) pass cose[('trend', mod)] = trend cose[('errtrend', mod)] = errtrend cose[('se_trend', mod)] = se_trend cose[('se_errtrend', mod)] = se_errtrend cose[('zontrend', mod)] = zontrend cose[('zonerrtrend', mod)] = zonerrtrend pickle.dump(cose, open(cart_out_orig + 'zgtrends_ssp585.p', 'wb'))
def dopdf(var, xi, bnd_width): pdf = ctl.calc_pdf(var, bnd_width=bnd_width) pdfok = pdf(xi) pdfok /= np.sum(pdfok) return pdfok for ru, col in zip(allru, colors): jli = resdict[(ru, 'jli')] jspeed = resdict[(ru, 'jspeed')] if ru == 'ho03': jli, _ = ctl.sel_time_range(jli, resdict[(ru, 'dates')], ctl.range_years(1860, 1880), ignore_HHMM=False) jspeed, _ = ctl.sel_time_range(jspeed, resdict[(ru, 'dates')], ctl.range_years(1860, 1880), ignore_HHMM=False) elif ru == 'pi': jliserie = ctl.bootstrap(jli, resdict[(ru, 'dates')], None, apply_func=dopdf, func_args=[latsel, 0.22], n_choice=20, n_bootstrap=1000) jspedserie = ctl.bootstrap(jspeed, resdict[(ru, 'dates')],
modok = 'AWI-CM-1-0-LR' else: modok = 'AWI-CM-1-0-HR' amv_ref, dates = read_file_index( file_mod.format(modok, mem, sedat)) else: sedat = '1950-2014' y2 = 2014 amv_ref, dates = read_file_index( file_mod.format(mod, mem, sedat)) except FileNotFoundError: print('NOT FOUND!!!') continue amv_ref, dates = ctl.sel_time_range(amv_ref, dates, ctl.range_years(1957, y2 - 1)) # Yearly amv index amv_ref_yr, yrdates = ctl.yearly_average(amv_ref, dates) amv_ref_yr = np.squeeze(amv_ref_yr) if len(amv_ref_yr) < y2 - 1957: for ye in range(1957, y2): if ye not in [da.year for da in yrdates]: print('Missing {}'.format(ye)) continue # amv_ref_djf, dates_djf = ctl.sel_season(amv_ref, dates, seas) # amv_ref_djf = np.squeeze(amv_ref_djf) amv_nyr = np.array(ctl.running_mean(amv_ref_yr, n_yr)) amvc = amv_nyr[~np.isnan(amv_nyr)] fig_all = plt.figure(figsize=(16, 12)) ax_all = []
# leggi da file e salva in dict fil = cart_in + '{}_{}_1950-2100.nc'.format(exp, varna) print(fil) var, lat, lon, dates, time_units, var_units = ctl.read3Dncfield(fil) yearsok = np.unique(pd.to_datetime(dates).year) for y in yearsall: if y not in yearsok: print('{} {} - {} missing\n'.format(exp, varna, y)) varfac = var * fac all_fluxes_yrl[(exp, varna)], yrl_dates = ctl.yearly_average(varfac, dates) monthly_clim_hist[(exp, varna)], mon_dates, _ = ctl.monthly_climatology( varfac, dates, dates_range=ctl.range_years(1950, 2025)) monthly_clim_fut[(exp, varna)], mon_dates, _ = ctl.monthly_climatology( varfac, dates, dates_range=ctl.range_years(2026, 2100)) all_fluxes_yrl[(exp, 'all')] = np.sum(np.stack( [all_fluxes_yrl[cos] for cos in all_fluxes_yrl.keys() if exp in cos]), axis=0) varnames.append('all') fluxnames.append('Total') map_means = dict() zonal_ints = dict() zonal_factor = 2 * np.pi * Rearth * np.cos(np.deg2rad(lat))