% Written by Joshua Simmons 11/02/2015 and updated 20/01/2016 % to convert from fielddata storage struct to SBEACH compatible format. clear clc %% Settings %profiledata locations basedatapath = 'D:\7 Erosion Models\a_nb_model_comparison\input_data\'; setupoutputpath = 'D:\7 Erosion Models\a_nb_model_comparison\sbeach\model_setup\setup_folders\'; infooutpath = 'D:\7 Erosion Models\a_nb_model_comparison\sbeach\model_setup\setup_info\'; %meta site = 'monavale'; % stormid = '2007'; % stormid = '2011'; % stormid = '2014'; stormid = '2015'; %write file to writetofile = 1; %boolean 1 = write to file, 0 = just SBEACHout. % other parameters; sbts = 5; %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 %check start time if tidedata.time(1) ~= wavedata.os.datenums(1) error('Start times for wave and tide data dont match') end if tidedata.time(end) ~= wavedata.os.datenums(end) error('End times for wave and tide data dont match. Make sure start/end times are hourly (for wave data).') end %check and allocate time parameters; sbtidetime = round((tidedata.time - tidedata.time(1))*24*60); %check time steps diffsbtidetime = diff(sbtidetime); if any(diffsbtidetime~=diffsbtidetime(1)) error('Inconsistent time steps in tide data'); end %now check the wave data lines up (os only required the rest if copied) sbwavetime = round((wavedata.os.datenums - wavedata.os.datenums(1))*24*60); diffsbwavetime = diff(sbwavetime); if any(diffsbwavetime~=diffsbwavetime(1)) error('Inconsistent time steps in wave data'); end %get the depth contour sbdepth = wavedata.ns.contour(1:2); %do the modelling for ii = 1:length(pfdata.data) if ~isnan(pfdata.data(ii).initial.x) pfid = ['PF' num2str(ii)]; %get profile info prifile = [pfdata.data(ii).initial.x pfdata.data(ii).initial.z]; %initial pf %angle of pf from true north pfangle = profileinfo.data(ii).TN; %angle from true north %create the other information required for files % for .WAV and .ANG file - wave height/period and angle files wavfile = [wavedata.ns.data(ii).Hsig wavedata.ns.data(ii).Tp1]; angfile = -1*(wavedata.ns.data(ii).Wdir-pfangle); %correct to SBEACH wave angle convention as per report 3 pg 19 wavets = sbwavetime(2)-sbwavetime(1); %wave time step minutes % for .ELV file - water elevation file elvfile = tidedata.tide; tidets = sbtidetime(2)-sbtidetime(1); %tide time step totaltimewav = sbwavetime(end); totaltimetide = sbtidetime(end); if totaltimewav - totaltimetide ~= 0 disp('Warning: difference between wave and tide total times') end totaltime = totaltimetide; totalmodeltimesteps = totaltime/sbts; disp([pfid ':']) disp(['A.10 - Total Time steps: ' num2str(totalmodeltimesteps)]) disp(['B.6 - DTWAV: ' num2str(wavets)]) disp(['B.11 - DTANG: ' num2str(wavets)]) disp(['B.12 - DMEAS: ' sbdepth]) disp(['B.20 - DTELEV: ' num2str(tidets)]) outpath = [setupoutputpath 'sb_' site '_' stormid '_' pfid '\']; cfginfo.NDT = totalmodeltimesteps; cfginfo.DT = sbts; cfginfo.DXC = pfdata.data(ii).initial.x(2)-pfdata.data(ii).initial.x(1); cfginfo.NDX = length(pfdata.data(ii).initial.x)-1; [cfginfo.XSTART,~] = min(pfdata.data(ii).initial.x); cfginfo.DTWAV = wavets; cfginfo.DTANG = wavets; cfginfo.DMEAS = str2double(sbdepth); cfginfo.DTELEV = tidets; %write to files if writetofile if ~exist(outpath, 'dir') mkdir(outpath) else delete([outpath '\*']) end writetofilepri(prifile, outpath, [site '_' stormid '_' pfid]) writetofilewav(wavfile, outpath, [site '_' stormid '_' pfid]) writetofileang(angfile, outpath, [site '_' stormid '_' pfid]) writetofileelv(elvfile, outpath, [site '_' stormid '_' pfid]) save([infooutpath 'cfginfo_' site '_' stormid '_' pfid '.mat'],'cfginfo') end end end