function nswaves = fmikeos2ns(oswaves, LookUps, site, contour, location) % Written by Joshua Simmons (WRL) 03/11/2014 % to transform waves from offshore (OS) to nearshore (NS) using MIKE21 model % oswaves - OS wave data - oswaves.Hsig(Significant wave height)/ % oswaves.Tp1(Peak period)/oswaves.Wdir(Incident wave direction) % LookUps - MIKE21 wave model output in file "OEH_ARC_PointOutput.mat" % site - embayment of interest - i.e. 'Narrabeen' % contour - 10 or 15 (m) contour for NS output % location - either pure S co-ord (see Mitchell Harley's xyz2spz % transformation) or location.E and location.N - refers to output % location for NS waves (gets nearest MIKE21 point) % %V1.1 - updated by Joshua Simmons 21/01/2015 to patch Wamberal/Wanda %error. %find site and contour indices siteidx = getnameidx(LookUps(:,2), site); %apply fix for Wamberal and Wanda % from TM on 21/01/2015: "I've found an error in the .mat file for the % look-up tables; in the pdf I say that all output for all locations runs % north to south - for Wamberal and Wanda it seems I've output them south to north. % So if you are using output from these two sites, if you haven't realised already, % alongshore gradients will look inverted." for aa = 1:2; LookUps{6,1}{aa,1} = flipud(LookUps{6,1}{aa,1}); LookUps{6,1}{aa,1}(:,1) = flipud(LookUps{6,1}{aa,1}(:,1)); LookUps{7,1}{aa,1} = flipud(LookUps{7,1}{aa,1}); LookUps{7,1}{aa,1}(:,1) = flipud(LookUps{7,1}{aa,1}(:,1)); end if contour == 10 contouridx = 1; elseif contour == 15; contouridx = 2; else error('Contour information not available, select either 10 or 15m contour') end %extract scenarios for easy lookup scenariosidx = getnameidx(LookUps(:,2), 'Offshore Wave Scenarios'); scenarios = LookUps{scenariosidx,1}; %get nearest location available for output Eouts = LookUps{siteidx,1}{contouridx,1}(:,2); Nouts = LookUps{siteidx,1}{contouridx,1}(:,3); if strcmp(site,'Narrabeen') %compares closes alongshore spacing (s) for log-spiral narrabeen xyz_data.x = cell2mat(Eouts); xyz_data.y = cell2mat(Nouts); xyz_data.z = zeros(size(Eouts)); spz = xyz2spz(xyz_data,'NARRA'); [~,locationidx] = min(abs(location-spz.s)); else %gets nearest output point dists = sqrt((location.E-cell2mat(Eouts)).^2+(location.N-cell2mat(Nouts)).^2); [~,locationidx] = min(abs(dists)); end fcount = 1; %loop through oswaves and lookup nswaves for ii = 1:length(oswaves.Hsig) tmpHs = oswaves.Hsig(ii); tmpTp = oswaves.Tp1(ii); tmpWdir = oswaves.Wdir(ii); %find closest scenario match [~,Hsidx] = min(abs(tmpHs-scenarios(:,1))); tmpHsround = scenarios(Hsidx,1); [~,Tpidx] = min(abs(tmpTp-scenarios(:,2))); tmpTpround = scenarios(Tpidx,2); [~,Wdiridx] = min(abs(tmpWdir-scenarios(:,3))); tmpWdirround = scenarios(Wdiridx,3); iter1ind = find(scenarios(:,3) == tmpWdirround); iter2ind = find(scenarios(iter1ind,2) == tmpTpround); iter3ind = find(scenarios(iter1ind(iter2ind),1) == tmpHsround); iter4ind = iter1ind(iter2ind(iter3ind)); %now get ns lookup information if available if isempty(iter4ind) %get the closest wave height to scenario chosen [~,iter3ind] = min(abs(tmpHs-scenarios(iter1ind(iter2ind),1))); iter4ind = iter1ind(iter2ind(iter3ind)); diffHs = scenarios(iter4ind,1)-tmpHs; disp(['No match found for oswaves(' num2str(ii) ') wave height off by ' num2str(diffHs) 'm']); end nstmp = LookUps{siteidx,1}{contouridx,1}{locationidx,4}(iter4ind,:); %store the values from the lookup table nswaves.Hsig(ii,1) = nstmp(1); nswaves.Hmax(ii,1) = nstmp(2); nswaves.Tp1(ii,1) = nstmp(3); nswaves.T01(ii,1) = nstmp(4); nswaves.Wdir(ii,1) = nstmp(5); nswaves.power(ii,1) = nstmp(6); end try nswaves.date = oswaves.date; nswaves.time = oswaves.time; nswaves.datenums = oswaves.datenums; catch nswaves.datenums = oswaves.datenums; end end