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)))
示例#2
0
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)
示例#3
0
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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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)
示例#9
0
    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'))
示例#10
0
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 = []
示例#12
0
        # 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))