% Written by Joshua Simmons 11/02/2015 and updated 17/11/2017 % to convert from fielddata storage struct to SBEACH toolbox. clear clc %% Settings %profiledata locations basedatapath = '.\example\input_data\'; setupoutputpath = '.\temp\'; infooutpath = '.\example\setup_info\'; sbeachexepath = '.\sbeach_exe\final_exe\SBEACH.exe'; %meta site = 'narrabeen'; stormid = '2015'; %write file to writetofile = 1; %boolean 1 = write to file, 0 = just SBEACHout. % other parameters; sbts = 2; %time step length minutes %% Code - format the data %load profile data - account for different data names - lin/poly pfdata = load([basedatapath 'morphology\processed\morphology_' site '_' stormid '.mat']); fns1 = fieldnames(pfdata); pfdata = pfdata.(fns1{1}); %load wavedata wavedata = load([basedatapath 'fielddata\wave\processed\wavedata_' site '_' stormid '.mat']); fns2 = fieldnames(wavedata); wavedata = wavedata.(fns2{1}); %load tidedata tidedata = load([basedatapath 'fielddata\tide\processed\tidedata_' site '_' stormid '.mat']); fns3 = fieldnames(tidedata); tidedata = tidedata.(fns3{1}); % load the profileinfo file profileinfo = load([infooutpath 'profileinfo_' site '.mat']); fns2 = fieldnames(profileinfo); profileinfo = profileinfo.(fns2{1}); %check for dimension match if length(pfdata.data) ~= length(wavedata.ns.data) error('Wave data information does not match the morphology data') end %get the depth contour sbdepth = wavedata.ns.contour(1:2); pathrun = cell(length(pfdata.data),1); %do the modelling fprintf('Setting up %d SBEACH models...', length(pfdata.data)) for ii = 1:length(pfdata.data) if ~isnan(pfdata.data(ii).initial.x) fprintf('%d..',ii) pfid = ['PF' num2str(ii)]; %get profile info pfx = pfdata.data(ii).initial.x; pfz = pfdata.data(ii).initial.z; %angle of pf from true north pfangle = profileinfo.data(ii).TN; %angle from true north outpath = [setupoutputpath 'sb_' pfid '\']; % outpath = [setupoutputpath 'sb_' site '_' stormid '_' pfid '\']; sb_model = fsbeach_setupmodel(... 'bathy', { 'x', pfx, 'z', pfz}, ... 'waves', { 'time', wavedata.ns.data(ii).datenums, 'Hsig', wavedata.ns.data(ii).Hsig, 'Tp1', wavedata.ns.data(ii).Tp1, ... 'ang', wavedata.ns.data(ii).Wdir, 'pfang', pfangle}, ... 'tide', { 'time', tidedata.time,'elev', tidedata.tide}, ... 'settings', { 'DT', sbts, 'K', 2.5e-6, 'BMAX', 28.5, 'D50', 0.455 ... }, ... 'path', outpath, ... 'name', ['sb_' pfid] ... ); % variable grid can be specified in settings with e.g.: % 'NGRID', 3, 'DXV', [1 5 10], 'NDXV', [115 30 28] % hard bottom can be specified in bathy with e.g.: % 'hbz', pfz-1 measured(ii).x = pfdata.data(ii).measured.x; measured(ii).z = pfdata.data(ii).measured.z; pathrun{ii} = sb_model.path; end end fprintf('\n') fprintf('Running %d SBEACH models...', length(pathrun)) %now run sbeach EXE on the files setup for ii = 1:length(pathrun) fprintf('%d..',ii) [fail, cmdout] = fsbeach_runmodel(pathrun{ii},sbeachexepath); if fail error(cmdout); end end fprintf('\n') fprintf('Collecting SBEACH results...\n') %now collect the sbeach results sbout = fsbeach_collectresults(pathrun); fprintf('Getting measured data...\n') %attached the measured data sbout.measured = measured; fprintf('Processing SBEACH results...\n') %evaulate results sbout = fsbeach_processresults(sbout); fprintf('Done!\n')