Wind tunnel experiment of a micro wind farm model

From MaRDI portal
Dataset:6700690



DOI10.5281/zenodo.1467411Zenodo1467411MaRDI QIDQ6700690FDOQ6700690

Dataset published at Zenodo repository.

Charles Meneveau, Bossuyt Juliaan, Johan Meyers

Publication date: 19 October 2018



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($\langle P_i /P_1\rangle_{1}^{19}$,Interpreter,Latex) 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($\langle P_i /P_1\rangle_{16}^{19}$,Interpreter,Latex) 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($ \langle TI \rangle_{1}^{19} [\%]$,Interpreter,Latex) 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($ \langle TI \rangle_{16}^{19} [\%]$,Interpreter,Latex) box(on) xlim([-0.1 2.6]) legend1 = legend(legend_items); set(legend1,Location,northeast); print(f4, WF_TI_end,-dpng,-r300)







This page was built for dataset: Wind tunnel experiment of a micro wind farm model