def eofs_as(dat): A = climatologia_xarray(dat['curl']).values global land EC, WC, land = get_coasts(dat.lat, dat.lon) msk = np.empty(np.shape(A)) for i in range(0, len(A[:,0,0])): msk[i,:,:] = land B = np.ma.array(A, mask=msk) from get_eddof import get_eddof edof = np.empty([len(dat.lat), len(dat.lon)]) for i in range(0, len(dat.lat)): for j in range(0, len(dat.lon)): if msk[0,i,j] == False: edof[i,j] = get_eddof(B[:,i,j]) else: edof[i,j] = np.nan dof = int(np.nanmean(edof)) coslat = np.cos(np.deg2rad(dat.lat.values)).clip(0., 1.) wgts = np.sqrt(coslat)[..., np.newaxis] solver = Eof(B, center=True, weights=wgts, ddof=dof) eof = solver.eofs(neofs=10, eofscaling=2) pc = solver.pcs(npcs=10, pcscaling=1) varfrac = solver.varianceFraction() eigvals = solver.eigenvalues() x, y = np.meshgrid(dat.lon, dat.lat) return eof, pc, varfrac, x, y, edof
def zonal_integration(x, lat, lon): import numpy as np from functions import get_coasts from scipy import integrate EC, WC, land = get_coasts(lat, lon); del land if np.ndim(x) == 2: x_int = np.empty(len(lat)) for i in range(1, len(lat)): n = len(lon[int(WC[i]):int(EC[i])]) h = np.abs(lon[1]-lon[0])*60*1.852*1000*np.cos(lat[i]*np.pi/180) xx = np.empty(n); xx[0] = 0 for j in range(0, n-1): xx[j+1] = xx[j] + h x_int[i] = integrate.simps(x[i, int(WC[i]):int(EC[i])], xx) else: x_int = np.empty([len(x[:,0,0]), len(lat)]) for i in range(1, len(lat)): n = len(lon[int(WC[i]):int(EC[i])]) h = np.abs(lon[1]-lon[0])*60*1.852*1000*np.cos(lat[i]*np.pi/180) xx = np.empty(n); xx[0] = 0 for j in range(0, n-1): xx[j+1] = xx[j] + h x_int[:, i] = integrate.simps(x[:, i, int(WC[i]):int(EC[i])], xx) return x_int
def latmax_clim(dat): A = dat['curl'].resample('1MS', dim='time', how='mean') B = np.empty([len(A.lat), len(A.time)]) EC, WC, land = get_coasts(A.lat, A.lon) del land for i in range(0, len(A.lat)): B[i, :] = A[:, i, int(WC[i]):int(EC[i])].mean(dim='lon') C = B.argmax(axis=0) LM = np.empty(np.shape(C)) for i in range(0, len(C)): LM[i] = A.lat[C[i]].item() return LM, A.time
def mysv_clim(dat): A = climatologia_xarray(dat['curl']) B = A.sel(lat=-40, method='nearest') EC, WC = get_coasts(A.lat, A.lon) C = np.empty(len(A[:, 0, 0])) kk = np.where(A.lat == B.lat)[0][0] n = len(B.lon[int(WC[kk]):int(EC[kk])]) h = np.abs(B.lon[1] - B.lon[0]) * 60 * 1.852 * 1000 * np.cos( B.lat * np.pi / 180) xx = np.empty(n) xx[0] = 0 for j in range(0, n - 1): xx[j + 1] = xx[j] + h C = integrate.simps(B[:, int(WC[kk]):int(EC[kk])], xx) D = B.lat.item() CC = C / (1027 * 2 * 7.29e-5 * np.cos(np.deg2rad(D)) / 6371000) return CC, D
import numpy as np import xarray from functions import get_coasts from functions import climatologia_xarray from matplotlib import pyplot as plt dat = xarray.open_dataset( '/home/bock/Documents/tesis/vientos/era_int/ERA_curl_daily_2009-2015.nc' ).squeeze() A = climatologia_xarray(dat['curl']) B = np.empty([len(dat.lat), 12]) EC, WC = get_coasts(dat.lat, dat.lon) for i in range(0, len(dat.lat)): B[i, :] = np.mean(A[:, i, int(WC[i]):int(EC[i])], axis=1) t = np.arange(1, 13, 1) x, y = np.meshgrid(t, dat.lat) fig = plt.figure(figsize=(7, 9)) ax = fig.add_subplot(111) pc = plt.pcolormesh(x, y, B * 1e7, cmap='jet', vmin=-1.5, vmax=1.5) cbar = fig.colorbar(pc, ax=ax, shrink=0.9) cbar.ax.set_ylabel('10$^{-7}$ Pa/m') plt.xlabel('Mes') plt.ylabel('Latitud') plt.title('Rotor promediado en la cuenca ERA') plt.savefig('figuras/curl_promediado_climatologia_eraint.png', bbox_inches='tight') plt.close()
import numpy as np import xarray from functions import get_coasts from matplotlib import pyplot as plt dat = xarray.open_dataset( '/home/bock/Documents/tesis/vientos/ncep_v1/NCEP1_curl_daily_2009-2015.nc') NC1 = dat['curl'].mean(dim='time') NC1_lat = dat.lat EC, WC = get_coasts(NC1_lat, dat.lon) NC1_za = np.empty(len(NC1_lat)) for i in range(0, len(NC1_lat)): NC1_za[i] = np.mean(NC1[i, int(WC[i]):int(EC[i])]) del EC, WC, NC1, dat dat = xarray.open_dataset( '/home/bock/Documents/tesis/vientos/ncep_v2/NCEP2_curl_daily_2009-2015.nc') NC2 = dat['curl'].mean(dim='time') NC2_lat = dat.lat EC, WC = get_coasts(NC2_lat, dat.lon) NC2_za = np.empty(len(NC2_lat)) for i in range(0, len(NC2_lat)): NC2_za[i] = np.mean(NC2[i, int(WC[i]):int(EC[i])]) del EC, WC, NC2, dat dat = xarray.open_dataset( '/home/bock/Documents/tesis/vientos/ccmp/CCMP_curl_daily_2009-2015.nc') NC2 = dat['curl'].mean(dim='time') CCM_lat = dat.lat EC, WC = get_coasts(CCM_lat, dat.lon) CCM_za = np.empty(len(CCM_lat))