Wind tunnel experiment of a micro wind farm model
Description
Simultaneous strain gage measurements of sixty porous disk models, in a scaled wind farm with one hundred models, and for fifty-six different layouts.
For detailed information about the experimental setup and wind farm layouts see:
Bossuyt, J., Meneveau, C., & Meyers, J. (2018). Effect of layout on asymptotic boundary layer regime in deep wind farms. Physical Review Fluids. See also: https://arxiv.org/abs/1808.09579 .
For more information about the experimental design of the porous disk models, see also:
Bossuyt, J., Howland, M. F., Meneveau, C., & Meyers, J. (2017). Measurement of unsteady loading and power output variability in a micro wind farm model in a wind tunnel. Experiments in Fluids, 58(1), 1. http://doi.org/10.1007/s00348-016-2278-6
Bossuyt, J., Meneveau, C., & Meyers, J. (2017). Wind farm power fluctuations and spatial sampling of turbulent boundary layers. Journal of Fluid Mechanics, 823, 329-344. http://doi.org/10.1017/jfm.2017.328
The data contains matrices 'WF_U', 'x', and 'y', and variable 'fs' for each layout.
The matrix 'WF_U' contains the reconstructed velocity signal in m/s measured by each porous disk, and has size ( 20 , 3 , number of time samples), with 20 the number of porous disk rows, and 3 the number of streamwise aligned porous disk columns in the wind farm. Matrices 'x', and 'y' have size (20,3) and contain the locations of each instrumented porous disk in units of disk diameter D = 0.03m. It is important to note that the wind farm has one extra column of non-instrumented porous disk models on each side, for a total of 20x5=100 porous disk models.The variable 'fs' contains the sampling frequency in Hz, at which all 60 porous disks are simultaneously sampled.
--------------------------------------------------------
Example code to load data in Matlab :
--------------------------------------------------------
filename = 'U_C1_1.h5';
fileID = H5F.open(filename,'H5F_ACC_RDONLY','H5P_DEFAULT');
datasetID = H5D.open(fileID,'WF_U');
WF_U = H5D.read(datasetID,'H5ML_DEFAULT','H5S_ALL','H5S_ALL','H5P_DEFAULT');
H5D.close(datasetID);
datasetID = H5D.open(fileID,'fs');
fs = H5D.read(datasetID,'H5ML_DEFAULT','H5S_ALL','H5S_ALL','H5P_DEFAULT');
H5D.close(datasetID);
datasetID = H5D.open(fileID,'x');
x = H5D.read(datasetID,'H5ML_DEFAULT','H5S_ALL','H5S_ALL','H5P_DEFAULT');
H5D.close(datasetID);
datasetID = H5D.open(fileID,'y');
y = H5D.read(datasetID,'H5ML_DEFAULT','H5S_ALL','H5S_ALL','H5P_DEFAULT');
H5D.close(datasetID);
H5F.close(fileID);
--------------------------------------------------------
Example code to load data in Python:
--------------------------------------------------------
import h5py
filename = 'U_C1_1.h5'
f = h5py.File(filename, 'r')
U = f['WF_U'][()]
x = f['x'][()]
y = f['y'][()]
fs = f['fs'][0][0]
f.close()
--------------------------------------------------------
Example code to generate figures 15 and 16 of Bossuyt et al. (2018). Effect of layout on asymptotic boundary layer regime in deep wind farms. Physical Review Fluids, in Matlab
--------------------------------------------------------
WF_cases_selected = 1:7;
folder = '/';% folder with files
WF_cases_l = {'U_C1';'U_C2';'NU1_C1';'NU1_C2';'NU2_C1';'NU2_C2';'NU2_C3'};% name of layout variations
WF_cases_n = [6, 7, 11, 8, 11, 7, 6]; % 'number of layout variations for each case
WF_data.x = cell( length(WF_cases_selected) , 1);% x - coordinates of porous disk locations
WF_data.y = cell( length(WF_cases_selected) , 1);% y - coordinates of porous disk locations
WF_data.shift = cell( length(WF_cases_selected) , 1);% spanwise shift of layout series
WF_data.fs = cell( length(WF_cases_selected) , 1);
WF_data.WF_Pm = cell( length(WF_cases_selected) , 1);
WF_data.WF_Um = cell( length(WF_cases_selected) , 1);
WF_data.WF_U_rms = cell( length(WF_cases_selected) , 1);
for i = 1 : length(WF_cases_selected)
WF_data_case = struct;
WF_data_case.x = cell( WF_cases_n(i) , 1);
WF_data_case.y = cell( WF_cases_n(i) , 1);
WF_data_case.shift = cell( WF_cases_n(i) , 1);
WF_data_case.fs = cell( WF_cases_n(i) , 1);
WF_data_case.WF_Pm = cell( WF_cases_n(i) , 1);
WF_data_case.WF_Um = cell( WF_cases_n(i) , 1);
WF_data_case.WF_U_rms = cell( WF_cases_n(i) , 1);
for j = 1:WF_cases_n(i)
clc
i
j
WF_data_var = struct;
%read the file
filename = [folder WF_cases_l{i} '_' num2str(j) '.h5'];
fileID = H5F.open(filename,'H5F_ACC_RDONLY','H5P_DEFAULT');
datasetID = H5D.open(fileID,'WF_U');
WF_data_var.WF_U = H5D.read(datasetID,'H5ML_DEFAULT','H5S_ALL','H5S_ALL','H5P_DEFAULT');
H5D.close(datasetID);
datasetID = H5D.open(fileID,'fs');
WF_data_case.fs{j} = H5D.read(datasetID,'H5ML_DEFAULT','H5S_ALL','H5S_ALL','H5P_DEFAULT');
H5D.close(datasetID);
datasetID = H5D.open(fileID,'x');
WF_data_case.x{j} = H5D.read(datasetID,'H5ML_DEFAULT','H5S_ALL','H5S_ALL','H5P_DEFAULT');
H5D.close(datasetID);
datasetID = H5D.open(fileID,'y');
WF_data_case.y{j} = H5D.read(datasetID,'H5ML_DEFAULT','H5S_ALL','H5S_ALL','H5P_DEFAULT');
H5D.close(datasetID);
H5F.close(fileID);
WF_data_var.WF_P = WF_data_var.WF_U.^3;
% Time averaged power
WF_data_case.WF_Pm{j} = mean(WF_data_var.WF_P,3);
% normalize by power in first row: Pi/P1
WF_data_case.WF_Pm{j} = WF_data_case.WF_Pm{j}./mean(WF_data_case.WF_Pm{j}(1,:));
% Time averaged velocity
WF_data_case.WF_Um{j} = mean(WF_data_var.WF_U,3);
% u_rms --> TI
WF_data_case.WF_U_rms{j} = std(WF_data_var.WF_U,[],3);
end
WF_data.x{i} = WF_data_case.x;
WF_data.y{i} = WF_data_case.y;
WF_data.fs{i} = WF_data_case.fs;
WF_data.WF_Pm{i} = WF_data_case.WF_Pm;
WF_data.WF_Um{i} = WF_data_case.WF_Um;
WF_data.WF_U_rms{i} = WF_data_case.WF_U_rms;
%determine spanwise shift for plot legends
tmp1 = WF_data.y{i}{j-1};
tmp2 = WF_data.y{i}{j};
dy = diff( [tmp1(:,1) tmp2(:,1)] ,1,2);
dy = max(dy(abs(dy)>0));
WF_data.shift{i} = 0:dy:(WF_cases_n(i)-1)*dy;
end
%%
line_tick = {'o-','*-','+-','d-','s-','^-','v-','<-','>-','p-','h-'};
line_color = [51,160,44; 141,211,199; 31,120,180; 106,61,154; 227,26,28; 177,89,40; 255,127,0; 166,206,227]./255;
legend_items = cell(size(WF_cases_selected));
for i = 1:length(legend_items)
legend_items{i} = strrep(WF_cases_l{i},'_','-');
end
%% average power entire farm
row_start = 1;
row_end = 19;
f1 = figure;
set(gcf,'paperposition',[0,0,8.4,4.9])
hold on
for i = 1 : length(WF_cases_selected)
tmp_P = zeros(size(WF_data.shift{i}));
for j = 1:WF_cases_n(i)
tmp_P(j) = mean(mean( WF_data.WF_Pm{i}{j}(row_start:row_end,:)));
end
plot( WF_data.shift{i} , tmp_P, line_tick{i} ,'Color', line_color(i,:) ,'MarkerFaceColor', line_color(i,:) )
end
% manualy plot errorbars
for i = 1:length(WF_cases_selected)
tmp_P = zeros(size(WF_data.shift{i}));
for j = 1:WF_cases_n(i)
tmp_P(j) = mean(mean( WF_data.WF_Pm{i}{j}(row_start:row_end,:)));
end
px = WF_data.shift{i} ;
py = tmp_P;
pw = 0.05;
pe = zeros(size(px))+0.01;%for uncertainty value see Bossuyt et al. (2018) Physical Review Fluids.
for j = 1:WF_cases_n(i)
plot( [px(j)-pw/2 px(j)+pw/2] , [py(j)+pe(j) py(j)+pe(j)],'-', 'Color', line_color(i,:),'LineWidth',0.5)
plot( [px(j)-pw/2 px(j)+pw/2] , [py(j)-pe(j) py(j)-pe(j)],'-', 'Color', line_color(i,:),'LineWidth',0.5)
plot( [px(j) px(j)],[py(j)-pe(j) py(j)+pe(j)],':', 'Color', line_color(i,:),'LineWidth',0.5)
end
end
xlabel('\Delta_y [D]')
ylabel('
box('on')
ylim([0.35 0.66])
xlim([-0.1 2.6])
legend1 = legend(legend_items');
set(legend1,'Location','southeast');
print(f1, 'WF_Pm_all','-dpng','-r300')
%% average power end of farm
row_start = 16;
row_end = 19;
f2 = figure;
set(gcf,'paperposition',[0,0,8.4,4.9])
hold on
for i = 1 : length(WF_cases_selected)
tmp_P = zeros(size(WF_data.shift{i}));
for j = 1:WF_cases_n(i)
tmp_P(j) = mean(mean( WF_data.WF_Pm{i}{j}(row_start:row_end,:)));
end
plot( WF_data.shift{i} , tmp_P, line_tick{i} ,'Color', line_color(i,:) ,'MarkerFaceColor', line_color(i,:) )
end
% manualy plot errorbars
for i = 1:length(WF_cases_selected)
tmp_P = zeros(size(WF_data.shift{i}));
for j = 1:WF_cases_n(i)
tmp_P(j) = mean(mean( WF_data.WF_Pm{i}{j}(row_start:row_end,:)));
end
px = WF_data.shift{i} ;
py = tmp_P;
pw = 0.05;
pe = zeros(size(px))+0.02; %for uncertainty value see Bossuyt et al. (2018) Physical Review Fluids.
for j = 1:WF_cases_n(i)
plot( [px(j)-pw/2 px(j)+pw/2] , [py(j)+pe(j) py(j)+pe(j)],'-', 'Color', line_color(i,:),'LineWidth',0.5)
plot( [px(j)-pw/2 px(j)+pw/2] , [py(j)-pe(j) py(j)-pe(j)],'-', 'Color', line_color(i,:),'LineWidth',0.5)
plot( [px(j) px(j)],[py(j)-pe(j) py(j)+pe(j)],':', 'Color', line_color(i,:),'LineWidth',0.5)
end
end
xlabel('\Delta_y [D]')
ylabel('
box('on')
ylim([0.27 0.52])
xlim([-0.1 2.6])
legend1 = legend(legend_items');
set(legend1,'Location','southeast');
print(f2, 'WF_Pm_end', '-dpng','-r300')
%% plot average unsteady loading total farm
row_start = 1;
row_end = 19;
f3 = figure;
set(gcf,'paperposition',[0,0,8.4,4.9])
hold on
for i = 1 : length(WF_cases_selected)
tmp_TI = zeros(size(WF_data.shift{i}));
for j = 1:WF_cases_n(i)
tmp_TI(j) = mean(mean(WF_data.WF_U_rms{i}{j}(row_start:row_end,:)./WF_data.WF_Um{i}{j}(row_start:row_end,:)))*100;
end
plot( WF_data.shift{i} , tmp_TI , line_tick{i} ,'Color', line_color(i,:) ,'MarkerFaceColor', line_color(i,:))
end
% manualy plot errorbars
for i = 1:length(WF_cases_selected)
tmp_TI = zeros(size(WF_data.shift{i}));
for j = 1:WF_cases_n(i)
tmp_TI(j) = mean(mean(WF_data.WF_U_rms{i}{j}(row_start:row_end,:)./WF_data.WF_Um{i}{j}(row_start:row_end,:)))*100;
end
px = WF_data.shift{i} ;
py = tmp_TI;
pw = 0.05;
pe = zeros(size(px))+ 0.004*tmp_TI;%for uncertainty value see Bossuyt et al. (2018) Physical Review Fluids.
for j = 1:WF_cases_n(i)
plot( [px(j)-pw/2 px(j)+pw/2] , [py(j)+pe(j) py(j)+pe(j)],'-', 'Color', line_color(i,:),'LineWidth',0.5)
plot( [px(j)-pw/2 px(j)+pw/2] , [py(j)-pe(j) py(j)-pe(j)],'-', 'Color', line_color(i,:),'LineWidth',0.5)
plot( [px(j) px(j)],[py(j)-pe(j) py(j)+pe(j)],':', 'Color', line_color(i,:),'LineWidth',0.5)
end
end
xlabel('\Delta_y [D]')
ylabel('
box('on')
xlim([-0.1 2.6])
legend1 = legend(legend_items');
set(legend1,'Location','northeast');
print(f3, 'WF_TI_all','-dpng','-r300')
%% plot average unsteady loading end of farm
row_start = 16;
row_end = 19;
f4 = figure;
set(gcf,'paperposition',[0,0,8.4,4.9])
hold on
for i = 1 : length(WF_cases_selected)
tmp_TI = zeros(size(WF_data.shift{i}));
for j = 1:WF_cases_n(i)
tmp_TI(j) = mean(mean(WF_data.WF_U_rms{i}{j}(row_start:row_end,:)./WF_data.WF_Um{i}{j}(row_start:row_end,:)))*100;
end
plot( WF_data.shift{i} , tmp_TI , line_tick{i} ,'Color', line_color(i,:) ,'MarkerFaceColor', line_color(i,:))
end
% manualy plot errorbars
for i = 1:length(WF_cases_selected)
tmp_TI = zeros(size(WF_data.shift{i}));
for j = 1:WF_cases_n(i)
tmp_TI(j) = mean(mean(WF_data.WF_U_rms{i}{j}(row_start:row_end,:)./WF_data.WF_Um{i}{j}(row_start:row_end,:)))*100;
end
px = WF_data.shift{i} ;
py = tmp_TI;
pw = 0.05;
pe = zeros(size(px))+ 0.01*tmp_TI;%for uncertainty value see Bossuyt et al. (2018) Physical Review Fluids.
for j = 1:WF_cases_n(i)
plot( [px(j)-pw/2 px(j)+pw/2] , [py(j)+pe(j) py(j)+pe(j)],'-', 'Color', line_color(i,:),'LineWidth',0.5)
plot( [px(j)-pw/2 px(j)+pw/2] , [py(j)-pe(j) py(j)-pe(j)],'-', 'Color', line_color(i,:),'LineWidth',0.5)
plot( [px(j) px(j)],[py(j)-pe(j) py(j)+pe(j)],':', 'Color', line_color(i,:),'LineWidth',0.5)
end
end
xlabel('\Delta_y [D]')
ylabel('
box('on')
xlim([-0.1 2.6])
legend1 = legend(legend_items');
set(legend1,'Location','northeast');
print(f4, 'WF_TI_end','-dpng','-r300')
Files
Files
(13.2 GB)
Name | Size | Download all |
---|---|---|
md5:9ed83cd52832358b1aa2092a7619504a
|
148.9 MB | Download |
md5:2b901a89e74ef8010dd586306d34892f
|
261.7 MB | Download |
md5:4b9d56551174364a2d3f533a9ecc1520
|
272.3 MB | Download |
md5:9800a778e0f4620200782915c35063a8
|
693.6 MB | Download |
md5:8522cff30353a6c859782c1c1fb149d6
|
680.9 MB | Download |
md5:6a1ac8199d1c56c7206dde3c96125a9e
|
238.3 MB | Download |
md5:8126ba793ae94e072854f4427231dfc5
|
191.5 MB | Download |
md5:729a17f2bd0d8032196036f3941740be
|
221.3 MB | Download |
md5:c065714645ea38ff3617eb845c2b6f01
|
197.9 MB | Download |
md5:df010a64170a4919bad03c9756f3674f
|
191.5 MB | Download |
md5:984c6ec7a7e7bbef3c650e7262f29132
|
183.0 MB | Download |
md5:53c36b62accbcdcafadece027ce9c159
|
691.5 MB | Download |
md5:aa61ac08729ab29d179bfb4c288adeb0
|
188.9 MB | Download |
md5:545b26713cb8415d90189aae81ba821d
|
171.1 MB | Download |
md5:59083e036aab8c2c284d273ac5793635
|
255.3 MB | Download |
md5:c450266fdba392ef35096daa4279f7c8
|
234.0 MB | Download |
md5:a3355c891f5c593f3ad032b7f66f8207
|
183.0 MB | Download |
md5:434c812df2a407f5bc6219a4d25ca223
|
212.8 MB | Download |
md5:d0967748225a896c7de1357d337ec5fd
|
234.0 MB | Download |
md5:2ad4c93218fb73a195b3015a9c372374
|
208.5 MB | Download |
md5:5f1cffeaaaedc2c2347a17ca4829ee2d
|
170.2 MB | Download |
md5:92ad7d5513a475d21b166f8b3860d5cd
|
306.4 MB | Download |
md5:73cef7d5bf07a098598b10dbea1fd5bb
|
218.7 MB | Download |
md5:ce4c36393c6f15becb3a3fe5dbdc4be6
|
186.0 MB | Download |
md5:bfd014311f286ffd3b19e51d834fe3d7
|
170.2 MB | Download |
md5:b275866bf98486c895dd735bd749afb9
|
212.8 MB | Download |
md5:c10f285960932c6c9d32ba2140d9201e
|
191.5 MB | Download |
md5:5455ad376fc9a2abdc3dac8126d18926
|
212.8 MB | Download |
md5:f92a10234923feb8751db31610ffe0fd
|
251.1 MB | Download |
md5:df04f085abab3804bf39933f4e58a058
|
191.5 MB | Download |
md5:c93a3097a33add6704cdff9b013ae082
|
178.7 MB | Download |
md5:2e5b878748b2512f00d9d47aec97bd2f
|
157.4 MB | Download |
md5:a16e04df84b2796b7c852737cfc31192
|
178.7 MB | Download |
md5:00376cb7c6b275e330279308df4bbdc8
|
161.7 MB | Download |
md5:acba6df4f214a009585b4159c8191c9f
|
195.7 MB | Download |
md5:29b61d5fec8d315e406fc93c990d598b
|
170.2 MB | Download |
md5:d51392a279f8a31f5495f23f37e06f64
|
202.1 MB | Download |
md5:8caee33450c05acc6e31fa0f4f0421ff
|
170.2 MB | Download |
md5:19818f1398f171dae0438af5a30fa3b3
|
171.5 MB | Download |
md5:5d8f3d829b2af73b2258775a9c41378d
|
223.8 MB | Download |
md5:4e7be45e427a0e313f58463e142201a8
|
172.3 MB | Download |
md5:6d4786cf7bcf7febcb54be1e3f5b01ea
|
187.2 MB | Download |
md5:2ae5eb9e9b892fd2b1fa206dafabcc27
|
203.4 MB | Download |
md5:23ec2317b25653448f6ad3022373d836
|
127.6 MB | Download |
md5:fb344c6643719271e1c3f6761e364033
|
127.7 MB | Download |
md5:324d66e6798b614ac0b58c1ab36c2723
|
170.2 MB | Download |
md5:84ee590b3190893e46927df311a3f1f9
|
170.2 MB | Download |
md5:abe4adcff1a2455c15928c81c491fba6
|
148.9 MB | Download |
md5:114f71f5d6d67f9120748e6bdfc76c63
|
340.4 MB | Download |
md5:fb099ac8a07b4d153e9bb632896b4506
|
170.2 MB | Download |
md5:4ca341743443f73e9fdc69aa2a5edc48
|
161.7 MB | Download |
md5:f6841e928d2f598efe62607ed82f52ae
|
157.4 MB | Download |
md5:0479c48968b475f83b469315f4577b3c
|
303.0 MB | Download |
md5:9bcbdf6a4c8a81db001f04f5a84985c5
|
340.4 MB | Download |
md5:26aa14717521f55d410c98c5ed365d3f
|
447.7 MB | Download |
md5:3521e5748e0fcba8cb3d4fb268c8479e
|
340.4 MB | Download |
Additional details
Funding
- European Commission
- ACTIVEWINDFARMS – Active Wind Farms: Optimization and Control of Atmospheric Energy Extraction in Gigawatt Wind Farms 306471
- U.S. National Science Foundation
- PIRE: USA/Europe Partnership for Integrated Research and Education in Wind Energy Intermittency: From Wind Farm Turbulence to Economic Management 1243482
References
- Bossuyt, J., Meneveau, C., & Meyers, J. (2018). Effect of layout on asymptotic boundary layer regime in deep wind farms. Physical Review Fluids.
- Bossuyt, J., Howland, M. F., Meneveau, C., & Meyers, J. (2017). Measurement of unsteady loading and power output variability in a micro wind farm model in a wind tunnel. Experiments in Fluids, 58(1), 1. http://doi.org/10.1007/s00348-016-2278-6
- Bossuyt, J., Meneveau, C., & Meyers, J. (2017). Wind farm power fluctuations and spatial sampling of turbulent boundary layers. Journal of Fluid Mechanics, 823, 329-344. http://doi.org/10.1017/jfm.2017.328