fluxes = dict() fluxnames = ['mshf', 'mpef', 'mlhf'] fluxlongnames = ['Sensible Heat', 'Potential Energy', 'Latent Heat'] factors = [cp/g, 1., L/g] vars = dict() varnames = ['hus', 'ta', 'va', 'zg'] fils = ['lcs0_day_1988_{}.nc'.format(varna) for varna in varnames] for varna, fi in zip(varnames, fils): var, level, lat, lon, dates, time_units, var_units, time_cal = ctl.read4Dncfield(cart_in+fi) var, okda = ctl.sel_season(var, dates, 'Feb') vars[varna] = var press0, latdad, londsad, datespress, time_units, var_units = ctl.read3Dncfield(cart_in+'lcs0_day_1988_ps.nc') press0, _ = ctl.sel_season(press0, datespress, 'Feb') press0 = np.mean(press0, axis = 0) mshf = factors[0]*vars['va']*vars['ta'] mpef = vars['va']*vars['zg'] mlhf = factors[2]*vars['va']*vars['hus'] mshf = np.mean(mshf, axis = 0) mpef = np.mean(mpef, axis = 0) mlhf = np.mean(mlhf, axis = 0) mshfint = np.zeros(mshf.shape[1:]) mpefint = np.zeros(mpef.shape[1:]) mlhfint = np.zeros(mlhf.shape[1:]) print(mshf.shape)
axis=0) era_fluxes_maps[(flun, 'year')] = np.mean(vars[eraname[flun]], axis=0) for fu in era_fluxes_maps: era_fluxes_zonal[fu] = np.mean(era_fluxes_maps[fu], axis=1) * era_zonal_factor ###### print('Is it the first level???\n') tag = 'ERAwith1000' file_list = cart_in + 'all_vtgq_1988_6hrs.nc' factors = {'SH': cp / g, 'PE': 1., 'LH': L / g} #factors['PE'] = 1./g press0row, latdad, londsad, datespress, time_units, var_units = ctl.read3Dncfield( file_ps) pressok = press0row[1] flux_levels = dict() v, level, lat, lon, dates, time_units, var_units, time_cal = ctl.readxDncfield( file_list, select_var=['v']) t, level, lat, lon, dates, time_units, var_units, time_cal = ctl.readxDncfield( file_list, select_var=['t']) mshf = factors['SH'] * v['v'] * t['t'] flux_levels['SH'] = np.mean(mshf, axis=0) del t, mshf z, level, lat, lon, dates, time_units, var_units, time_cal = ctl.readxDncfield( file_list, select_var=['z']) mpef = factors['PE'] * v['v'] * z['z']
# ensmemsall = ensmems['a']+ensmems['f'] # nunams = ['base_hist', 'stoc_hist', 'base_fut', 'stoc_fut'] # expnams = ['lab', 'las', 'lfb', 'lfs'] # # for varna in varnames+nuvars: # for nunam, expnam in zip(nunams, expnams): # radclim[('global', nunam, varna)] = np.mean([radclim[('global', exp, varna)] for exp in ensmemsall if expnam in exp], axis = 0) # # for varna in ['heat_flux', 'toa_balance', 'surf_balance']: # for nunam, expnam in zip(nunams, expnams): # radclim[('zonal', nunam, varna)] = np.mean([radclim[('zonal', exp, varna)] for exp in ensmemsall if expnam in exp], axis = 0) # # pickle.dump(radclim, open(cart_out+'radclim_yearly_AMIP.p', 'wb')) radclim = pickle.load(open(cart_out + 'radclim_yearly_AMIP.p')) varniuu, lat, lon, dates, time_units, var_units = ctl.read3Dncfield( cart_in + namefi.format('lab0', 1988, 'rsut')) del varniuu carttemp = '/data-hobbes/fabiano/SPHINX/AMIP/tas_mon/' # globalme = dict() # varna = 'tas' # # tempnames = dict() # tempnames['a'] = '{}_mon_1979-2008_tas.nc' # tempnames['f'] = '{}_mon_2038-2068_tas.nc' # for lett in ['a','f']: # for ens in ensmems[lett]: # filena = carttemp+tempnames[lett].format(ens) # var, lata, lona, dates, time_units, var_units = ctl.read3Dncfield(filena) # varye, _ = ctl.yearly_average(var, dates) # global_mean = ctl.global_mean(varye, lata)
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) yearly_anom = yearly_anom - climat_year zonal_anom = ctl.zonal_mean(yearly_anom) global_anom = ctl.global_mean(yearly_anom, lat)
figures_all = [] zonal_margins = dict() zonal_margins['tot'] = (-3.5e16, 4.5e16) zonal_margins['mshf'] = (-3.5e16, 4.5e16) zonal_margins['mpef'] = (-3.5e16, 4.5e16) zonal_margins['mlhf'] = (-7e15, 9.e15) map_margins = dict() map_margins['mshf'] = (-1.5e10, 1.5e10) map_margins['mpef'] = (-4.e9, 4.e9) map_margins['mlhf'] = (-7.e8, 7.e8) map_margins['tot'] = (-2.e10, 2.e10) # Loading reference pressure file pressurefile = '/data-hobbes/fabiano/SPHINX/heat_flux/1988_daily/lcs0_day_1988_ps.nc' press0row, lat, lon, datespress, time_units, var_units = ctl.read3Dncfield( pressurefile) press0 = dict() press0['DJF'] = np.mean(ctl.sel_season(press0row, datespress, 'DJF', cut=False)[0], axis=0) press0['JJA'] = np.mean(ctl.sel_season(press0row, datespress, 'JJA', cut=False)[0], axis=0) press0['year'] = np.mean(press0row, axis=0) # Loading ERA reference cart_era = '/data-hobbes/fabiano/OBS/ERA/ERAInterim/' era_fi = 'prova_heatflux_1988_MM.nc' cpc = nc.Dataset(cart_era + era_fi) era_lat = cpc.variables['latitude'][:] era_lon = cpc.variables['longitude'][:]
#!/usr/bin/python # -*- coding: utf-8 -*- import sys import netCDF4 as nc import climtools_lib as ctl import pandas as pd import numpy as np from matplotlib import pyplot as plt plt.ion() sys.exit() filename = '/data-hobbes/fabiano/SPHINX/zg_daily/ridottone.nc' var_day, lat_day, lon_day, dates_day, time_units, var_units = ctl.read3Dncfield( filename) dates_pdh_day = pd.to_datetime(dates_day) filename = '/data-hobbes/fabiano/SPHINX/tas_mon/ridotto.nc' var_mon, lat_mon, lon_mon, dates_mon, time_units, var_units = ctl.read3Dncfield( filename) dates_pdh_mon = pd.to_datetime(dates_mon)
varnames = ['hcc', 'lcc', 'mcc', 'tcw'] namefi = '{}_mon_{}_{}.nc' ann = np.arange(1979, 2008, 6) annme = [(a1 + a2) // 2 for a1, a2 in zip(ann[:-1], ann[1:])] print(annme) radclim = dict() ensmems = ['labm', 'lasm'] for exp in ensmems: for a1, a2 in zip(ann[:-1], ann[1:]): am = (a2 + a1) / 2 vardict = dict() for year in range(a1 + 1, a2 + 1): for varna in varnames: varniuu, lat, lon, dates, time_units, var_units = ctl.read3Dncfield( cart_in + namefi.format(exp, year, varna)) if year == a1 + 1: vardict[varna] = [np.mean(varniuu, axis=0)] else: vardict[varna].append(np.mean(varniuu, axis=0)) for varna in varnames: vardict[varna] = np.stack(vardict[varna]) for key in vardict: print(vardict[key].shape) radclim[(exp, 'map', key, am)] = np.mean(vardict[key], axis=0) radclim[(exp, 'map_std', key, am)] = np.std(vardict[key], axis=0) radclim[(exp, 'zonal', key, am)] = np.mean(radclim[(exp, 'map', key, am)], axis=-1)
expnames = ['lcb0', 'lcb1', 'lcb2', 'lcs0', 'lcs1', 'lcs2'] varnames = ['mshf', 'mpef', 'mlhf'] fluxnames = ['Sensible Heat', 'Potential Energy', 'Latent Heat'] factors = [-cp / g, -1., -L / g] yearsall = np.arange(1950, 2101) all_fluxes_yrl = dict() monthly_clim_hist = dict() monthly_clim_fut = dict() for exp in expnames: for varna, flun, fac in zip(varnames, fluxnames, factors): # 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))