0.25, dim='dim_0', interpolation='linear') index_monthly_normal = np.logical_and( PV.PV_mon < PV.PV_mon.quantile(0.75, dim='dim_0', interpolation='linear'), PV.PV_mon > PV.PV_mon.quantile(0.25, dim='dim_0', interpolation='linear')) for i in np.arange(0, 4): var_neg = np.mean( ds.z.values[i, index_monthly_upper.values, :, :], axis=0) - np.mean( ds.z.values[i, index_monthly_normal.values, :, :], axis=0) var_pos = np.mean( ds.z.values[i, index_monthly_lower.values, :, :], axis=0) - np.mean( ds.z.values[i, index_monthly_normal.values, :, :], axis=0) px_neg, py_neg, lat = plumb_flux.ComputePlumbFluxes( winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], np.mean(ds.z.values[i, index_monthly_upper.values, :, :], axis=0), np.mean(ds.z.values[i, index_monthly_normal.values, :, :], axis=0), ds.latitude.values, ds.longitude.values) px_pos, py_pos, lat = plumb_flux.ComputePlumbFluxes( winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], np.mean(ds.z.values[i, index_monthly_lower.values, :, :], axis=0), np.mean(ds.z.values[i, index_monthly_normal.values, :, :], axis=0), ds.latitude.values, ds.longitude.values) tit = 'Composites S4 Plumb Fluxes 200hPa - ' + month[i] filename = './figures/hgt_200_plumb_composites_PV_' + month[i] + '.png' plots.PlotCompositesPlumbPV(var_pos, var_neg, px_pos, px_neg, py_pos, py_neg, ds.latitude, ds.longitude, tit, filename) var = np.mean(ds.z.values[i, index_monthly_lower.values, :, :], axis=0) - np.mean( ds.z.values[i, index_monthly_upper.values, :, :], axis=0)
0.10, dim='dim_0', interpolation='linear') index_WPV_LN = PV_index_LN >= PV_index_LN.quantile( 0.90, dim='dim_0', interpolation='linear') month = ['Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Jan', 'Feb'] seas = ['ASO', 'SON', 'OND', 'NDJ', 'DJF'] for i in np.arange(0, 7): var_WPV_EN = np.mean(hgt_EN.z.values[i, index_WPV_EN.values, :, :], axis=0) var_WPV_LN = np.mean(hgt_LN.z.values[i, index_WPV_LN.values, :, :], axis=0) var_SPV_EN = np.mean(hgt_EN.z.values[i, index_SPV_EN.values, :, :], axis=0) var_SPV_LN = np.mean(hgt_LN.z.values[i, index_SPV_LN.values, :, :], axis=0) var_WPV_all = np.mean(hgt.z.values[i, index_WPV_all.values, :, :], axis=0) var_SPV_all = np.mean(hgt.z.values[i, index_SPV_all.values, :, :], axis=0) px_EN, py_EN, lat = plumb_flux.ComputePlumbFluxes( winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_SPV_EN - var_WPV_EN, np.zeros_like(var_WPV_EN), hgt.latitude.values, hgt.longitude.values) px_LN, py_LN, lat = plumb_flux.ComputePlumbFluxes( winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_SPV_LN - var_WPV_LN, np.zeros_like(var_WPV_LN), hgt.latitude.values, hgt.longitude.values) px_all, py_all, lat = plumb_flux.ComputePlumbFluxes( winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_SPV_all - var_WPV_all, np.zeros_like(var_WPV_all), hgt.latitude.values, hgt.longitude.values) var = { 'z1': var_SPV_all - var_WPV_all, 'px1': px_all, 'py1': py_all, 'z2': var_SPV_EN - var_WPV_EN, 'px2': px_EN,
ninio34.ninio34_mon.quantile(0.25, dim='dim_0', interpolation='linear')) # compute PV composites conditioned on non-EN anomalies PV_index_EN = PV_index.sel(dim_0=~index_monthly_normal.values) ds_EN = ds.sel(realiz=~index_monthly_normal.values) index_monthly_upper = PV_index_EN.PV_mon >= PV_index_EN.PV_mon.quantile( 0.75, dim='dim_0', interpolation='linear') index_monthly_lower = PV_index_EN.PV_mon <= PV_index_EN.PV_mon.quantile( 0.25, dim='dim_0', interpolation='linear') for i in np.arange(0, 4): var = np.mean( ds_EN.z.values[i, index_monthly_lower.values, :, :], axis=0) - np.mean( ds_EN.z.values[i, index_monthly_upper.values, :, :], axis=0) px_c, py_c, lat = plumb_flux.ComputePlumbFluxes( winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var, np.zeros_like(var), ds.latitude.values, ds.longitude.values) tit = 'Composites differences SPV-WPV Years - ' + month[i] + '. No ENSO' filename = './figures/z200_plumb_composites_diff_PV_' + month[ i] + '_NoENSO.png' plots.PlotCompPlumbDiff(var, px_c, py_c, ds.latitude, ds.longitude, tit, filename) for i in np.arange(0, 2): var = ds_EN.isel(month=range(i, i + 3)).mean(dim='month') var_wnd = winds_clm.isel(month=range(i, i + 3)).mean(dim='month') var = np.mean(var.z.values[index_monthly_lower.values, :, :], axis=0) - np.mean( var.z.values[index_monthly_upper.values, :, :], axis=0) px_c, py_c, lat = plumb_flux.ComputePlumbFluxes(var_wnd.u.values[:, :], var_wnd.v.values[:, :],
winds.coords['year'] = np.arange(1981, 2017) winds = winds.stack(realiz=['year', 'number']) winds = winds.transpose('month', 'realiz', 'latitude', 'longitude') hgt = xr.open_dataset(RUTA + 'hgt200.nc') hgt.coords['year'] = np.arange(1981, 2017) hgt = hgt.stack(realiz=['year', 'number']) hgt = hgt.transpose('month', 'realiz', 'latitude', 'longitude') hgt.z.values = hgt.z.values / 9.8 month = ['Aug', 'Sep', 'Oct', 'Nov'] seas = ['ASO', 'SON'] px = [] py = [] for i in np.arange(0, 4): pfx, pfy, lat = plumb_flux.ComputePlumbFluxes(winds.u.values[i, :, :, :], winds.v.values[i, :, :, :], hgt.z.values[i, :, :, :], hgt.latitude.values, hgt.longitude.values) pfx = xr.DataArray(pfx, coords=[np.arange(51 * 36), lat, hgt.longitude.values], dims=['realiz', 'latitude', 'logitude']) pfy = xr.DataArray(pfy, coords=[np.arange(51 * 36), lat, hgt.longitude.values], dims=['realiz', 'latitude', 'logitude']) px.append(pfx) py.append(pfy) px = xr.concat(px, dim='month') px['month'] = np.array([8, 9, 10, 11]) py = xr.concat(py, dim='month') py['month'] = np.array([8, 9, 10, 11])
month = ['Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Jan', 'Feb'] seas = ['ASO', 'SON', 'OND', 'NDJ', 'DJF'] hgt = xr.open_dataset(PATH_DATA + FILE_HGT_S4) hgt = hgt - hgt.mean(dim='longitude') winds = xr.open_dataset(PATH_DATA + FILE_WINDS, chunks={'latitude': 10}) winds = winds.transpose('month', 'realiz', 'latitude', 'longitude') winds_clm = winds.mean(dim='realiz') for i in np.arange(0, 7): var_normal = np.mean(hgt.z.values[i, :, :, :], axis=0) var_ninio_WPV = np.mean(hgt.z.values[i, index_ninio_WPV, :, :], axis=0) px_ninio_WPV, py_ninio_WPV, lat = plumb_flux.ComputePlumbFluxes( winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_ninio_WPV - var_normal, np.zeros_like(var_ninio_WPV), hgt.latitude.values, hgt.longitude.values) #dx, dy = calc.lat_lon_grid_deltas(hgt.longitude.values, lat) #div_ninio_WPV = calc.divergence(px_ninio_WPV, py_ninio_WPV, dx, dy) var_ninia_WPV = np.mean(hgt.z.values[i, index_ninia_WPV, :, :], axis=0) px_ninia_WPV, py_ninia_WPV, lat = plumb_flux.ComputePlumbFluxes( winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_ninia_WPV - var_normal, np.zeros_like(var_ninio_WPV), hgt.latitude.values, hgt.longitude.values) #div_ninia_WPV = calc.divergence(px_ninia_WPV, py_ninia_WPV, dx, dy) var_ninio_SPV = np.mean(hgt.z.values[i, index_ninio_SPV, :, :], axis=0) px_ninio_SPV, py_ninio_SPV, lat = plumb_flux.ComputePlumbFluxes(
index_monthly_upper = ninio34.ninio34_mon >= ninio34.ninio34_mon.quantile( 0.90, dim='dim_0', interpolation='linear') index_monthly_lower = ninio34.ninio34_mon <= ninio34.ninio34_mon.quantile( 0.10, dim='dim_0', interpolation='linear') index_monthly_normal = np.logical_and( ninio34.ninio34_mon < ninio34.ninio34_mon.quantile( 0.90, dim='dim_0', interpolation='linear'), ninio34.ninio34_mon > ninio34.ninio34_mon.quantile(0.10, dim='dim_0', interpolation='linear')) for i in np.arange(0, 7): var_pos = np.mean( ds.z.values[i, index_monthly_upper.values, :, :], axis=0) - np.mean( ds.z.values[i, index_monthly_normal.values, :, :], axis=0) px_pos, py_pos, lat = plumb_flux.ComputePlumbFluxes( winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_pos, np.zeros_like(var_pos), ds.latitude.values, ds.longitude.values) var_neg = np.mean( ds.z.values[i, index_monthly_lower.values, :, :], axis=0) - np.mean( ds.z.values[i, index_monthly_normal.values, :, :], axis=0) px_neg, py_neg, lat = plumb_flux.ComputePlumbFluxes( winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_neg, np.zeros_like(var_neg), ds.latitude.values, ds.longitude.values) tit = 'Composites S4 Z* Plumb 200hPa - ' + month[i] filename = './new_figures_decile/z200_plumb_composites_NINIO_' + month[ i] + '.png' plots.PlotCompositesPlumb(var_pos, var_neg, px_pos, px_neg, py_pos, py_neg, ds.latitude, ds.longitude, tit, filename) for i in np.arange(0, 5): var = ds.isel(month=range(i, i + 3)).mean(dim='month')
index_ninia_SPV = np.logical_and(index_ninia_all.values, index_SPV_lower.values) index_normal = np.logical_and(index_SPV_normal, index_normal_all) month = ['Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Jan', 'Feb'] seas = ['ASO', 'SON', 'OND', 'NDJ', 'DJF'] hgt = xr.open_dataset(PATH_DATA + FILE_HGT_S4) hgt = hgt - hgt.mean(dim='longitude') winds = xr.open_dataset(PATH_DATA + FILE_WINDS, chunks={'latitude':10}) winds = winds.transpose('month', 'realiz', 'latitude', 'longitude') winds_clm = winds.mean(dim='realiz') for i in np.arange(0, 7): var_normal = np.mean(hgt.z.values[i, :, :, :], axis=0) px, py, lat = plumb_flux.ComputePlumbFluxes(winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], hgt.z.values[i, :, :, :], var_normal, hgt.latitude.values, hgt.longitude.values, 20000) dx, dy = calc.lat_lon_grid_deltas(hgt.longitude.values, lat) #div = calc.divergence(px, py, dx, dy) px_normal, py_normal = np.mean(px, axis=0), np.mean(py, axis=0) var_ninio_WPV = np.mean(hgt.z.values[i, index_ninio_WPV, :, :], axis=0) px_ninio_WPV, py_ninio_WPV = np.mean(px[index_ninio_WPV, :, :], axis=0) - px_normal, np.mean(py[index_ninio_WPV, :, :], axis=0) - py_normal div_ninio_WPV = calc.divergence(px_ninio_WPV, py_ninio_WPV, dx, dy) var_ninia_WPV = np.mean(hgt.z.values[i, index_ninia_WPV, :, :], axis=0) px_ninia_WPV, py_ninia_WPV = np.mean(px[index_ninia_WPV, :, :], axis=0) - px_normal, np.mean(py[index_ninia_WPV, :, :], axis=0) - py_normal div_ninia_WPV = calc.divergence(px_ninia_WPV, py_ninia_WPV, dx, dy) var_ninio_SPV = np.mean(hgt.z.values[i, index_ninio_SPV, :, :], axis=0) px_ninio_SPV, py_ninio_SPV = np.mean(px[index_ninio_SPV, :, :], axis=0) - px_normal, np.mean(py[index_ninio_SPV, :, :], axis=0) - py_normal
hgt = hgt - hgt.mean(dim='longitude') hgt = hgt.sel(latitude=slice(20, -90)).compute() winds = xr.open_dataset(PATH_DATA + FILE_WINDS, chunks={'latitude':10}) winds = winds.sel(latitude=slice(20, -90)).compute() winds = winds.transpose('month', 'realiz', 'latitude', 'longitude') winds_clm = winds.mean(dim='realiz') for i in np.arange(7): var_WPV_EN = np.mean(hgt.z.values[i, index_WPV_EN, :, :], axis=0) var_WPV_LN = np.mean(hgt.z.values[i, index_WPV_LN, :, :], axis=0) var_normal = np.mean(hgt.z.values[i, :, :, :], axis=0) var_SPV_EN = np.mean(hgt.z.values[i, index_SPV_EN, :, :], axis=0) var_SPV_LN = np.mean(hgt.z.values[i, index_SPV_LN, :, :], axis=0) var_WPV_all = np.mean(hgt.z.values[i, index_WPV_all.values, :, :], axis=0) var_SPV_all = np.mean(hgt.z.values[i, index_SPV_all.values, :, :], axis=0) px_WPV, py_WPV, lat = plumb_flux.ComputePlumbFluxes(winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_WPV_all - var_normal, np.zeros_like(var_WPV_EN), hgt.latitude.values, hgt.longitude.values, 5000) px_SPV, py_SPV, lat = plumb_flux.ComputePlumbFluxes(winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_SPV_all - var_normal, np.zeros_like(var_WPV_EN), hgt.latitude.values, hgt.longitude.values, 5000) px_WPV_EN, py_WPV_EN, lat = plumb_flux.ComputePlumbFluxes(winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_WPV_EN - var_normal, np.zeros_like(var_WPV_EN), hgt.latitude.values, hgt.longitude.values, 5000) px_SPV_EN, py_SPV_EN, lat = plumb_flux.ComputePlumbFluxes(winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_SPV_EN - var_normal, np.zeros_like(var_WPV_EN), hgt.latitude.values, hgt.longitude.values, 5000) px_WPV_LN, py_WPV_LN, lat = plumb_flux.ComputePlumbFluxes(winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_WPV_LN - var_normal, np.zeros_like(var_WPV_EN), hgt.latitude.values, hgt.longitude.values, 5000) px_SPV_LN, py_SPV_LN, lat = plumb_flux.ComputePlumbFluxes(winds_clm.u.values[i, :, :], winds_clm.v.values[i, :, :], var_SPV_LN - var_normal, np.zeros_like(var_WPV_EN), hgt.latitude.values, hgt.longitude.values, 5000) var ={'z1': var_SPV_all - var_normal, 'px1': px_SPV, 'py1': py_SPV, 'z2': var_SPV_EN - var_normal, 'px2': px_SPV_EN, 'py2': py_SPV_EN, 'z3': var_SPV_LN - var_normal, 'px3': px_SPV_LN, 'py3': py_SPV_LN, 'z4': var_WPV_all - var_normal, 'px4': px_WPV, 'py4': py_WPV, 'z5': var_WPV_EN - var_normal, 'px5': px_WPV_EN, 'py5': py_WPV_EN, 'z6': var_WPV_LN - var_normal, 'px6': px_WPV_LN, 'py6': py_WPV_LN} tit = 'Composites S4 Z* and Plumb Fluxes 50hPa SPoV Conditioned - ENSO - ' + month[i] filename = FIG_PATH + 'z50_pf_composites_SPoV_' + month[i] +'_ENSO_q.png' plots.PlotPoVCompositesENSOZPF(var, hgt.latitude, hgt.longitude, tit, filename)