⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 indexhdf.m

📁 低矮房屋风压系数、风荷载计算分析matlab程序
💻 M
字号:
function HDF_index = indexHDF( HDF_pathname )

HDF_index = struct([]);

if ~exist('HDF_pathname','var') || isempty(HDF_pathname)
    % Load pathname for HDF files used in last analysis, if available, otherwise create empty string:
    if exist('tmp_HDF_toppath.mat','file'), load('tmp_HDF_toppath'); end
    if ~exist('HDF_path','var') || ~isstr(HDF_path), HDF_path = ''; end
    % Prompt user to select pressure database folder:
    HDF_path = uigetdir(HDF_path,'Select the top-level directory containing HDF pressure database files');
    if any(HDF_path~=0)
        save('tmp_HDF_toppath','HDF_path');
        HDF_pathname = HDF_path;
    else
        err = errordlg('HDF pressure database folder selection cancelled', 'Analysis cancelled');
        uiwait(err); return;
    end
end
% if ~exist('bldg_struct','var') || isempty(bldg_struct)
%     % Load pathname for building input file used in last analysis, if available, otherwise create empty string:
%     if exist('tmp_bldg_path.mat','file'), load('tmp_bldg_path'); end
%     if ~exist('bldg_path','var') || ~isstr(bldg_path), bldg_path = ''; end
%     % Prompt user to select building input file and extract information from file:
%     [bldg_filename bldg_path]= uigetfile({'*.csv','CSV (Comma delimited)(*.csv)'},'Select building input file',bldg_path);
%     if any(bldg_filename~=0)
%         bldg_full_filename = fullfile( bldg_path, bldg_filename );
%         bldg_struct = readbldginfo( bldg_full_filename );
%         if isfield(bldg_struct,'error')
%             return;
%         end
%         % Save pathname to be used as default values in next analysis:
%         save('tmp_bldg_path','bldg_path');
%     else
%         err = errordlg('Building input file selection cancelled by user', 'Analysis cancelled');
%         uiwait(err); return;
%     end
% end
% length_units = bldg_struct.length_units;
% d0 = bldg_struct.d0;
% sf = bldg_struct.sf;
% S = diag(sf);
% S = S/det(S)^(1/4);

clr = get(0,'DefaultUicontrolBackgroundColor'); % Background color for figures and dialog boxes
h1 = waitbar(0, 'Please wait, searching directories... ','Color',clr,'WindowStyle','modal',...
    'Name','Creating index of HDF files...');

folder_list{1} = HDF_pathname;
i=1; % initialize counter for number of folders
n=0; % initialize counter for number of folders containing valid HDF files
while i<=length(folder_list)
    waitbar((i-1)/length(folder_list), h1, ['Please wait, searching directory ' num2str(i) ' of ' num2str(length(folder_list))]); drawnow; % update waitbar
    dir_listing = dir(folder_list{i});
    dir_folders = dir_listing(find([dir_listing(:).isdir]==1)); % list of subfolders
    sub_folders = setdiff({dir_folders.name},{'.','..'});
    if ~isempty(sub_folders)
        for j = 1:length(sub_folders)
            sub_folders{j} = fullfile(folder_list{i},sub_folders{j});
        end
        folder_list(length(folder_list)+1:length(folder_list)+length(sub_folders)) = sub_folders;
    end
    dir_files = dir_listing(find([dir_listing(:).isdir]==0)); % list of files
    filenames = {dir_files.name};
    if ~isempty(filenames)
        dir_count = 0; % initialize counter for the number of wind directions found in the current folder
        for j = 1:length(filenames)
            filename_j = filenames{j};
            hdf_ext_ind = strfind( lower(filename_j), '.hdf' );
            if ~isempty(hdf_ext_ind) && hdf_ext_ind(1)==length(filename_j)-3 && length(filename_j)>8
                dir_count=dir_count+1;
                hdf_filename_root{dir_count} = filename_j(1:hdf_ext_ind-5);
                theta_a(dir_count,1) = str2num( filename_j(hdf_ext_ind-4:hdf_ext_ind-1) )/10;
                dir_ind(dir_count) = j;
            end
        end
        if dir_count ==0
            i=i+1; continue;
        else
            hdf_filename_root = unique(hdf_filename_root);
        end
        if length(hdf_filename_root)>1
            warn = warndlg({'The following directory contains inconsistent file names: ', '', ['    ' folder_list{i}] , '',...
                ['All HDF file names in the selected directory must be identical '...
                'except for the wind direction, specified by the last 4 characters before the file extension. ' ...
                'Files in this directory will not be available for analysis.' ]}, ...
                'Error in pressure database folder contents');
            uiwait(warn); i=i+1; continue;
        end
        HDF_full_filename = fullfile(folder_list{i},filenames{dir_ind(1)});
        HDF_struct = load_hdf_coords( HDF_full_filename );
        required_fieldnames = {'Building_Width_Ft','Building_Length_Ft','Building_Height_Ft','Roof_Slope_in_12',...
            'A_Tap_Coordinates_3D_Units'};
        if ~isempty(setdiff(required_fieldnames,fieldnames(HDF_struct)))
            warn = warndlg({['The following HDF pressure database file is missing required field(s): '],...
                '', HDF_full_filename , '','The following fields are required:','',...
                'Building_Width_Ft','Building_Length_Ft','Building_Height_Ft','Roof_Slope_in_12',...
            'A_Tap_Coordinates_3D_Units'}, 'Error in pressure database file contents');
            uiwait(warn); i=i+1; continue;
        elseif HDF_struct.A_Tap_Coordinates_3D_Units ~= 'FS_Feet'
            warn = warndlg({['The following HDF pressure database file contains unrecognized length units ("' HDF_struct.A_Tap_Coordinates_3D_Units  '"): '],...
                '', HDF_full_filename , '',['(Expected units are "FS_Feet".) Files in this directory will not be available for analysis.' ]}, ...
                'Error in pressure database file contents');
            uiwait(warn); i=i+1; continue;
        elseif ~ismember(HDF_struct.Exposure_Name, {'Open_Country', 'Suburban' } )
            warn = warndlg({['The following HDF pressure database file contains unrecognized terrain conditions ("' HDF_struct.Exposure_Name '"): '],...
                '', HDF_full_filename , '',...
                ['(Expected terrain conditions are "Open_Country" or "Suburban".) Files in this directory will not be available for analysis.' ]}, ...
                'Error in pressure database file contents');
            uiwait(warn); i=i+1; continue;
        end
        n=n+1; % increment counter for number of folders containing valid HDF files
        
        HDF_index(n).filename = HDF_full_filename;
        filename_label = HDF_full_filename; filename_label(end-7:end-4) = '*';
        filename_label = [filename_label ' (' num2str(length(theta_a)) ' files)'];
        HDF_index(n).filename_label = filename_label;
        
        % extract full-scale dimensions of building:
        W = HDF_struct.Building_Width_Ft; L = HDF_struct.Building_Length_Ft; H = HDF_struct.Building_Height_Ft;
        R = round(HDF_struct.Roof_Slope_in_12*W/2*1000)/1000; 
        d = [W L H R];
        
        % make label for model dimensions:
        d_round = round(10*d)/10;
        d_symbol = 'WLHR';
        dimensions_label = [d_symbol(1) ' = ' num2str(d_round(1)) ' ft'];
        for k = 2:4
            dimensions_label = [dimensions_label ', ' d_symbol(k) ' = ' num2str(d_round(k)) ' ft'];
        end
        HDF_index(n).dimensions_label = dimensions_label;

        
        HDF_index(n).d = d;
        HDF_index(n).terrain = HDF_struct.Exposure_Name;
        HDF_index(n).pathname = folder_list{i};
        HDF_index(n).theta_a = theta_a;
        
        clear dir_ind theta_a hdf_filename_root;
    end
    i=i+1;
end
delete(h1);

if ~isempty(HDF_index)
%    dev = [HDF_index.dev];
%    [dev, ind] = sort(dev);
%    HDF_index = HDF_index(ind);
    save( fullfile(HDF_pathname, 'HDF_index'), 'HDF_index' )
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -