tmp = max(eps, birdAtRisk(:))./energy(:);
figure('position',[0 0 1200 800]); hold on; box on; grid on
tmp_e = cumsum(energy(id),'omitnan')./nansum(energy(:));
plot(tmp_e,'linewidth',2)
tmp_b = cumsum(birdAtRisk(id))./nansum(birdAtRisk(:));
plot(tmp_b,'linewidth',2)
yline(energy_day,'-k','Energy produced during the day')
yline(energy_safe,'-k','Energy produced without any bird at risk')
xline(find(tmp_b>.5,1),'-k','50% of birds at risk reduced')
yline(tmp_e(find(tmp_b>.5,1)))
xline(find(tmp_b>.1,1),'-k','90% of birds at risk reduced')
yline(tmp_e(find(tmp_b>.1,1)))
xline(find(tmp_b>.01,1),'-k','99% of birds at risk reduced')
yline(tmp_e(find(tmp_b>.01,1)))
legend('Energy produced','Number of bird at risk','Location','northwest')
xlabel('Datapoint (grid cells x time) sorted by increasing impact (birds@risk / energey produced)')
figure('position',[0 0 1300 500]); hold on; grid on;
plot((1-tmp_e),tmp_b,'k','linewidth',2);
ylabel('Percentage of bird saved')
xlabel('Percentage of Energy lost')
[G,t_day] = findgroups(dateshift(time,'start','day','nearest'));
tmp_b = splitapply( @sum, reshape(sum(sum(birdAtRisk),2),1,[]), G);
tmp_e = splitapply( @nansum, reshape(nansum(nansum(tmp_e),2),1,[]), G);
figure; hold on; box on; grid on
plot(t_day,tmp_b./sum(birdAtRisk(:)))
plot(t_day,tmp_e./nansum(energy(:)))
y=cumsum(sort(tmp_b))./sum(tmp_b);
xline(tmp,'-',['50% of bird at risk in ' num2str(numel(t_day)-tmp) ' days'])
cs = [0; cumsum(tmp_b)'];
targets = [0.5, 0.9]*tot;
for tt = 1:length(targets)
% search all intervals in [40,180] and [180,366]
results(tt).target = target/tot; % fraction (0.5 or 0.9)
results(tt).idx = best_idx;
results(tt).len = best_len;
results(tt).dates = [t_day(best_idx(1,1)) t_day(best_idx(1,2)); ...
t_day(best_idx(2,1)) t_day(best_idx(2,2))];
results
results = 1×2 struct
Fields | target | idx | len | dates |
---|
1 | 0.5000 | [63,98;290,293] | 40 | 2×2 datetime |
---|
2 | 0.9000 | [62,122;267,323] | 118 | 2×2 datetime |
---|
results.dates
04-Mar-2018 08-Apr-2018
17-Oct-2018 20-Oct-2018
03-Mar-2018 02-May-2018
24-Sep-2018 19-Nov-2018
'1-Mar-2018','1-May-2018','15-Aug-2018','15-Nov-2018';...
'1-Mar-2018','1-Apr-2018','1-Oct-2018','1-Nov-2018';...
% Build thr_date directly from results (2 rows: 90% and 50%)
thr_date = [results(2).dates(1,:) results(2).dates(2,:); % yellow = 90%
results(1).dates(1,:) results(1).dates(2,:)]; % green = 50%
fill([thr_date(1,1) thr_date(1,2) thr_date(1,2) thr_date(1,1)],[0 0 10^6 10^6],'y','EdgeAlpha',0,'FaceAlpha',.5)
fill([thr_date(1,3) thr_date(1,4) thr_date(1,4) thr_date(1,3)],[0 0 10^6 10^6],'y','EdgeAlpha',0,'FaceAlpha',.5)
fill([thr_date(2,1) thr_date(2,2) thr_date(2,2) thr_date(2,1)],[0 0 10^6 10^6],'g','EdgeAlpha',0,'FaceAlpha',.5)
fill([thr_date(2,3) thr_date(2,4) thr_date(2,4) thr_date(2,3)],[0 0 10^6 10^6],'g','EdgeAlpha',0,'FaceAlpha',.5)
plot(time,reshape(sum(sum(birdAtRisk),2),1,[]),'k')
tmp_col(1,:) = [nansum(birdAtRisk(:)) nansum(energy(:)) nansum(energy(:).*daynight(:)) nansum(energy(:).*~daynight(:))];
for i_t=1:size(thr_date,1)
it = ~( (time>thr_date(i_t,1)&time<thr_date(i_t,2)) | (time>thr_date(i_t,3)&time<thr_date(i_t,4)) );
tmp_col(i_t+1,:) = [nansum(birdAtRisk(:,:,it),'all') nansum(energy(:,:,it),'all') nansum(energy(:,:,it).*daynight(:,:,it),'all') nansum(energy(:,:,it).*~daynight(:,:,it),'all') ];
t=table({'No cut','yellow','green'}',tmp_col(:,1),tmp_col(:,2),tmp_col(:,3),tmp_col(:,4),'VariableNames',{'Mitigation','Bird at risk','Energy','Energy day','Energy night'})
t = 3×5 table
| Mitigation | Bird at risk | Energy | Energy day | Energy night |
---|
1 | 'No cut' | 1.1408e+08 | 7.1863e+17 | 3.1145e+17 | 4.0718e+17 |
---|
2 | 'yellow' | 1.2051e+07 | 4.7334e+17 | 2.0340e+17 | 2.6993e+17 |
---|
3 | 'green' | 6.0181e+07 | 6.3434e+17 | 2.7181e+17 | 3.6253e+17 |
---|
tperc{:,2}=t{:,2}./t{1,2}*100;
birdf = logspace(-6,-1,100);
birdAtRisk_saved=nan(size(birdf));
energy_lost=nan(size(birdf));
id = birdFlow > birdf(i_d);
birdAtRisk_saved(i_d) = sum(birdAtRisk(id));
energy_lost(i_d) = sum(energy(id));
tmp1 = birdAtRisk_saved./nansum(birdAtRisk(:));
tmp2 = energy_lost./nansum(energy(:));
figure('position',[0 0 800 400]); box on; grid on
plot(birdf, tmp1, 'linewidth',2); ylabel('bird at risk saved'); ylim([0 1])
plot(birdf, tmp2,'linewidth',2); ylabel('energy lost')
set(gca,'xscale','log'); ylim([0 1]); grid on;
xlabel('Threashold of bird flow [bird/m^2/hr] **above** which WT are shutdown')
tmp = energy ./ max(eps, birdAtRisk);
eperb_range = logspace(7,12,100);
birdAtRisk_saved=nan(size(eperb_range));
energy_lost=nan(size(eperb_range));
for i_d=1:numel(eperb_range)
id = tmp < eperb_range(i_d);
birdAtRisk_saved(i_d) = sum(birdAtRisk(id));
energy_lost(i_d) = sum(energy(id));
tmp3 = birdAtRisk_saved./nansum(birdAtRisk(:));
tmp4 = energy_lost./nansum(energy(:));
figure('position',[0 0 800 400]); box on; grid on
plot(eperb_range, tmp3 ,'linewidth',2); ylabel('bird at risk saved'); ylim([0 1])
plot(eperb_range, tmp4,'linewidth',2); ylabel('energy lost')
set(gca,'xscale','log'); grid on; ylim([0 1])
xlabel('Threashold of ratio energy/bird@risk **below** which WT are shutdown')
tmp_bf = squeeze(sum(birdFlow,[1 2],"omitnan"));
tmp_bar = squeeze(sum(birdAtRisk,[1 2],"omitnan"));
tmp_e = squeeze(sum(energy,[1 2],"omitnan"));
tmp_epbar = tmp_e ./ max(eps,tmp_bar);
tmp_epbar(isnan(tmp_bf))=nan;
tmp_epbar(tmp_bf==0)=nan;
% tmp_epbar(tmp_bf<0.1)=nan;
figure; tiledlayout('vertical','TileSpacing','tight','Padding','tight');
nexttile; plot(time,tmp_e); ylabel("Energy")
nexttile; plot(time, tmp_bf); ylabel("BirdFlow")
% nexttile; plot(tmp_bar); ylabel("Bird At Risk")
nexttile; plot(time, 1./tmp_epbar); ylabel("Bird At Risk/Energy ")
linkaxes(findall(gcf, 'Type', 'axes'), 'x');
% writetable(table(time', tmp_bf, tmp_e, 1./tmp_epbar, VariableNames=["datetime", "birdflow", "energy" "birdatriskperenergy"]),"temporal_data.csv")
plot(dcoast(:), tmp_e(:)./tmp_b(:),'.k'); lsline;
[G,dcoast_bin] = findgroups(round(dcoast(:),-1));
plot(dcoast_bin, splitapply(@nanmean,tmp_e(:)./tmp_b(:),G),'-r','linewidth',2)
xlabel('distance to coast [km]');
ylabel('Energy lost per bird saved')
figure('position',[0 0 1400 700]);
ax1=subplot(size(thr_date,1),3,(i_t-1)*3+1); hold on;
h = worldmap([g.lat(1)-2 g.lat(end)+2], [g.lon(1)-2 g.lon(end)+2]);
setm(h,'frame','on','grid','off'); set(findall(h,'Tag','MLabel'),'visible','off'); set(findall(h,'Tag','PLabel'),'visible','off')
bordersm('countries','facecolor',[228 238 243]./255);
c=colorbar('south'); title('Birds saved [birds]');
colormap(ax1,brewermap([],'OrRd'))
ax2=subplot(size(thr_date,1),3,(i_t-1)*3+2); hold on;
h = worldmap([g.lat(1)-2 g.lat(end)+2], [g.lon(1)-2 g.lon(end)+2]);
setm(h,'frame','on','grid','off'); set(findall(h,'Tag','MLabel'),'visible','off'); set(findall(h,'Tag','PLabel'),'visible','off')
bordersm('countries','facecolor',[228 238 243]./255);
surfm(g.lat,g.lon,tmp2/1e12)
%scatterm(tim.Latitude,tim.Longitude,'.k');
c=colorbar('south'); title('Energy lost [TJ]');
ax3=subplot(size(thr_date,1),3,(i_t-1)*3+3); hold on;
h = worldmap([g.lat(1)-2 g.lat(end)+2], [g.lon(1)-2 g.lon(end)+2]);
setm(h,'frame','on','grid','off'); set(findall(h,'Tag','MLabel'),'visible','off'); set(findall(h,'Tag','PLabel'),'visible','off')
bordersm('countries','facecolor',[228 238 243]./255);
surfm(g.lat,g.lon,tmp2./tmp)
%scatterm(tim.Latitude,tim.Longitude,'.k');
c=colorbar('south'); title('Energy lost per Bird saved [TJ/birds]');
d = abs(mod(wdir(:,:,it1)-wdir_mean(1)+pi, 2*pi) - pi);
diffit1 = abs(mod(wdir(:,:,it1)-wdir_mean(1)+pi, 2*pi) - pi);
diffit2 = abs(mod(wdir(:,:,it2)-wdir_mean(2)+pi, 2*pi) - pi);
diffit=cat(3,diffit1,diffit2);
tmp_b = birdAtRisk(:,:,it1|it2);
tmp_e = energy(:,:,it1|it2);
tmp_n = ~daynight(:,:,it1|it2);
% only consider night time
tmp_bdd=nan(size(dd)); tmp_edd=nan(size(dd));
tmp_bdd(i_d) = nansum(tmp_b(diffit < dd(i_d)));
tmp_edd(i_d) = nansum(tmp_e(diffit < dd(i_d)));