def salinity_and_wind(time_slice, files):
N = 1
Wn = 1/24
B, A = signal.butter(N,Wn)
colours = cm.Greens(np.linspace(0,1,13))
fig,axs = plt.subplots(2,1, figsize=(30,15))
for point, colour in zip(nemo_ji, colours[3:]):
nemo_lon = grid.nav_lon.isel(y=point[1], x=point[0])
nemo_lat = grid.nav_lat.isel(y=point[1], x=point[0])
nemo_lon_lat = (np.asscalar(nemo_lon.values), np.asscalar(nemo_lat))
atmos_ji = geo_tools.find_closest_model_point(
nemo_lon_lat[0], nemo_lon_lat[1],
atmos_grid.longitude.values - 360, atmos_grid.latitude.values,
grid = "GEM2.5")
u_wind_ts = (winds_data.u_wind
.isel(gridY=atmos_ji[0], gridX=atmos_ji[1])
.sel(time=time_slice))
v_wind_ts = (winds_data.v_wind
.isel(gridY=atmos_ji[0], gridX=atmos_ji[1])
.sel(time=time_slice))
rotated_u_winds, rotated_v_winds = viz_tools.rotate_vel(u_wind_ts.values,
v_wind_ts.values, origin = 'map' )
windfv = signal.filtfilt(B,A,rotated_v_winds)
axs[0].plot(v_wind_ts.time, windfv, color = colour)
sal = (nowcast.salinity
.isel(gridY = point[1], gridX = point[0])
.sel(time=time_slice)
.sel(depth = 0.5, method = 'nearest'))
axs[1].plot(sal.time, sal.values, color = colour)
axs[0].set_title('Filtered and Rotated V winds')
axs[1].set_title('Salinity')
with nc_tools.scDataset(files) as f:
bs1 = f.variables['vosaline'][:,0,593,135]
bs2 = f.variables['vosaline'][:,0,597,132]
bs3 = f.variables['vosaline'][:,0,600,130]
bs4 = f.variables['vosaline'][:,0,603,127]
bs5 = f.variables['vosaline'][:,0,605,125]
bs6 = f.variables['vosaline'][:,0,610,124]
bs7 = f.variables['vosaline'][:,0,615,123]
bs8 = f.variables['vosaline'][:,0,620,122]
bs9 = f.variables['vosaline'][:,0,624,120]
bs10 = f.variables['vosaline'][:,0,629,122]
times = f.variables['time_counter'][:]
dates = nc.num2date(times, 'seconds since 1900-01-01 00:00:00')
axs[1].plot(dates, bs1, '--', color = colours[3])
axs[1].plot(dates, bs2, '--', color = colours[4])
axs[1].plot(dates, bs3, '--', color = colours[5])
axs[1].plot(dates, bs4, '--', color = colours[6])
axs[1].plot(dates, bs5, '--', color = colours[7])
axs[1].plot(dates, bs6, '--', color = colours[8])
axs[1].plot(dates, bs7, '--', color = colours[9])
axs[1].plot(dates, bs8, '--', color = colours[10])
axs[1].plot(dates, bs9, '--', color = colours[11])
axs[1].plot(dates, bs10, '--', color = colours[12])
axs[0].grid()
axs[1].grid()
def wind_and_tracer(time_slice, files):
with nc_tools.scDataset(files) as f:
trc = f.variables['mytracer'][:,0,550:800,115:250]
times = f.variables['time_counter'][:]
fig,ax = plt.subplots(2,1,figsize=(8,8), gridspec_kw = {'height_ratios':[1, 2]})
cropped_mask = 1 - mesh_mask.variables['tmask'][0,0,550:800,115:250]
u_wind_ts = (winds_data.u_wind
.isel(gridY=163, gridX=109)
.sel(time=time_slice))
v_wind_ts = (winds_data.v_wind
.isel(gridY=163, gridX=109)
.sel(time=time_slice))
rotated_u_winds, rotated_v_winds = viz_tools.rotate_vel(u_wind_ts.values,
v_wind_ts.values, origin = 'map' )
u_wind_ts1 = (winds_data.u_wind
.isel(gridY=194, gridX=104)
.sel(time=time_slice))
v_wind_ts1 = (winds_data.v_wind
.isel(gridY=194, gridX=104)
.sel(time=time_slice))
rotated_u_winds1, rotated_v_winds1 = viz_tools.rotate_vel(u_wind_ts1.values,
v_wind_ts1.values, origin = 'map' )
windfu1 = signal.filtfilt(B,A, rotated_u_winds1)
windfv1 = signal.filtfilt(B,A, rotated_v_winds1)
windfu = signal.filtfilt(B,A, rotated_u_winds)
windfv = signal.filtfilt(B,A,rotated_v_winds)
def animate30(i):
date = nc.num2date(times[i], 'seconds since 1900-01-01 00:00:00')
ax[1].clear()
ax[0].clear()
cmap = plt.get_cmap('Purples')
cmap.set_bad('burlywood')
masked_trc1 = np.ma.masked_array(trc[i,...], mask = cropped_mask)
den = ax[1].pcolormesh(masked_trc1,
vmin=0, vmax = 1, cmap = cmap)
ax[1].set_title(date)
ax[0].plot(winds_data.time.sel(time=time_slice), windfv, 'g-')
ax[0].plot(winds_data.time.sel(time=time_slice), windfv1, 'r-')
ax[0].grid('on')
ax[0].set_ylim(-10,15)
ax[0].plot((date, date), (-10,15), 'b--', color = 'black')
ax[0].set_title('Filtered and Rotated V Winds')
ax[1].set_title('Concentration of Tracer')
return ax
length = times.shape[0]
interval = 0.25#in seconds
ani40 = animation.FuncAnimation(fig,animate30,frames=length,interval=interval*1e+3, repeat=False)
return ani40
def wind_and_salinity_video(time_slice, files):
with nc_tools.scDataset(files) as f:
sal = f.variables['vosaline'][:,0,550:800,115:250]
times = f.variables['time_counter'][:]
fig,ax = plt.subplots(2,1,figsize=(8,8), gridspec_kw = {'height_ratios':[1, 2]})
cropped_mask = 1 - mesh_mask.variables['tmask'][0,0,550:800,115:250]
u_wind_ts = (winds_data.u_wind
.isel(gridY=163, gridX=109)
.sel(time=time_slice))
v_wind_ts = (winds_data.v_wind
.isel(gridY=163, gridX=109)
.sel(time=time_slice))
rotated_u_winds, rotated_v_winds = viz_tools.rotate_vel(u_wind_ts.values,
v_wind_ts.values, origin = 'map' )
u_wind_ts1 = (winds_data.u_wind
.isel(gridY=194, gridX=104)
.sel(time=time_slice))
v_wind_ts1 = (winds_data.v_wind
.isel(gridY=194, gridX=104)
.sel(time=time_slice))
rotated_u_winds1, rotated_v_winds1 = viz_tools.rotate_vel(u_wind_ts1.values,
v_wind_ts1.values, origin = 'map' )
windfu1 = signal.filtfilt(B,A, rotated_u_winds1)
windfv1 = signal.filtfilt(B,A, rotated_v_winds1)
windfu = signal.filtfilt(B,A, rotated_u_winds)
windfv = signal.filtfilt(B,A,rotated_v_winds)
def animate30(i):
date = nc.num2date(times[i], 'seconds since 1900-01-01 00:00:00')
ax[1].clear()
ax[0].clear()
cmap = plt.get_cmap(cmocean.cm.haline)
masked_sal1 = np.ma.masked_array(sal[i,...], mask = cropped_mask)
den = ax[1].pcolormesh(masked_sal1,
vmin=22, vmax = 30, cmap = cmap)
ax[1].set_title(date)
ax[0].plot(winds_data.time.sel(time=time_slice), windfv, 'g-')
ax[0].plot(winds_data.time.sel(time=time_slice), windfv1, 'r-')
ax[0].grid('on')
ax[0].set_ylim(-10,15)
ax[0].plot((date, date), (-10,15), 'b--', color = 'black')
ax[0].set_title('Filtered and Rotated V Winds')
ax[1].set_title('Salinity')
return ax
length = times.shape[0]
interval = 0.25#in seconds
ani40 = animation.FuncAnimation(fig,animate30,frames=length,interval=interval*1e+3, repeat=False)
return ani40