Open paigem opened 2 years ago
This is awesome, @paigem. Thanks for making these. I wonder if all the events that compensate rather than enforce the large scale field are related to storm systems of the mid/high latitudes? From the screenshot above it seems like all the negative areas are polewards of ~35 N/S? It might be worth doing the histograms above for rough latitude bins (e.g. abs(lat)>40 and abs(lat)<40) to confirm this impression?
That's a great idea @jbusecke!
And good point, it's likely the storm systems that are creating the ~linear edges in the snapshot figure above. I wonder if that's something we want to look into more? E.g. how small scales affect storms on a short timescale compared to the longer averaged effects.
I think @rabernat s suggestion of creating a histogram only along the time, xt_ocean dimension is a very good one. We could then either show a heatmap to have a histogram per 'xt_ocean' row, or bin certain latitude bands to show 2-4 latitude 'bands'.
I'm making this issue to share the differences in histograms of the relative effect of small scales. These plots compare two methods of computing the histograms:
Latent heat
Note: evaporation shows nearly identical patterns
Sensible heat
What do these plots say?
ncar
method.So it appears that each snapshot of the relative effect of small scales is not entirely positive, but is mostly positive.
Below is the code to produce this figure, where
ds_plot
is the original dataset of results. Theds_mean
is the time mean of the original dataset.Code
``` python nx = len(algos) ny = 3 for var in ['ql', 'qh', 'evap']: fig, axarr = plt.subplots(ny, nx, figsize=[8*nx,3.5*ny]) for ai,algo in enumerate(algos): # Start by taking mean over all time steps ds_algo = ds_mean.sel(algo=algo) full = ds_algo[var] large_scale = ds_algo[var+'_large_scale'] small_scale = full-large_scale small_scale_relative = (small_scale/full*100) bins = np.linspace(-20,20,20) h_mean = histogram(small_scale_relative.rename('small_scale_relative'),bins=bins,dim=['xt_ocean','yt_ocean']) # Now compute histogram at each time point before averaging ds_algo = ds_plot.sel(algo=algo) full = ds_algo[var] large_scale = ds_algo[var+'_large_scale'] small_scale = full-large_scale small_scale_relative = (small_scale/full*100) bins = np.linspace(-20,20,20) h_each_time = histogram(small_scale_relative.rename('small_scale_relative'),bins=bins,dim=['xt_ocean','yt_ocean']) h_each_time_plot = h_each_time.mean('time').load() # ----- Make the plots ----- # Histogram of the time mean ax = axarr[0,ai] ax = h_mean.to_series().plot.bar(ax=ax) ax.set_xticks(np.arange(20),[]) ax.set_title('Histogram of the time mean',fontsize=16) ax.set_xlabel('') ax.set_ylabel(algo) #ax.set_ylim(0,6200) # Time mean of histograms from each time step ax = axarr[1,ai] ax = h_each_time_plot.to_series().plot.bar(ax=ax) ax.set_xticks(np.arange(20),[]) ax.set_title('Time mean of histograms at each time step',fontsize=16) ax.set_xlabel('') ax.set_ylabel(algo) #ax.set_ylim(0,6200) # Difference ax = axarr[2,ai] ax = (h_mean-h_each_time_plot).to_series().plot.bar(ax=ax) ax.set_xticks(np.arange(20), labels=['-18','-16','-14','-12','-10','-8','-6','-4','-2','0', '2', '4', '6', '8','10','12','14','16','18','']) ax.set_title('Hist. of time mean - Time mean of hist. at each time step',fontsize=16) ax.set_xlabel('') ax.set_ylabel(algo) fig.subplots_adjust(hspace=0.4) fig.suptitle(var) ```